• 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;

        }

    }

    执行:

     精灵在运动!!


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

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

  • 相关阅读:
    Android 打开相册拍照选择多张图片显示
    Mac 打开、编辑 .bash_profile 文件
    Ionic app IOS 在Xcode 模拟运行 真机调试
    android studio 把 ionic 打包时修改应用名称、修改应用图标、修改启动画面,升级打包
    Android studio 运行打包 Ionic 项目
    ionic4 路由跳转、ionic4 路由跳转传值 NavController 返回上一页 、NavController 回到根
    Ionic4.x ion-refresher 下拉更新
    Ionic4.x ion-infinite-scroll 上拉分页加载更多
    Ionic4.x ion-infinite-scroll 上拉分页加载更多
    Ionic4.x Modal模态对话框以及 Modal 传值
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5222922.html
Copyright © 2020-2023  润新知