互联网技术
联系方式
您现在的位置:主页 > 互联网技术 > 内容

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测,cocos2d-xios

发布时间:2019-02-01 编辑:环亚

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测,cocos2d-xios

玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其它的植物只需触摸那个植物将其拖入到想要摆放的位置,这其实就是这节要写的触摸事件。还可以发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸,当子弹与僵尸碰撞的时候子弹自动消失,这就这节要说的碰撞检测。

下面具体看代码的实现:

做ios开发有触摸事件cocos2d同样也有

一、先覆写touch事件

.h文件

using namespace cocos2AAAAAAAAA >

class MainScene:public CCLayer {

private:

    virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); //覆写虚函数


.m文件实现

要想让层接收触摸事件要先使能触摸:

在初始化函数要添加

    setTouchEnabled(true); //接收触屏事件

//触屏事件调用的方法

void MainScene::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)

{

    CCTouch *touch = (CCTouch *)pTouches->anyObject();

    CCPoint point = touch->getLocation(); //得到触摸的点 (位置)

    

    CCSprite *sp = CCSprite::create("Peashooter1.tiff"); //创建一个精灵

    sp->setPosition(point);  //设置精灵的位置为触摸点的位置

    this->addChild(sp);

    

}

运行:

在屏幕上随意点击:

当碰撞到了子弹消失,碰撞!!被打印出来、、

这就是这节要写的内容,大家可以自己试一下。。


怎简单的实现碰撞检测(cocos2d-x)

碰撞检测的代码较为繁琐,恕我无法为你详细列出
其思路可以是
在update中遍历所有的sprite,然后判断每个sprite和其他sprite(还需遍历一遍,刨除自己)是否碰撞。这样等于判断次数是sprite的数量的平方,效率很低。所以你需要优化一下,比如将“其他sprite(还需遍历一遍)”这个逻辑改成“附近的sprite”。

两个sprite的碰撞检测就很简单了,如果仅仅是矩形判断,很多教程都会有
if ( CCRect::CCRectIntersectsRect(a->boundingBox(), b->boundingBox()) )

你可以百度搜索cocos2d-x 碰撞检测 查看详细代码,如有疑问再提出详细问题。
 
cocos2d-x 碰撞检测

1、为什么 一个 要用 角为锚点 一个 要用中心为锚点

2、你这两段代码是分开的么? 后面段应该在update里

3、我不知道你跑的是什么action 你确认能撞到么? 试试加大宽高 看有没有输出yes

4、这个yes 可能在 工具的下面输出 也可能是在后台的 黑框里输出,你都看了么?

5、碰撞检测用box2d 多好~ 调用简单,判定精确
 

http://www.bkjia.com/Androidjc/866957.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/866957.htmlTechArticlecocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测,cocos2d-xios 玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其它的植物只需触...

本文源自: 凯发国际

上一篇:Android 一键清理动画

下一篇:没有了

Copyright © 2005-2016 http://www.erlygoods.com 凯发国际_凯发国际开户礼金_凯发注册送_搜狐财经版权所有 凯发国际_凯发国际开户礼金_凯发注册送_搜狐财经