Cocos2d-x基础示例-精灵移动1
2012-11-11 22:59
363 查看
Cocos2d-x 精灵的移动
上一篇我们已经将飞机放到了屏幕上,接下来,我们得让它动起来。
第一问题:控制问题
iOS设备有两种输入方式,一种是重力感应,另外一种是触摸屏幕(你要非跟我说Home键也算一种输入方式的话..那就是三种)。
Cocos2d-x中的CCLayer类的最重要功能,就是接收这两种输入方式。鉴于模拟器无法复现重力感应,所以这篇文章主要介绍触摸的功能。
这次的主要目标是:点击屏幕上一个点,飞机向那个点飞去。
OK,开始
第一步,我们先要开启Helloworld里中的触摸感应功能;将下列代码添加到helloworld的init函数中
//打开触摸感应
this->setTouchEnabled(true);
好吧,我们先搞清楚这句话是咋来的。this代表的是当前helloword这个对象,而setTouchEnabled则是继承自CCLayer的一个函数(鼠标邮件查看定义,这是基本功),还记得我们的helloworld类命后面那段巨大个儿的代码么?
classHelloWorld : publiccocos2d::CCLayer
对,就素它。
它表示helloworld继承于CCLayer类,所以可以使用CCLayer类的函数,OK,接下来直接去CCLayer类中找到这跟触摸相关的函数,将其定义复制到helloworld类的头文件中去:
// 触摸相关
virtual
void ccTouchesBegan(CCSet *pTouches,
CCEvent *pEvent);
virtual
void ccTouchesMoved(CCSet *pTouches,
CCEvent *pEvent);
virtual
void ccTouchesEnded(CCSet *pTouches,
CCEvent *pEvent);
virtual void ccTouchesCancelled(CCSet *pTouches,CCEvent *pEvent);
稍微讲解下这几个函数的作用
ccTouchesBegan接受的是你点击屏幕的那一下的信息
ccTouchesMoved接受的是手指在屏幕上滑动/停留的信息
ccTouchesEnded 接受手指离开屏幕的那下下~
ccTouchesCancelled很罕见的情况才会用到这厮,例如,突然来电话啦~没电啦..不过话说通常的游戏也不会在那时候进行处理。
还要注意的一个问题,上面几个函数都是有单数形式的,即Touch后面没有es复数词缀,支持的是单点触摸,但由于单点触摸在CCLayer中需要自己去注册,老夫的懒虫劲又上来了,所以
好的,让我们先实现一下,点击某点之后,召唤飞机到你点的那个坐标上去。
我们先采用ccTouchesBegan函数,在helloworld的ccTouchesBegan函数体中写上以下代码:
CCSetIteratorit=pTouches->begin();
CCTouch* touch=(CCTouch*)(*it);
CCPointm_tBeginPos=touch->locationInView();
m_tBeginPos=CCDirector::sharedDirector()->convertToGL(m_tBeginPos);
CCLog("Positionis %f and %f",m_tBeginPos.x,m_tBeginPos.y);
OK,有点迷茫了是吧?
前三句是获取了触碰点在iOS设备屏幕上的坐标,第四句呢?
要知道一点,iOS设备和openGL的坐标系有所区别,所以我们呼唤出万能的CCDirector类来帮忙,转化为openGL坐标系。
最后的一句话调用了一个CCLog,是一个比较常用的调试办法,在命令行输出信息,这样就更能方便你查看后台究竟发生了什么。当然了,在发布前一定要注意把这些话给删掉,后台大量的输出信息,是及其影像效率的。
接下来呢,是让飞机移动到这个坐标上。
我们在下面继续添加:
CCAction* moveto=CCMoveTo::actionWithDuration(2, m_tBeginPos);
player->runAction(moveto);
这两句是声明了一个moveto的动作,要注意的是actionWithDuration的两个参数,前面的是时间,后面的是CCPoint的位置。
第二句则更简单,使用player精灵调用了runAction。
现在运行模拟器,点击后,你会发现飞机精灵在两秒钟之内移动到了你点击的位置。
大家多玩几次,就会发现这种方式非常死板,无论距离何如,飞机总是在2秒内慢慢飘向触摸位置,而且实际上这种方式在连续点击的时候,效率非常低,实用性也不高,也可能是老夫是新手的缘故,实在找不出使用这种方式的理由。所以下一节,我们会采用一种更好的方式,更现实的方式来实现这个功能。
上一篇我们已经将飞机放到了屏幕上,接下来,我们得让它动起来。
第一问题:控制问题
iOS设备有两种输入方式,一种是重力感应,另外一种是触摸屏幕(你要非跟我说Home键也算一种输入方式的话..那就是三种)。
Cocos2d-x中的CCLayer类的最重要功能,就是接收这两种输入方式。鉴于模拟器无法复现重力感应,所以这篇文章主要介绍触摸的功能。
这次的主要目标是:点击屏幕上一个点,飞机向那个点飞去。
OK,开始
第一步,我们先要开启Helloworld里中的触摸感应功能;将下列代码添加到helloworld的init函数中
//打开触摸感应
this->setTouchEnabled(true);
好吧,我们先搞清楚这句话是咋来的。this代表的是当前helloword这个对象,而setTouchEnabled则是继承自CCLayer的一个函数(鼠标邮件查看定义,这是基本功),还记得我们的helloworld类命后面那段巨大个儿的代码么?
classHelloWorld : publiccocos2d::CCLayer
对,就素它。
它表示helloworld继承于CCLayer类,所以可以使用CCLayer类的函数,OK,接下来直接去CCLayer类中找到这跟触摸相关的函数,将其定义复制到helloworld类的头文件中去:
// 触摸相关
virtual
void ccTouchesBegan(CCSet *pTouches,
CCEvent *pEvent);
virtual
void ccTouchesMoved(CCSet *pTouches,
CCEvent *pEvent);
virtual
void ccTouchesEnded(CCSet *pTouches,
CCEvent *pEvent);
virtual void ccTouchesCancelled(CCSet *pTouches,CCEvent *pEvent);
稍微讲解下这几个函数的作用
ccTouchesBegan接受的是你点击屏幕的那一下的信息
ccTouchesMoved接受的是手指在屏幕上滑动/停留的信息
ccTouchesEnded 接受手指离开屏幕的那下下~
ccTouchesCancelled很罕见的情况才会用到这厮,例如,突然来电话啦~没电啦..不过话说通常的游戏也不会在那时候进行处理。
还要注意的一个问题,上面几个函数都是有单数形式的,即Touch后面没有es复数词缀,支持的是单点触摸,但由于单点触摸在CCLayer中需要自己去注册,老夫的懒虫劲又上来了,所以
好的,让我们先实现一下,点击某点之后,召唤飞机到你点的那个坐标上去。
我们先采用ccTouchesBegan函数,在helloworld的ccTouchesBegan函数体中写上以下代码:
CCSetIteratorit=pTouches->begin();
CCTouch* touch=(CCTouch*)(*it);
CCPointm_tBeginPos=touch->locationInView();
m_tBeginPos=CCDirector::sharedDirector()->convertToGL(m_tBeginPos);
CCLog("Positionis %f and %f",m_tBeginPos.x,m_tBeginPos.y);
OK,有点迷茫了是吧?
前三句是获取了触碰点在iOS设备屏幕上的坐标,第四句呢?
要知道一点,iOS设备和openGL的坐标系有所区别,所以我们呼唤出万能的CCDirector类来帮忙,转化为openGL坐标系。
最后的一句话调用了一个CCLog,是一个比较常用的调试办法,在命令行输出信息,这样就更能方便你查看后台究竟发生了什么。当然了,在发布前一定要注意把这些话给删掉,后台大量的输出信息,是及其影像效率的。
接下来呢,是让飞机移动到这个坐标上。
我们在下面继续添加:
CCAction* moveto=CCMoveTo::actionWithDuration(2, m_tBeginPos);
player->runAction(moveto);
这两句是声明了一个moveto的动作,要注意的是actionWithDuration的两个参数,前面的是时间,后面的是CCPoint的位置。
第二句则更简单,使用player精灵调用了runAction。
现在运行模拟器,点击后,你会发现飞机精灵在两秒钟之内移动到了你点击的位置。
大家多玩几次,就会发现这种方式非常死板,无论距离何如,飞机总是在2秒内慢慢飘向触摸位置,而且实际上这种方式在连续点击的时候,效率非常低,实用性也不高,也可能是老夫是新手的缘故,实在找不出使用这种方式的理由。所以下一节,我们会采用一种更好的方式,更现实的方式来实现这个功能。
相关文章推荐
- Cocos2d-x基础示例 精灵移动3
- Cocos2d-x 基础示例-精灵移动2
- cocos2d-x学习二精灵定时移动
- cocos2d-x项目101次相遇:使用触摸事件移动 精灵
- cocos2d 2.x 实现精灵的会移动的遮罩
- Cocos2d-x 2.0 百例精讲:如何让一个精灵跟随触点移动
- cocos2d-x Touch 移动精灵
- cocos2d-js 开发基础练习代码(1)——熟悉场景加载,精灵,动画使用等
- 如何移动一个cocos2d-x精灵
- Cocos2d-x学习笔记(三) —— 如何移动精灵
- Cocos2d-x 瓦块地图小游戏 (四) 玩家精灵的移动 与 地图的移动
- (转)cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)
- cocos2d-x触摸点使精灵移动到触摸点的位置
- quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现
- 【平凡晓声 Cocos2d-x】虚拟按键控制精灵移动1
- Roope的Cocos2d-x学习之旅 001:基础概念学习——导演、场景、层、精灵
- 如何用cocos2d-x来开发简单的Uphone游戏:(二) 移动的精灵
- cocos2d-x项目101次相遇:使用触摸事件移动 精灵
- 如何用cocos2d-x来开发简单的Uphone游戏:(二) 移动的精灵
- cocos2d-x SimpleGame(2)如何移动一个精灵