【Cocos2dx】动作监听

【Cocos2dx】动作监听,第1张

概述其实Cocos2dx动作监听,如果把《【Cocos2dx】基本动作、动作序列与动作合并》(点击打开链接)联系起来,就变得简单了。所谓的“Cocos2dx动作监听”实质上就是一个在某一段动作之后执行的函数,一个“假”动作,下面继续用一个例子来说明这个问题。 如下图,一个按钮精灵,在闪烁3次并向上移动100px之后,在屏幕上显示"Action Done!",实质就是在屏幕上添加"Action Done

其实Cocos2dx动作监听,如果把《【Cocos2dx】基本动作、动作序列与动作合并》(点击打开链接)联系起来,就变得简单了。所谓的“Cocos2dx动作监听”实质上就是一个在某一段动作之后执行的函数,一个“假”动作,下面继续用一个例子来说明这个问题。

如下图,一个按钮精灵,在闪烁3次并向上移动100px之后,在屏幕上显示"Action Done!",实质就是在屏幕上添加"Action Done!"的标签。


首先还是新建一个用cpp语言写的名为moveAction的Cocos2dx工程,打开里面proj.win32的HelloCpp.sln开始程序编写,在AppDelegate.cpp关掉调试信息,此步骤已经在此前文章多次提及,不会的可以参看《【Cocos2dx】windows平台下Cocos2dx 2.x的下载、安装、配置,打造自己的Helloworld》(点击打开链接)。

之后先在HelloWorldScene.h删除原关闭按钮的函数声明,替换成动作回调/动作监听的函数声明,与一些宏定义信息。

#include "cocos2d.h"class HelloWorld : public cocos2d::cclayer{public:    // Here's a difference. Method 'init' in cocos2d-x returns bool,instead of returning 'ID' in cocos2d-iphone    virtual bool init();      // there's no 'ID' in cpp,so we recommend returning the class instance pointer    static cocos2d::CCScene* scene();        voID actionCallback();//声明一个回调函数        // implement the "static node()" method manually    CREATE_FUNC(HelloWorld);};
最后,把HelloWorldScene.cpp修改成如下代码。主要是bool HelloWorld::init()的修改与删去原来的关闭按钮函数,新建一个属于自己的动作监听函数HelloWorld::actionCallback()
#include "HelloWorldScene.h"USING_NS_CC;CCScene* HelloWorld::scene(){	// 'scene' is an autorelease object	CCScene *scene = CCScene::create();	// 'layer' is an autorelease object	HelloWorld *layer = HelloWorld::create();	// add layer as a child to scene	scene->addChild(layer);	// return the scene	return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){	//获取屏幕的尺寸、位置信息等        	CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();      	//设置精灵,并把精灵添加到舞台的中央  	CCSprite *sprite=CCSprite::create("CloseSelected.png");  	sprite->setposition(ccp(visibleSize.wIDth/2,visibleSize.height/2));  	this->addChild(sprite);  	//动作1  	CCFiniteTimeAction* action1=CCBlink::create(1.0f,3); //在一秒内闪烁三次  	//动作2  	CCFiniteTimeAction* action2=CCMoveBy::create(1.0f,ccp(0,100)); //在1秒内提升100px	//声明动作回调函数	CCCallFunc *callFunc=CCCallFunc::create(this,callfunc_selector(HelloWorld::actionCallback));	//合并上述动作,并应用到精灵  	CCFiniteTimeAction* sequence=CCSequence::create(action1,action2,callFunc,NulL);  	sprite->runAction(sequence);  	return true;}voID HelloWorld::actionCallback(){		CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();//获取屏幕的尺寸、位置信息等	cclabelTTF *labelTTF = cclabelTTF::create("Action Done!","arial",72);//声明一个文字	labelTTF->setposition(ccp(visibleSize.wIDth/2,visibleSize.height/2));//将此文字添加到屏幕的中间位置	this->addChild(labelTTF);  }
与《【Cocos2dx】基本动作、动作序列与动作合并》( 点击打开链接)一样,先声明一个精灵,图片为自带的按钮,之后给予它闪烁与上升动作。

关键是通过CCCallFunc声明一个动作回调函数为HelloWorld::actionCallback,Cocos2dx的动作声明如同《【Cocos2dx】使用CCControlbutton创建按钮、按钮点击事件,点击事件中的组件获取,setposition的坐标问题》(点击打开链接)。

最后将这个动作回调函数与闪烁、上升两个动作联系起来的方法,同样是通过CCSequence建立一个动作序列,只是callFunc动作位于action1与action2之后,然后其执行的动作,是我们自己手写的voID HelloWorld::actionCallback(){}

Cocos2dx的动作监听就是如此的简单。

总结

以上是内存溢出为你收集整理的【Cocos2dx】动作监听全部内容,希望文章能够帮你解决【Cocos2dx】动作监听所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1070248.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存