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

以下详细看代码的实现:

做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. poj 2411 Mondriaan's Dream(状态压缩dp)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

  2. Android 代码混淆及第三方jar包不被混淆

    为了保护代码被反编译,android引入了混淆代码的概念 1.设置混淆 在工程下找到project.properties文件 在文件中加入proguard.config=${sdk.dir}/tool ...

  3. [Exception] 当前 TransactionScope 已完成

    本文来自:http://www.cnblogs.com/loafer/archive/2010/06/03/TransactionScopeComplete.html 捕获异常的时候 经常会碰到这个异 ...

  4. yarn状态机的可视化

    YARN为了实现多个状态机的对象,控制ResourceManager中间RMAppImpl.RMApp-AttemptImpl.RMContainerImpl和RMNodeImpl,NodeManag ...

  5. 2014年百度之星资格赛第三题Xor Sum

    Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheus 将向 Zeu ...

  6. AngularJS 的一些坑

    UI的闪烁 Angular的自动数据绑定功能是亮点,然而,他的另一面是:在Angular初始化之前,页面中可能会给用户呈现出没有解析的表达式.当DOM准备就绪,Angular计算并替换相应的值.这样就 ...

  7. TCP协议三次握手

    TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  8. 查看mysql apache php nginx的编译参数

    查看mysql编译参数: cat /usr/local/mysql/bin/mysqlbug|grep configure 查看apache编译参数: cat /usr/local/apache2/b ...

  9. jquery中push()的用法(数组添加元素)

    push定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newele ...

  10. BAK文件怎么恢复到数据库中

    1.右击SQLServer2000实例下的“数据库”文件夹.就是master等数据库上一级的那个图标.选择“所有任务”,“还原数据库” 2.在“还原为数据库”中填上你希望恢复的数据库名字.这个名字应该 ...