您的位置:首页 > 移动开发 > Cocos引擎

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秒内慢慢飘向触摸位置,而且实际上这种方式在连续点击的时候,效率非常低,实用性也不高,也可能是老夫是新手的缘故,实在找不出使用这种方式的理由。所以下一节,我们会采用一种更好的方式,更现实的方式来实现这个功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: