Cocos2d-x学习笔记(三) —— 如何移动精灵
2012-07-21 00:15
555 查看
我们在Cocos2d-x学习笔记(二) —— 如何添加一个精灵中,为游戏场景添加了一个精灵。但一个英雄或许太过孤单,我们应该加入一些敌人,让他来打败。
void addTarget()函数将会帮我们完成这一工作,敌人将会以随机的速度,从游戏场景右移动到左。
在HelloWorldScence.h里声明void addTarget(),并在HelloWorldScene.cpp里添加以下的代码,(请不要忘记在HelloWorldScene.cpp的开头加入using namespace cocos2d)
这里用callfuncN_selector(HelloWorld::spriteMoveFinished)回调了spriteMoveFinished方法,我们需要在HelloWorldScene.h里声明并如下来定义它,
要点
1. 关于随机函数。srand和rand是C标准库函数。对于每一个平台来说,你可以先获取毫秒级时间来得到一个随机数。在沃Phone上,这个函数是TimGetTickes(),而在iPhone上,你可以直接通过arc4random()函数来获得随机数。
2. Objc中的YES和NO,在cpp中变为true和false。
3. 回调函数,在objc中用selector:@selector(spriteMoveFinished),但在cpp中实现就比较复杂了,你可以参考cocos2dx\include\selector_protocol.h里的声明。一共有5种回调函数类型
schedule_selector
callfunc_selector
callfuncN_selector
callfuncND_selector
menu_selector
如何使用它们,根据所用函数的定义来决定。比如使用CCTimer::initWithTarget函数,它的第二个参数是SEL_SCHEDULE类型,到selector_protocol.h里查一下,可以看到对应的是schedule_selector(_SELECTOR)宏,所以调用时就需要在类里头实现一个void MyClass::MyCallbackFuncName(ccTime)函数,然后把schedule_selector(MyClass::MyCallbackFuncName)作为CCTimer::initWithTarget的第二个参数传入。
之后,我们应该定时地为游戏加入敌人,把以下代码加入到init()函数的返回值前。
然后在HelloWorldScence.cpp里实现gameLogic()。
最后在HelloWorldScence.h里声明这些方法
好了,所有事情都做完了,编译并运行,好好享用你的成果。如下图所示:
void addTarget()函数将会帮我们完成这一工作,敌人将会以随机的速度,从游戏场景右移动到左。
在HelloWorldScence.h里声明void addTarget(),并在HelloWorldScene.cpp里添加以下的代码,(请不要忘记在HelloWorldScene.cpp的开头加入using namespace cocos2d)
void HelloWorld::addTarget() { CCSprite *target = CCSprite::spriteWithFile("Target.png"); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); float minY = target->getContentSize().height/2; float maxY = winSize.height - target->getContentSize().height/2; int rangeY = (int)(maxY - minY); int actualY = (rand() % rangeY) + (int)minY; //取得随机Y轴坐标 //设置目标精灵的初始位置 target->setPosition(ccp(winSize.width + (target->getContentSize().width/2),actualY)); //将目标精灵添加到此场景中 this->addChild(target); int minDuration = (int)2.0; int manDuration = (int)4.0; int rangeDuration = manDuration - minDuration; //取得随机的速度 int actualDuration = (rand() % rangeDuration) + minDuration; //建立从右往左移动的动作 CCFiniteTimeAction *actionMove = CCMoveTo::actionWithDuration((ccTime)actualDuration, ccp(0 - target->getContentSize().width/2,actualY)); CCFiniteTimeAction *actionMoveDown = CCCallFuncN::actionWithTarget(this, callfuncN_selector(HelloWorld::spriteMoveFinished)); target->runAction(CCSequence::actions(actionMove,actionMoveDown,NULL)); }
这里用callfuncN_selector(HelloWorld::spriteMoveFinished)回调了spriteMoveFinished方法,我们需要在HelloWorldScene.h里声明并如下来定义它,
void HelloWorld::spriteMoveFinished(CCNode *sender) { CCSprite *sprite = (CCSprite *)sender; this->removeChild(sprite,true); }
要点
1. 关于随机函数。srand和rand是C标准库函数。对于每一个平台来说,你可以先获取毫秒级时间来得到一个随机数。在沃Phone上,这个函数是TimGetTickes(),而在iPhone上,你可以直接通过arc4random()函数来获得随机数。
2. Objc中的YES和NO,在cpp中变为true和false。
3. 回调函数,在objc中用selector:@selector(spriteMoveFinished),但在cpp中实现就比较复杂了,你可以参考cocos2dx\include\selector_protocol.h里的声明。一共有5种回调函数类型
schedule_selector
callfunc_selector
callfuncN_selector
callfuncND_selector
menu_selector
如何使用它们,根据所用函数的定义来决定。比如使用CCTimer::initWithTarget函数,它的第二个参数是SEL_SCHEDULE类型,到selector_protocol.h里查一下,可以看到对应的是schedule_selector(_SELECTOR)宏,所以调用时就需要在类里头实现一个void MyClass::MyCallbackFuncName(ccTime)函数,然后把schedule_selector(MyClass::MyCallbackFuncName)作为CCTimer::initWithTarget的第二个参数传入。
之后,我们应该定时地为游戏加入敌人,把以下代码加入到init()函数的返回值前。
//定时加入敌人 this->schedule(schedule_selecto(HelloWorld::gameLogic),1.0);
然后在HelloWorldScence.cpp里实现gameLogic()。
void HelloWorld::gameLogic(ccTime dt) { this->addTarget(); }
最后在HelloWorldScence.h里声明这些方法
public: void spriteMoveFinished(CCNode* sender); void gameLogic(cocos2d::ccTime dt); private: void addTarget();
好了,所有事情都做完了,编译并运行,好好享用你的成果。如下图所示:
![](http://pic002.cnblogs.com/images/2012/424748/2012072100141286.jpg)
相关文章推荐
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- (转)cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)
- 【学习笔记】Cocos2d-JS 如何创建精灵?(一)
- cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)。
- Cocos2d-x学习笔记(二) —— 如何添加一个精灵
- Cocos2d-x精灵学习笔记 分类: cocos2d代码编写 2015-07-27 17:17 5人阅读 评论(0) 收藏
- cocos2d-x 3.1.1 学习笔记[2]Sprite 精灵
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
- cocos2d-x-3.0学习笔记之如何实现地图的卷动
- cocos2d-x 2.X demo学习笔记 4 ----ActionsProgress 精灵慢慢展开
- SharePoint【学习笔记】-- 如何把网站集从Testing服务器移动到Production服务器(相同的Farm)
- 【学习笔记】cocos2d 如何绘制一张图片
- Cocos2d-x精灵学习笔记
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
- Cocos2d-x学习笔记 (1) 2.1版本后如何利用CCFileUtils设置资源路径
- cocos2d-x 2.X demo学习笔记 6 ----ClickAndMoveTest 触摸事件和移动
- 【学习笔记】cocos2d-x 如何创建一个按钮(文本按钮、图片按钮)
- 【Cocos2d-x3.0学习笔记 08】精灵来了
- cocos2d-x 菜鸟学习笔记十一(触摸控制精灵)