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来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...
随机推荐
- 对Linux 新手非常有用的20 个命令
你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳 ...
- Android Studio虚拟机配置虚拟键盘
1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...
- Android 的权限设置大全
android.permission.ACCESS_CHECKIN_PROPERTIES //同意读写訪问"properties"表在checkin数据库中.改值可以改动上传 an ...
- oracle 数据库学习
1.更改数据库用户名密码: alter user '用户名' identified by ’password'. 2.查看数据库有哪些用户:sqlplus system/password ;selec ...
- .Net中如何使用MySql连接池
提供一份官方的译文.翻译也挺辛苦的!! 6.4 Using Connector/Net with Connection Pooling 6.4在Connector/Net中使用连接池 The Conn ...
- SQL中Truncate的用法(转)
转自:http://www.studyofnet.com/news/555.html 本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所 ...
- linux配置加载顺序
linux加载配置项时通过下面方式 首先 加载/etc/profile配置 然后 加载/ect/profile.d/下面的所有脚本 然后 加载当前用户 .bash_profile 然后 加载.bash ...
- B - Numbers That Count
Description "Kronecker's Knumbers" is a little company that manufactures plastic di ...
- Spring中注解的使用详解
一:@Rsource注解的使用规则 1.1.案例演示 Spring的主配置文件:applicationContext.xml(因为我这里将会讲到很多模块,所以我用一个主配置文件去加载各个模块的配置文件 ...
- 【Android 错误记录】android.os.NetworkOnMainThreadException 异常问题
最近自己学习开发一个小app,想根据网络来判断一些逻辑,但是运行应用时遇到了这个错误 android.os.NetworkOnMainThreadException 后来,查询了一些信息,发现原因就是 ...