关于场景切换:
首先要明确的一点就是,在一个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);