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来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
随机推荐
- zabbix监控代理zabbix-proxy
新公司监控用的zabbix,其中用到了zabbix-proxy,原先没有尝试弄过,现在先提前安装看看,以便后续使用查阅. Zabbix-proxy 是一个监控代理服务器,它收集监控到的数据,先存放在缓 ...
- hadoop python and Twitter
http://www.wubiaoblog.com/archives/1159 http://blog.csdn.net/anbo724 http://f.dataguru.cn/forum.php? ...
- Android使用NumberPicker控件实现选择城市,生日
本人菜鸟一枚,第一次写技术博客,有点小紧张,加上代码很乱,求不喷. 先放效果图: 界面就这么简单. 然后放上代码: package com.example.dialog; import java.ut ...
- Android 学习笔记(一)
环境配置在网上搜索的一大堆. 这里简单发几个连接. http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html http://jing ...
- Reverse Integer (JAVA)
public class Solution { public int reverse(int x) { StringBuffer sb = new StringBuffer(x+"" ...
- U - stl 的 优先队列 Ⅰ
Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...
- oracle数据库管理--用户管理
一.oracle数据库用户管理 1.sys和system用户区别 (1)存储的数据的重要性不同: sys所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于or ...
- jquery 项目所用
<script> $(document).ready(function(){ $.ajax({ type:'post', url :'interface.ajax.php', data:{ ...
- ALM11客户端安装办法
使用HP公司的QC11(ALM11.0)做项目缺陷管理,发现QC只支持IE7,IE8.其实可以通过安装ALM自已提供的浏览器就行了. 第一步:关闭UAC(用户账户控制) 第二步:打开ie,将ie-in ...
- js为数字添加千位分隔符
1.字符串处理比较复杂 function test(str){ var iNum = str.length % 3; var prev = ''; var iNow = 0; var ...