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来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
随机推荐
- hdu 3681 Prison Break(状态压缩+bfs)
Problem Description Rompire . Now it’s time to escape, but Micheal# needs an optimal plan and he con ...
- Unity 编辑器扩展自定义窗体
这次看见Unity还可以自定义弹出窗体,让我很好奇.于是就去网上找文章看了看. 如果想自定义窗体需要把类放入Editor文件夹下面. 代码如下: using UnityEngine; using Un ...
- FP-Growth算法之频繁项集的挖掘(python)
前言: 关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍. 本文主要介绍从 FP-tree 中提取频繁项集的算法.关于伪代码请查看上面的文章. FP-tree 的构造请见:FP-G ...
- Oracle学习(十):视图,索引,序列号,同义词
1.知识点:能够对比以下的录屏进行阅读 视图,序列,索引,同义词 SQL> --视图:虚表 SQL> --视图的长处:简化复杂查询.限制数据訪问(银行用的多).提供数据的相互独立.相同的数 ...
- <ListView>分列显示
<ListView> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Width="{B ...
- H5 视频直播相关技术
一.移动视频直播发展 大家首先来看下面这张图: 可以看到,直播从 PC 到一直发展到移动端,越来越多的直播类 App 上线,同时移动直播进入了前所未有的爆发阶段,但是对于大多数移动直播来说,还是要以 ...
- js获取昨天日期
刚刚js做项目,遇到需要获取昨天日期的问题,网上找了下答案,感觉网上的答案都不太严谨,自己写了个,凑合能用吧,忘大神们抛砖指教. <script type="text/javascri ...
- 从汇编看c++中成员函数指针(一)
下面先来看c++的源码: #include <cstdio> using namespace std; class X { public: int get1() { ; } virtual ...
- avalon中常用的事件
ms-on-change 相当于失去焦点事件. ms-on-input 相当于watch事件 http://www.runoob.com/jsref/event-oninput.html
- linux网络编程:使用单进程实现多客户端通信
服务端: //回射服务器 //避免僵尸进程 #include "unistd.h" #include "sys/types.h" #include " ...