Cocos2d-x Sprite 執行 CCFade~ 這類透明度變化動作的一些有關問題
在引擎中提供了幾個有關透明度變化的動作:CCFadeIn,CCFadeOut,CCFadeTo
CCFadeIn:the opacity from 0 to 255
CCFadeOut:the opacity from 255 to 0
CCFadeTo: from the current value to a custom one
下面簡單記錄一下我所遇到的一些問題:
問題一:父Sprite執行fade動作,子Sprite不執行問題
看到下面的程式碼:
分析:這裡面的父sprite添加了一個子sprite,那麼當父sprite執行fade out的動作,子sprite也是要一樣執行fade out這個動作的,但是實際執行結果是,只有父sprite執行了這個動作,子sprite並沒有執行。CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite* bgSprite = CCSprite::create("HelloWorld.png"); bgSprite->setPosition(ccp(winSize.width/2, winSize.height/2)); this->addChild(bgSprite); CCSprite* sprite = CCSprite::create("Icon.png"); sprite->setPosition(ccp(200, 200)); bgSprite->addChild(sprite); CCFadeOut* fadeout = CCFadeOut::create(1); bgSprite->runAction(fadeout);
那麼這個問題如何解決呢? --- 一個最笨的方法就是 去getChildren() 然後每一個子sprite再去執行這個動作。
那麼,還有其他方法嗎?
--有的。我們可以用 setCascadeOpacityEnabled 這個方法。
在 CCRGBAProtocol 類定義了這個方法:
/** * whether or not opacity should be propagated to its children. */ virtual bool isCascadeOpacityEnabled(void) = 0; virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled) = 0;
看到註釋就知道是神馬作用了,當設定為true的時候,父sprite執行opacity的變化,子sprite也同樣會執行到這個變化。
再具體看看:
void CCNodeRGBA::setCascadeOpacityEnabled(bool cascadeOpacityEnabled)
{
_cascadeOpacityEnabled = cascadeOpacityEnabled;
}
virtual void updateDisplayedOpacity(GLubyte opacity) = 0;
void CCNodeRGBA::updateDisplayedOpacity(GLubyte parentOpacity) { _displayedOpacity = _realOpacity * parentOpacity/255.0; if (_cascadeOpacityEnabled) { CCObject* pObj; CCARRAY_FOREACH(m_pChildren, pObj) { CCRGBAProtocol* item = dynamic_cast<CCRGBAProtocol*>(pObj); if (item) { item->updateDisplayedOpacity(_displayedOpacity); } } } }
同樣的,在這個類中還有這個方法:
/**
* whether or not color should be propagated to its children.
*/
virtual bool isCascadeColorEnabled(void) = 0;
virtual void setCascadeColorEnabled(bool cascadeColorEnabled) = 0;
顯然就是為了在父sprite執行顏色變化的時候,子sprite也可以執行到這個變化。
回到上面的程式碼例子,新增: bgSprite->setCascadeOpacityEnabled(true); 這條語句就沒有問題了。
問題二:自定義的sprite執行 CCFade~ 的問題
我自定義了一個sprite類:在這個自定義的精靈內部又添加了兩個子sprite。
SelectedBoxSprite* SelectedBoxSprite::createWithPic(const char *name)
{
SelectedBoxSprite* pobView = new SelectedBoxSprite();
if (pobView && pobView->initWithFile(name) && pobView->setUpdateView()) {
pobView->autorelease();
return pobView;
}
CC_SAFE_DELETE(pobView);
return NULL;
}
bool SelectedBoxSprite::setUpdateView()
{
bool isRet = false;
do {
this->setCascadeOpacityEnabled(true);
CCSprite* spr1 = CCSprite::create("yellow.png");
spr1->setAnchorPoint(CCPointZero);
spr1->setTag(1);
spr1->setPosition(ccp(0, 4));
this->addChild(spr1);
listSpriteArray->addObject(spr1);
CCSprite* spr2 = CCSprite::create("yellow_1.png");
spr2->setAnchorPoint(CCPointZero);
spr2->setTag(2);
spr2->setPosition(ccp(0, 30));
this->addChild(spr2);
listSpriteArray->addObject(spr2);
isRet = true;
} while (0);
return isRet;
}
我建立了這樣的一個例項,想要執行CCFadeIn這個動作
SelectedBoxSprite* selectBoxSprite = SelectedBoxSprite::createWithPic("list_box.png");
selectBoxSprite->setAnchorPoint(ccp(0.5, 0.5));
selectBoxSprite->setPosition(ccp(300, 305));
selectBoxSprite->setTag(2);
this->addChild(selectBoxSprite,1);
CCFadeIn* fadein = CCFadeIn::create(1);
selectBoxSprite->runAction(fadein);
但是,發現有問題,就是這個自定義sprite裡面的兩個子sprite不會執行這個fade in動作。
那麼這麼辦呢?
那我就想 CCFadeOut 也會不會有這個問題呢
CCFadeOut* fadeout = CCFadeOut::create(1);
selectBoxSprite->runAction(fadeout);
發現沒有問題,這個自定義的sprite會fade out;
同樣我又試了一下 CCFadeTo ,同樣也是沒有問題
CCFadeTo* fadeto = CCFadeTo::create(1, 0);
selectBoxSprite->runAction(fadeto);
這個時候,我冷靜下來看看程式碼,發現原來 在fade in之前沒有 將這個精靈的opacity設定為 0
//這個很重要,不要忘了
selectBoxSprite->setOpacity(0);
CCFadeIn* fadein = CCFadeIn::create(1);
selectBoxSprite->runAction(fadein);
這樣發現執行就正常了,裡面的兩個子sprite也會運行了。
相關推薦
Cocos2d-x Sprite 執行 CCFade~ 這類透明度變化動作的一些有關問題
Cocos2d-x Sprite 執行 CCFade~ 這類透明度變化動作的一些問題 在引擎中提供了幾個有關透明度變化的動作:CCFadeIn,CCFadeOut,CCFadeTo CCFadeIn:the opacity from 0 to 255 CCFadeO
Cocos2d-x 專案新建自定義類後編譯錯誤:打不開自定義標頭檔案錯誤解決方案
現在Cocos2dx新建工程需要執行Python指令碼來建立,不再提供Cocos2dx模板。一般我們使用VS2010編譯完Cocos2dx後,可以開始使用Cocos2dx目錄下\tools\project-creator\create_project.py來建立工程。 命
cocos2d-x 3.4 之 三消類遊戲——萬聖大作戰(附加篇)
***************************************轉載請註明出處:http://blog.csdn.net/lttree******************************************** 三消遊戲——萬聖大作戰,應該是
Cocos2d-X多執行緒(3) cocos2dx中的執行緒安全
在使用多執行緒時,總會遇到執行緒安全的問題。cocos2dx 3.0系列中新加入了一個專門處理執行緒安全的函式performFunctionInCocosThread(),他是Scheduler類的一個成員函式: void Scheduler::performFunction
13.cocos2d-x多執行緒(二)執行緒鎖
xxx.h檔案: int count; void threadA(); void threadB(); xxx.cpp檔案: /* 引
Cocos2d-x 3 1 1 Lua示例 ActionEaseTest(動作)
cc.p(60, s.height * 4 / 5)) -- 初始化層 Helper.initWithLayer(layer) return layerend------------------------------------- SpriteEase------------------------
對非執行緒安全類List的一些總結
一個專案的一個功能點,需要從介面接受返回資料,並對返回的資料進行一些業務處理,處理完成之後,新增到一個List<T>中,然後在View中迴圈這個List<T>,展示所有的資料。每次從介面中取回的資料量不等,最多會有上百條。雖說上百條也不算多,但是每條資料都要經過一系列的業務處理,感覺這
cocos2d-x類型轉換(CCstring int string char UTF-8互轉)
htm for ons cocos2d oat form int str intvalue http://www.cnblogs.com/leehongee/p/3642308.html //int 轉 CCstring int num=5; CCString* n
Cocos2d-x第三方類庫不支持arm64的問題解決(64位架構)
data- cocos -a mar 三方庫 popu dsm article 位操作 32位能夠兼容64位操作系統。 ipad mini2 64位編譯有問題。 各種第三方庫不支持64位操作系統。 設置build setting 直接上圖:
Cocos2d-x學習筆記(四)淺析動作類CCAction(3)
【1】動作管理類CCActionManager: 動作管理類CCActionManager是一個管理所有動作的單例,可以對動作進行一系列的操作,如:新增動作、刪除動作、暫停動作、重啟動作,這個單例可以通過CCDirector::sharedDirector()->getActionMa
Cocos2d-x學習筆記(三)淺析動作類CCAction(2)
有關CCAction其它動作類簡介: (1)攝像機動作類CCOrbitCamera: 攝像機動作是環繞中心螢幕旋轉所形成的動作,其旋轉座標採用球座標描述。 Create()函式原型CCOrbitCamera* create(fl
Cocos2d-x學習筆記(二)淺析動作類CCAction(1)
Cocos2d-x的動作類CCAction並不是一個在螢幕中顯示的物件,動作必須要依託於CCNode類及其子類的例項才能發揮作用。CCAction繼承於物件類CCObject,有三個子類:有限時間動作、跟隨、移動速度,其中有限時間動作子類CCActionInterVal會形成動畫過程。
cocos2d-x 中選單類
選單相關類包含:選單類和選單項類,選單類圖,從類圖可見Menu類繼承於Layer。 選單項類圖,從圖中可見所有的選單項都是從BaseMenuItem繼承而來的,BaseMenuItem是抽象類,具體使用時是使用它的6個子類。 說明如下: MenuItem 最基本的選單
cocos2d-x 動作類
int 動作 相關 n) 分享 img 間隔 .com inter 動作類是Action IntervalAction是間隔動作,InstantAction是瞬時動作。 動作的管理是要由節點負責的,任何的節點都可以管理節點,如精靈、菜單、層、甚至場景都可以管理
自定義Cocos2d-x類模板
由於許可權問題,mac安裝Cocos2d-x 3.x版本後,新建Cocos2d-x專案正常,但需要新建cocos2dx類檔案時發現沒有模板,瞬間懵逼,難道新建C++檔案,雖然新建後得到的是.cpp、.hpp字尾的類檔案,與Cocos2dx的類檔案.cpp、.h內容有一點不一樣,但功能沒什麼區別,
cocos2d-x lua 面向物件 ===> 呼叫基類在派生類中已經被過載了的函式
基類: local Base = class("Base", function () return cc.Layer:create() end) function Base:ctor( ... ) end function Base:test(self, ...
【iOS-cocos2d-X 遊戲開發之四】Cocos2dX建立Android NDK新專案並編譯匯入Eclipse中正常執行!
站文章均為 李華明Himi 原創,轉載務必在明顯處註明: 轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/android-game/645.html ☞ 點選訂閱 ☜ 本部落格最新動態
cocos2d-x v3.0各個環境下建立專案以及編譯、執行官方DEMO
如何建立一個新專案 How to start a new game Runsetup.pyRun thecocosscriptExample: $ cd cocos2d-x $ ./setup.py $ source FILE_TO_SAVE_SYSTEM_VARIAB
如何把win32下寫好的cocos2d-x 轉到android上執行
首先必須具備幾樣工具。 cygwin , ndk , android-sdk,eclipse 編譯。 其實很簡單。 cocos2d-x 2.0.1的最新版本。裡面有個檔案create-android-project.bat 關於這個配置,我前幾篇文章有寫 現在生
【玩轉cocos2d-x之二十二】多執行緒和同步02-售票
pthread有很多不同應用,官網都有相應的API解釋和Sample,這裡不再重複,本文主要介紹一個cocos2d-x多執行緒和同步示例。 1.售票 孫鑫老師的C++和Java多執行緒售票一直讓