Cocos2d-x 3.x游戏开发之旅---(Runner实现总结)

《Runner》
1、 大部分类是继承 Node, 如果是基类,不用实现
virtual bool init();
CREATE_FUNC(XXXXX);
但如果是需要创建出来的类则需要实现上边两个函数。
2、 如果Player继承自 Entity,Entity继承自 Node。Player的属性是Node的默认属性(例如:CententSize默认为(0,0)),如果里面有Sprite需要显示,Sprite的位置在Player对象的(0,0)点,即如图:
所以如果需要用Player对象的ContentSize,需要用Sprite的ContentSize去设置它,而且还需要设置Sprite的位置在ContentSize的中点。
this->m_sprite = sprite;
this->addChild(m_sprite);
Size size = m_sprite->getContentSize();
m_sprite->setPosition(size / 2);
this->setContentSize(size);
Cocos2d-x 3.x游戏开发之旅---(Runner实现总结)_第1张图片

3、 无论继承自什么类型,把需要显示的内容 addChild 进来,不然不会显示。例如MonsterManager, 其中有Monster列表,需要把每个Monster 加入MonsterManager中;同时,在场景中创建MonsterManager对象,需要把该对象也addChild进来。
4、 如果在一个类中需要引用到另一个类的对象,需要在头文件中声明该类,class Player;同时在cpp中include该类的头文件。
引用的方法,是在创建A类的时候,调用A类型的函数bindActor(B),在A中保存B的对象。
5、 关于动作播放,在播放动作时需要考虑两种情况,一,如果当前有动作在执行,是否直接return;二,如果当前有动作在执行,是否直接中断。如果是直接中断的需要stopAllActions,同时需要重置当前状态(位置旋转可能已改变)。
6、 被击中动作:
auto backMove = MoveBy::create(0.1f, Point(-20, 0));
auto forwardMove = MoveBy::create(0.1f, Point(20, 0));
auto backRotate = RotateBy::create(0.1f, -5, 0);
auto forwardRotate = RotateBy::create(0.1f, 5, 0);
auto backActions = Spawn::create(backMove, backRotate, NULL);
auto forwardActions = Spawn::create(forwardMove, forwardRotate, NULL);
auto actions = Sequence::create(backActions, forwardActions, NULL);
7、 关于跳字,可通过移动label的位置和大小,实现跳字的效果。
8、 关于子弹击中玩家,检测是否被击中,最好实现在子弹类中,这样方便。

你可能感兴趣的:(Cocos2d-x)