cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件。还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸,当子弹与僵尸碰撞的时候子弹自己主动消失,这就这节要说的碰撞检測。
以下详细看代码的实现:
做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游戏开发初认识(八) 触摸事件与碰撞检測的更多相关文章
- cocos2d-x ios游戏开发初认识(六) 渲染的优化
做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染 ...
- cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储
我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...
- cocos2d-x ios游戏开发初认识(五) CCsprite精灵类
这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上加入例如以下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检測(1)
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...
- iOS 11开发教程(八)定制iOS11应用程序图标
iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...
- cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測
对象管理类的原理是这种: ObjectManager类是一个单例类,全局仅仅有一个对象实例存在.初始化的时候创建两个数组CCArray来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
随机推荐
- Unity Easy Save简单实用
Easy Save使用: 1.保存游戏进度 2.设计游戏关卡(怪物数量,坐标,背景图等等) Easy Save默认存储地址: C:\Users\Administrator\AppData ...
- 关于《平安iOS面试》小结
面了下平安好医生iOS职位,结果不是很理想,也就是GG.写此文的目的在于,时刻提醒自己应该学到老,不要安于现状.也给那些以后去面试的coder一些"剧透"! 一.第一轮 妹子 面试 ...
- 水务新、老营收系统大PK
今天想撩一下咱水务界的大拿——营业收费管理系统. 营业收费 随着城市供水规模的不断扩大及户表改造的深入以及阶梯水价的实行还有移动平台等第三方支付的蓬勃发展,原有的营收软件系统已经不能适应目前水司的管理 ...
- Old Sorting(转化成单调序列的最小次数,置换群思想)
Old Sorting Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit S ...
- 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划
1.问题 通过调用dbms_xplan包中DISPLAY_AWR函数(DBMS_XPLAN.DISPLAY_AWR)可以从AWR数据中查看到SQL语句的历史执行计划,但是,DISPLAY ...
- CSS入门教程——定位(positon)
CSS入门教程——定位(positon) CSS定位在网页布局中是起着决定性作用. 定位 CSS的定位功能是很强大的,利用它你可以做出各种各样的网页布局.本节就介绍一些CSS常用的定位语句. 1. ...
- ThinkPHP中的__initialize()和类的构造函数__construct()
ThinkPHP中的__initialize()和类的构造函数__construct()网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不对 ...
- 【取对数+科学计数法】【HDU1060】 N^N
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- onvif规范 中文介绍
什么是ONVIF ? ONVIF规范描述了网络视频的模型.接口.数据类型以及数据交互的模式.并复用了一些现有的标准,如WS系列标准等. ONVIF规范的目标是实现一个网络视频框架协议,使不同厂商所生产 ...
- u-boot基本命令
1.查看环境变量 printenv 2.网络相关命令 设置开发板ip:setenv ipaddr 192.168.2.110 设置子网掩码:setenv netmask 255.255.255.0 设 ...