cocos2dx 学习之自定义你的CCSprite(一)
上一篇cocos2dx的教程,我们说到要用CCTableView创建背包,但是我们会看到我们的背包物品是不可以操作的。但在实际的游戏当中,背包里面的物品(装备、药材、任务物品之类)都是能够响应各种事件(单机、双击、长按)的。但是我们都知道我们的CCSprite不能响应我们的各种事件的。那么着呢们办呢,很简单,自定义CCSprite了,给它加上Touch响应就ok了。
那么我们要做的第一步就是要创建我们需要的类TestSprite 继承CCSprite吧。创建我们的创建精灵的方法:
static TestSprite * TestSprite::testSpriteWithFile(const char* fileName)。ok,我们就照着CCSprite的方法写一个static方法吧。上代码。
TestSprite * TestSprite::testSpriteWithFile(const char* fileName){
TestSprite *testSprite=new TestSprite();
if(testSprite&&testSprite->initWithFile(fileName)){
testSprite->autorelease();
testSprite->customInit();//自定义的方法用来初始化自己的特殊属性
return testSprite;
}
CC_SAFE_DELETE(testSprite);
return testSprite;
}
这些代码就多说了。很简单,当然不要忘记了构造和析构方法啊。这样我们的自定义精灵就好了,但是现在它其实还是和之前没有太大的差别,因为它还没有响应Touch事件。那我们接下来就给它添加touch事件吧。
首先它需要继承CCTouchDelegate(它是触摸事件委托,就是系统捕捉到触摸事件后交由它或者它的子类处理,所以我们在处理触屏事件时,必须得继承它)。引入它封装的几个方法:
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);
ok,到这里是不是看见很眼熟啊,在layer中的touch监听也是这个几个方法。其实CCLayer也是继承自CCTouchDelegate。当然CCTouchDelegate不止这几个方法。因为我们这里只需要单点触控,所以我们这里只用了CCTargetedTouchDelegate里的几个方法。
方法都引入之后,我们现在就给CCTouchDispatcher添加touch代理吧。代码如下
void TestSprite::onEnter(){
CCSprite::onEnter();
// true是吞噬掉事件
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);
}
void TestSprite::onExit(){
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCSprite::onExit();
}
ok,现在我们的这个精灵就可以响应touch事件了,当然现在它只是能响应基本的touch事件。我们想要的双击和长按还没有实现 ,这个我们下次再说。今天就说到这里,嗯,很晚了,该睡了,最近总能听到程序员猝死的消息,挺可怕,程序员要关爱自己的身体啊(自从java老师去世之后,我这脑子啊~~~)。12点了,睡觉~~~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?