主角虽然是只小猫,但为了体现动画的效果,将其分为四部分:主体、左手、右手和尾巴。其中主体部分的动画由三张图片构成,三张的明暗不同,在连续播放的时候就有了闪动效果;小猫向不同的方向移动手臂会有“上扬”的动作,这个效果通过图片的垂直镜像获得;尾巴部分通过旋转动作让它如同座钟摆一样左右摆动。由此,一个带有动画的主角就构造成功了,现在我们就按照上述描述构造主角小猫的类定义文件"GameObjHero"如下:
#ifndef _GAME_OBJ_HERO_H_
#endif _GAME_OBJ_HERO_H_
#include "cocos2d.h"
using namespace cocos2d;
class GameObjHero:public CCNode , public CCTargetedTouchDelegate
{
public:
CCSprite* lefthand; //左手
CCSprite* righthand; //右手
CCPoint offset; //触摸偏移位置
bool iscontrol; //是否在控制主角
GameObjHero(void);
virtual ~GameObjHero(void);
void releasebullet(); //释放子弹
CCRect rect();
virtual void onEnter();
virtual void onExit();
//触摸相关
bool containsTouchLocation(CCTouch* touch);
virtual bool ccTouchBegan(CCTouch* touch ,CCEvent* event);
virtual bool ccTouchMoved(CCTouch* touch ,CCEvent* event);
virtual bool ccTouchEnded(CCTouch* touch ,CCEvent* event);
virtual void touchDelegateRetain();
virtual void touchDelegateRelease();
};
#endif
知识点:
1.CCTargetedTouchDelegate类:
触摸协议,让主角可以接受用户的触摸信息。
中文官网上是这样解释这个类的:
使用这种类型的委托结果在两个好处:
1>你不需要处理CCSet(CCSet是作者对标准C 模板库(STL)中集合(std::Set)的一次封装,方便使用) ,调度员自动分配他们。你每次回调获得相应的UITouch。
2>ccTouchBegan返回YES,您可以*获取*一个UITouch 。Touches的更新只会发送给相关联的委托。 所以,如果你处理move/ ended/cancelled事件的更新,你可以确定这是要处理的触摸事件。 这可以让你在处理多点触摸时节省很多检查。 (有了TargetedTouchDelegate涉及到target的处理程序的handler,不需要处理其他的Handlders。 )
其类成员函数有如下:
- virtual bool ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent)
- virtual void ccTouchMoved (CCTouch *pTouch, CCEvent *pEvent)
- virtual void ccTouchEnded (CCTouch *pTouch, CCEvent *pEvent)
- virtual void ccTouchCancelled (CCTouch *pTouch, CCEvent *pEvent)
这应该很容易从字面上理解,我就不赘述了。
2.containsTouchLocation:这个函数就看看我们的触摸点是否在sprite中。
3.CCTouch:它封装了触摸点,可以通过locationInView函数返回一个CCPoint。
4.CCEvent:他封装了各种事件,这里是指触摸发生的相应事件。
ps:该文章内容多出自于《Cocos2d-x权威指南》,详情请自行购买查阅。
附上Touch事件机制的详细说明文章: