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

以下详细看代码的实现:

做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. Linux 时间定时同步操作

    Yum –y install ntp安装时钟同步服务加入开机启动Chkcongfig ntpd on添加自动校对时间,每十分钟校对一次Crontab –e */10 * * * * /usr/sbin ...

  2. PHP 表单验证 - 验证 E-mail 和 URL

    ----------------------------------------------------------------------------- 本节展示如何验证名字.电邮和 URL. -- ...

  3. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...

  4. libaio under MIPS architecture /在mips架构下使用的libaio

    First, you can find libaio source in http://libaio.sourcearchive.com/ Second,download the libaio_0.3 ...

  5. iOS动画一点也不神秘————你是喜欢看幻灯片?还是看高清电影?

    iOS设备在平均线上硬件比andorid设备良好许多,尤其是内存和CPU,所以iOS应用里面有大量动画交互效果的交互,这是每个用户都喜悦的,如果每个操作对应界面来讲都是直接变化,那变得十分地生硬. 你 ...

  6. Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8046659 在前文中,我们分析了Surface ...

  7. 2台linux机器免密码互相登陆

    一,如何使2台机器不需要密码互相登陆到对方呢? 这个和使用密钥的登陆Linux系统非常相似,也是将自己的公钥传到要登录的服务器上去修改权限即可. 1,A机器: 执行ssh-keygen命令,一路回车. ...

  8. win7 绿色版MySQL安装与配置

    操作步骤: 一.安装MySQL数据库 1.下载MySQL-5.6.17-winx64.zip文件.2.解压到指定目录,本例为D:\mysql-5.6.17-winx64.3.修改配置文件,my-def ...

  9. Tomcat地址栏传中文参数乱码问题处理

    javascript中有时需要向后台传递中文参数,再次展示到前台时显示为乱码,解决方案: 方案1:修改Tomcat-conf-server.xml文件 大约69-71行  修改为: <Conne ...

  10. linux学习笔记之进程间通信

    一.基础知识. 1:进程通信基础(interProcess Communication, IPC):管道,FIFO(命名管道),XSI IPC,POSIX 信号量. 2:管道. 1,缺陷. 1)部分系 ...