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来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
随机推荐
- 【错误】:MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
错误:MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决 ...
- 对中级Linux 用户非常有用的20 个命令
也许你已经发现第一篇文章非常的有用,这篇文章是继对初级Linux用户非常有用的20个命令的一个延伸. 第一篇文章的目的是为新手准备的而这篇文章则是为了Linux的中高级用户.在这里你将学会如何进行自定 ...
- sde需要注意的几个常见问题
Desktop 10.4 是32位的,Server 10.4是64位的,因此位的Oracle客户端,位的Oracle客户端. 如果Desktop和Server安装在同一台机器上,那么Oracle客 ...
- [转]Traceroute网络排障实用指南(2)
五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...
- 小函数,大智慧,php的isset和empty
Disset()函数 一般用来检测变量是否设置 bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: FALSE N ...
- 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3415 题目大意: 给n个数凑成环状,求某一区间,使得该区间长度不超过k,且总和最大. 解题思路: 区 ...
- 修改vim中的tab为4个空格
记录一下,避免用时还得搜........ 1.临时修改 在vi中,set tabstop=4 或 set ts=4 2.永久修改 vi --version 查看要修改的文件 如果是vim的话,修改~/ ...
- JS Encoding and Decoding
//charator Str to Hex function strToHex(str) { var rs = ""; for (var i = 0; i < str.len ...
- UVA 10806 Dijkstra, Dijkstra.
题意: 从起点走到终点,然后从终点走到起点,其中不能同时走过相同的一条边,问你最小路径长度.先输入终点n,起点为1,接下来输入m,代表有m条边.每条边由起点,终点,长度组成. 分析: 求最小长度,还限 ...
- Letter of application, e-mail version
Subject line: (logical to recipient!) Application for sales representative for mid-Atlantic area Apr ...