天天看點

cocos2d學習筆錄1CCDirector的主要作用:CCNode 常用API:接受加速計事件:

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());

本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366397,如需轉載請自行聯系原作者

繼續閱讀