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

以下详细看代码的实现:

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

一、先覆写touch事件

.h文件

using namespace
cocos2d;

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);

}

执行:

在屏幕上任意点击:

能够看到点击的地方就出现一个豌豆。

再添加一些功能,如今的豌豆不会动,以下给豌豆做一个摇头的帧动画。

先加入13张摇头的帧图片:

//触屏事件调用的方法

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);

//帧动画

CCAnimation *animation =
CCAnimation::create();

; i<=; i++) {

CCString *string =
CCString::createWithFormat("Peashooter%d.tiff",i);

CCSpriteFrame *frame =
CCSpriteFrame::create(string->getCString(),
,
, , ));

animation->addSpriteFrame(frame);

}

animation->setDelayPerUnit(0.1);

animation->); 
//循环的次数 -1
无限次

CCAnimate *animate =
CCAnimate::create(animation);
//加入到动画

sp->runAction(animate); 
//执行动画

}

执行:

能够看到 小豌豆在摇头。。

以下看精灵碰撞检測:

碰撞检測说得简单点事实上就是说一个精灵的移动到的位置是否在另外一个精灵位置的包括内。

详细实现:

.h文件 定义

class MainScene:public
CCLayer {

private:

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

CCSprite *zom;   //子弹精灵

CCSprite *pb;    //僵尸精灵

.m文件实现

//子弹

pb = CCSprite::create("PB01.png");

,
));

this->addChild(pb);

,
, )); 的位置

pb->runAction(by);

//僵尸

zom =
CCSprite::create("Zombie1.tiff");

,
));

this->addChild(zom);

//设置帧回掉函数

this->schedule(schedule_selector(MainScene::update));

//回掉函数:

//回掉函数

void
MainScene::update(float t)

{

/*设置回掉函数的操作*/

//让每一帧向右移动
记得把sprite设置为全局变量

// sprite->setPosition(ccpAdd(sprite->getPosition(), ccp(1, 0))); //让精灵每一帧
在x轴上加1

if(pb!=
NULL &&
pb->boundingBox().intersectsRect(zom->boundingBox()))
//两个精灵碰撞

{

CCLOG("碰撞!!!");

//碰撞了
让子弹消失

pb->stopAllActions();

pb->removeFromParentAndCleanup(true);

pb = NULL;

}

}

执行:

 精灵在运动!!

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

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

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測的更多相关文章

  1. cocos2d-x ios游戏开发初认识(六) 渲染的优化

    做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染 ...

  2. cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储

    我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...

  3. cocos2d-x ios游戏开发初认识(五) CCsprite精灵类

    这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上加入例如以下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png ...

  4. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检測(1)

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  5. 【Cocos2D研究院之游戏开发】

    http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发]   201211-19 Co ...

  6. 开发者经验谈:如何一天时间搞定iOS游戏开发?

    开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...

  7. 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...

  8. iOS 11开发教程(八)定制iOS11应用程序图标

    iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...

  9. cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測

    对象管理类的原理是这种: ObjectManager类是一个单例类,全局仅仅有一个对象实例存在.初始化的时候创建两个数组CCArray来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...

随机推荐

  1. HibernateTemplate和HibernateDaoSupport

    Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport HibernateTemplateHib ...

  2. 谱聚类--SpectralClustering

    谱聚类通常会先对两两样本间求相似度. 然后依据相似度矩阵求出拉普拉斯矩阵,然后将每一个样本映射到拉普拉斯矩阵特诊向量中,最后使用k-means聚类. scikit-learn开源包中已经有现成的接口能 ...

  3. uva 714 - Copying Books(贪心 最大值最小化 二分)

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...

  4. [生成树][Uva1395][Slim Span]

    代码: #include <set> #include <queue> #include <cmath> #include <cstdio> #incl ...

  5. 安装mysql时出错。无法初始化。 libstdc++.so.5

    ./bin/mysqld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: ...

  6. FFmpeg详解

    认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式.多媒体传输协议以及音视频编解码器.因此,对于从事多媒体技术开发的工程师来说,深入研究FFM ...

  7. 从客户端(Content="<p>666</p>")中检测到有潜在危险的 Request.Form 值。

    出现:从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值. 一般是在线编辑器有HTML标签的,我是用的MV ...

  8. tablbView中section的间距

    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { if (sect ...

  9. PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)

    现在大部分一键安装包多是32位的,并不支持64位,直接在64位的系统上使用会报错的,所以我这里就来说说windows 64位系统如何建立Apache+PHP+MySQL环境的! 我这里演示用的wind ...

  10. oracle学习-安装卸载