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

以下详细看代码的实现:

做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. Redis 3.0集群 Window搭建方案

    Redis 3.0集群 Window搭建方案 1.集群安装前准备 安装Ruby环境,安装:rubyinstaller-2.3.0-x64.exe http://dl.bintray.com/onecl ...

  2. IOS Xmpp的Iq发送和解析之请求讨论组成员

    #pragma mark - 获取讨论组成员 - (void)getDiscussionMemberInfoWithSendIq:(discussionModel *)data { NSXMLElem ...

  3. Hibernate框架(一)——总体介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

  4. JavaScript 运行机制详解:深入理解Event Loop

    Philip Roberts的演讲<Help, I'm stuck in an event-loop>,详细.完整.正确地描述JavaScript引擎的内部运行机制. 一.为什么JavaS ...

  5. iOS蓝牙4.0开发例子

    1建立中心角色 1 2 3 #import <CoreBluetooth/CoreBluetooth.h>  CBCentralManager *manager;  manager = [ ...

  6. linux下php扩展curl的安装

    方法一 安装cURL wget http://curl.haxx.se/download/curl-7.17.1.tar.gz tar -zxf curl-7.17.1.tar.gz ./config ...

  7. pt-online-schema-change解读

    [用途]在线改表 [注意风险]因为涉及到修改表的数据和结构,所以在使用前要小心测试并做好备份,工具默认不会改表,除非你添加了--execute参数 [工具简介] pt-osc模仿MySQL内部的改表方 ...

  8. 《JavaScript 闯关记》之表达式和运算符

    表达式 表达式是由数字.运算符.数字分组符号(如括号).自由变量和约束变量等以能求得数值的有意义排列方法所得的组合.JavaScript 表达式主要有以下几种形式: 原始表达式:常量.变量.保留字. ...

  9. SQL Server Schema

    SQL查询是引用表时,需要为其制定模式名. 在数据库的术语中,模式就是名称空间.这种方式可以把相同特性的对象组合到一个共同的名称空间中.模式也可以保护对象,所以DBA可以给模式授予显示权限. 例如,D ...

  10. 计算两个集合的交集数字(java)

    循环判断2个数组 将相同的公共元素复制到新数组中即可 import java.util.Arrays; public class count_same_number { public static i ...