cocos2d-x ios游戏开发初认识 触摸事件与碰撞检測

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

    }

}

执行:

技术分享 精灵在运动!!


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

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














以上是关于cocos2d-x ios游戏开发初认识 触摸事件与碰撞检測的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d-x 事件分发机制 ——触摸事件监听

cocos初认识

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

iOS开发系列--触摸事件手势识别摇晃事件耳机线控

Cocos2d-X研究之3.0 场景切换特效汇总