關於場景切換:
首先要明確的一點就是,在一個cocos程序執行之前,第一個展示出來的場景是利用applicationDidFinishLaunching() 函數裏面的 director->runWithScene(scene);這個函數來運行的,這個函數只在程序一開始運行還沒有場景的時候進行,也就是一個場景初始化的函數。一旦場景被初始化了,那麼下一次想展示別的場景就需要使用場景切換函數,即ReplaceScene.
利用director對象,進行場景切換。其實cocos2dx中,甚至是大部分計算機的東西,一定不要死記硬背,那是沒用的。計算機裏面的所有東西都是有道理的,比如這個場景切換,場景切換那麼肯定是整個程序的導演管理,一個程序只有一個導演。
那麼就利用
Director::getInstance()->replaceScene(自己創建的場景);
這樣的方法來實現場景的切換。
關於動作:
動作的執行其實主要是一個API就是RunAction.
可以對層中的遊戲元素設置動作。其實這個內容看api就可以。
我直接把我的源碼放上來,應該很容易理解:
auto label = LabelTTF::create("xuran", "宋體", 36);
label->setPosition(visibleSize.width/2, visibleSize.height/2);
addChild(label);
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [label](Touch *t, Event *e)
{
if(label->getBoundingBox().containsPoint(e->getCurrentTarget()->convertToNodeSpace(t->getLocation())))
{
//label->runAction(MoveBy::create(1,Point(-50,-50))->reverse()); 執行反向動作
//label->runAction(Spawn::create(MoveBy::create(1,Point(50,50)), RotateBy::create(1,360), NULL)); 執行並行動作
//label->runAction(Sequence::create(MoveBy::create(1,Point(100,100)), RotateBy::create(1,360), NULL)); 執行序列動作
//label->runAction(RepeatForever::create(RotateBy::create(1,180))); 執行永久重複動作
//label->runAction(Sequence::create(MoveBy::create(1,Point(100,100)), RotateBy::create(1,360), CallFunc::create([]()
//{
// MessageBox("action finish", "hahahahah");
//}),NULL));
//Director::getInstance()->replaceScene(ImageScene::CreateScene()); 場景切換
}
return false;
};
//label->runAction(RepeatForever::create(RotateBy::create(1,180)));
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);