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();

for (int i=1; i<=13; i++) {

CCString *string =
CCString::createWithFormat("Peashooter%d.tiff",i);

CCSpriteFrame *frame =
CCSpriteFrame::create(string->getCString(),
CCRectMake(0,
0, 71,
71));

animation->addSpriteFrame(frame);

}

animation->setDelayPerUnit(0.1);

animation->setLoops(-1); 
//循环的次数 -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");

pb->setPosition(ccp(20,
300));

this->addChild(pb);

CCMoveBy *by = CCMoveBy::create(4,
ccp(800,
0)); //花4s移动到800的位置

pb->runAction(by);

//僵尸

zom =
CCSprite::create("Zombie1.tiff");

zom->setPosition(ccp(810,
300));

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;

}

}

执行:

 精灵在运动!!

当碰撞到了子弹消失。碰撞!!被打印出来、、

这就是这节要写的内容,大家能够自己试一下。。

时间: 2024-10-17 00:41:50

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測的相关文章

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测

玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其它的植物只需触摸那个植物将其拖入到想要摆放的位置,这其实就是这节要写的触摸事件.还可以发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸,当子弹与僵尸碰撞的时候子弹自动消失,这就这节要说的碰撞检测. 下面具体看代码的实现: 做ios开发有触摸事件cocos2d同样也有 一.先覆写touch事件 .h文件 using namespace cocos2d; class MainScene:public CCLayer { private: v

cocos2d-x ios游戏开发初认识(八) 音效、粒子系统与存储

我们知道,一个游戏少不了声音,一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来,顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: 1.新建一个cocos2d工程添加相应的声音图片资源: 播放声音所用到的内容: 代码: 这里可以先在RootViewController.mm里面设置屏幕 禁止旋转 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientat

cocos2d-x ios游戏开发初认识(五) CCsprite精灵类

这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上添加如下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png"); CCSize winSize  =CCDirector::sharedDirector()->getWinSize(); //得到屏幕的尺寸 bg->setPosition(ccp(winSize.width/2, winSize.height/2)); this->addCh

cocos2d-x ios游戏开发初认识(七) 简单的动画

前面有一节说了帧动画,就是让精灵改变自己的位置.形状.大小来实现相应的动作,这讲主要是要通过一些方法来实现精灵的移动,产生各种炫丽的动画,也可能让你找到一点游戏场景. 下面具体根据代码分析: 为了清晰最好将前几节的代码注释掉. //根据前面的知识先创建一个菜单 CCMenuItemFont *item =CCMenuItemFont::create("开始游戏",this, menu_selector(MainScene::onMenuItem));//点击事件 //添加到菜单栏里面

cocos2d-x ios游戏开发初认识(六) 渲染的优化

做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染一次. 以下是程序的做法,先屏蔽前面的代码. 先简介一下 CCSpriteBatchNode类,它是用来优化游戏渲染效率的.CCSpriteBatchNode 中的全部CCSprite仅仅会被渲染1次,因此能够提高游戏的FPS.限制:增加到CCSpriteBatchNode 中的CCSprite必须

【Cocos2D研究院之游戏开发】

http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Cocos2D研究院之打开全新ViewController与返回(八) 雨松MOMO [Cocos2D研究院之游戏开发] 围观5745次 17条评论          之前cocos2d的文章都是由魏凯同学维护,从今天开始我也会抽时间写点cocos2d的文章.最近在研究如何将IOS游戏与软件结合起来.通常游

iOS 游戏开发 博客

1. http://www.cnblogs.com/kesalin/archive/2012/11/10/ios_game_dev_resource.html   ( iOS游戏开发教程) 最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它对应的开发工具,尤其是 “ParticleDesigner”,粒子系统编辑器,非常的喜欢(需付费$7.99美元

史上最全最完整的IOS 游戏开发 PDF电子书定制下载

<iOS 5游戏开发>作者:(新西兰)James·Sugrue著 页数:191 出版社:北京市:人民邮电出版社 出版日期:2012.08 简介:<iOS5游戏开发>是一本iOS5游戏开发的基础入门书.全书使用通俗易懂的简单实例,带领读者经历构建经典动作游戏的整个周期.读者在本书的阅读过程中,将经历从开发概念.规划设计一直到编写实际代码的全过过程.本书的每一章,都将演示游戏创建过程中的一个逻辑步骤,读者将在其中学习如何创建Sprite,用触摸屏.重力感应器和屏幕游戏棒控制玩家角色等-

iOS游戏开发游戏功能之外的东西

对于一个游戏的开发,我们除了完成游戏的功能之外,还有多少东西我们需要考虑呢? 很多,也很烦! 但做过一遍之后下一次就会很简单. 都有什么东西我们想添加到游戏当中呢? (1)分享功能 (2)评分功能 (3)游戏中心(GameCenter) (4)广告(iAd以及其他广告比如Admob) (5)应用内购买 (6)... 这些功能并不是完全必要的,要根据情况考虑.但比如分享,评分,这些功能能提高一个游戏的扩散速度,显示是值得每一个游戏都添加的功能. 下面稍微总结一下每一个功能的基本用法. PS:这只是