cocos 学习笔记(一) 3.3x实现触摸拖动图片

在阅读学习《Cocos2D-x权威指南》(http://download.csdn.net/download/weicaijiang/8481765)这本书时,在第六章中有一个实例,实现单点触摸:主角随手指移动。
触摸和移动是移动游戏中很常见的操作,于是从这个实例开始学起。
首先,是在场景初始化中添加如下语句,用以创建被拖动的对象:

    setTouchEnabled(true);
    hero = CCSprite::create("xxxx.jpg");
    hero->setPosition(300,300);
    addChild(hero, 3);

然后是,重写五个函数,分别是ccTouchBegan、ccTouchMoved、ccTouchEnded、ccTouchCancelled以及registerWithTouchDispatcher。
但在实践这一步时遇到了问题:这几个函数不能被重写。通过查看HelloWorldScene类的父类图层类(Layer)时发现,他们都是final的,无法被重写,立时陷入尴尬。
后来查资料得知,我使用的Cocos是3.x版本,而这本书是以2.x版本作为讲解的,两者有一定的差异。
于是针对版本问题,在另一篇博文中找到了相关内容(http://blog.csdn.net/dionysos_lai/article/details/44016349),得知在3.x版本中,不再是通过registerWithTouchDispatcher函数注册侦听事件,而是要创建一个侦听对象进行侦听。
于是步骤发生了一些变化,需要重写的是onTouchBegan、onTouchMoved、onTouchEnded、onTouchCancelled这四个函数。并需要在init()中添加如下内容:

    auto m_touchListener =  EventListenerTouchOneByOne::create();
    m_touchListener->retain();
    m_touchListener->onTouchBegan =  CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
    m_touchListener->onTouchMoved =  CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
    m_touchListener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
    m_touchListener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this);
getEventDispatcher()->addEventListenerWithSceneGraphPriority(m_touchListener, this);

这几段代码代替了2.x版本中的注册,定义回调方法后将侦听和事件分发绑定。
各个回调函数的内容与2.x版本中大同小异,可见原书。但在其中有一点不同:
在点击后,获取点击位置,使用的是touch->getLocation();这个方法,而不是书中的locationInView方法。用这个方法得到的坐标不需要进行坐标转换(与setPosition使用的是同一套坐标系)。
效果图:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值