1.通路和改變場景;
2.通路cocos2d-x的配置細節
3.通路視圖(OPENGL,UIVIEW,UIWINDOW);
4.暫停,恢複和結束遊戲;
5.在UIKit和OpenGL之間切換坐标
1.生成一個新的節點:
CCNode*childNoe = CCNode::create();
2.将新節點添加為子節點
myNode>addChile(childNode,0,123); //0是層級,123是tag屬性
3.擷取子節點:
CCNode *retrevedNode = myNode->getChildByTag(123);
4.通過tag删除子節點,cleanup會停止任何運作中的動作:
myNode->removeChildByTag(123,true);
5.通過節點指針删除節點:
myNode->removeChild(retrievedNode);
6.删除一個節點的所有子節點:
myNode->removeAllChildenWithCleanup(true);
7.從myNode的父節點删除myNode:
myNode->removeFromParentAndCleanup(true);
使用動作:
1.一下是一個動作的申明:
CCAction *action = CCBlind::create(10,20);
action->setTag(234);
2.運作這個動作會讓節點閃爍:
myNode->runAction(action);
3.如果你想再以後使用此動作,你可以用tag擷取:
CCAction*retrievedAction = myNode->getActionByTag(234);
4.你可以用tag停止相關連的動作:
myNode->stopActionByTag(234);
5.或者你也可以用動作指針停止動作:
myNode->stopAction(action);
6.你可以停止所有在此節點上運作的動作:
myNode->stopAllActions();
如果你想運作不同的方法,或者是每秒調用10次更新的方法的話,你應該使用一下代碼:
void HelloScene::init()
{
this->schedule(schedule_selector(HelloWorld::updataTen),0.1f);
}
void HelloScene::updateTen()
//此方法将根據時間間隔來調用,每隔10秒
如果時間間隔(interval)為0的話,你應該使用scheduleUpdate方法。不過,如果你想之後停止對某個指定更新的方法的預定資訊的話,上述代碼更加合适。因為scheduleUpdate方法沒有停止預定資訊的功能。
停止預定資訊
unschedule
OC中可以用一個隐式指針:_cmd
//用_cmd關鍵詞停止目前方法的預定
[self unschedule:_cmd];
局限于OC
//随機數的産生
CCRANDOM_0_1 随機生成0-1之間的随機數
//優先級設定
this->scheduleUpdateWithPriority(0);
這裡的優先級順序是從低到高
CCScene是場景視圖的第一個節點。通常CCScene的子節點都是繼承自CCLayer。
問題:如果兩個界面都是100M,那麼瞬間就是200M太大了,怎麼解決?
方法:可以加載一個loading界面來過渡!
CCTransitionFade*fade = CCTransitionFade::transitionWithDuration(1.f,Scene2::scen(),ccBLACK); //最後一個參數是預設參數,可以不寫,他預設ccBlack
//CCDirector::sharedDirector()->pushScene(fade);
//CCDirector::sharedDirector()->repleaseScene(fade);
push方法不會調用原來場景的析構方法,而replease方法會調用原來場景的記憶體,會調用析構函數。
問題:哪種情況用push來切換場景,哪種情況用replease來切換場景?
方法:如果是暫停來切換暫停場景,那麼用pushScene,原來的遊戲場景不需要釋放,如果是遊戲場景的切換,一般用repleaseScene方法來切換。
push一個場景必須pop才能釋放記憶體,一般用replease來切換場景
//觸摸注冊事件//如果沒有這個,預設的是多點觸摸,Target是單點,Stand是多點觸摸
ccTouchBegan傳回的是一個BOOL值,如果是true的話,那就意味着你不想讓目前的觸摸事件傳到到其他觸摸事件處理器。你實際上是“吞下了”這個觸摸事件。
和觸摸輸入一樣,加速計必須在啟用以後才能接受加速計事件:
this->setAccelerometerEnabled(true);
同樣的,層裡面要加入一個特定的方法來接受加速計事件:
void HelloWorld::didAccelerate(CCAcceleration*pAccelerationValue)
CCLOG("pAccelerationValue:X:%f/y:%f/z:%f",pAccelerationValue.x,pAccelerationValue.y,pAccelerationValue.z);
注意:
資源檔案名的大小寫,真機上是區分大小寫的,而模拟器是不區分的。
事件間隔動作:
CCMoveTo*move = CCMoveTo::create(3,ccp(100,200));
myNode->runAction(move);
重複動作:
CCRotateBy *rotateBy = CCRotateteBy::create(2,360);
CCRepeatForever*repeat = CCRepeatForever::cease(rotateBy);
舒緩動作:
CCMoveTo *move = CCMoveTo::create(3,cpp(100,200));
//節點慢慢啟動,在移動中加速
CCEaseInOut*ease = CCEaseInOut::create(move,4);
myNode->runAction(ease);
cocos2d實作了一下CCEaseAction類:
例如:CCEaseBackIn
動作序列CCSequence
CCSequence *seq = [CCSequence actions:tint1,tint2,nil];
[label runAction:seq];
回調函數:
//CCCallFunc是執行對應的回調函數,其中回調函數不可帶參數。一般使用靜态成員函數create建立執行個體
CCCallFunc *callFunc = CCCallFunc::create(this,callfunc_selector(HelloWorld::funC_CallBack));
pLabel->runAction(callFunc);
//帶參數的回調CCCallFuncN,其中帶一個參數,一般由靜态成員create建立執行個體
CCCallFuncN *callFuncN = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::funcN_CallBack));
pLabel->runAction(callFuncN);
void HelloWorld::funcN_CallBack(void *sender)
CCLabelTTF *label = (CCLabelTTF *)sender;
label->setStrign("hello");
CCLog("CallFuncN的回調");
//帶兩個參數的回調
CCString *str = CCString::create("data參數");
str->retain();
CCCallFuncND *callFuncND = CCCallFuncND::create(this,callfuncND_selector(HelloWorld::funcND_CallBack),str); //最後一個參數是void*可以是任意類型
pLabel->runAction(callFuncND);
void HelloWorld::funcN_CallBack(void *sender,void *data)
CCString *str = (CCString *)data;
label->setString(str->getCString());
//CCCallFuncO
CCString *str = CCString::create("object參數");
CCCallFuncO*callFuncO = CCCallFuncO::create(this,callfuncO_selector(HelloWorld::funcO_CallBack),str);
pLabel->runAction(callFuncO);
void HelloWorld::funcO_CallBack(CCObject *object)
CCString * = (CCString *)object;
CCLog("%s",str->getCString());