cocos2d-x 3.2 物理小游戏教程4 block it 刚体的隐藏和显示 源码资源下载

修改一下wall.h

#ifndef __WALL_H__
#define __WALL_H__

#include "cocos2d.h"

class Wall : public cocos2d::Sprite
{
public:
    //创建方法 参数是图片路径
    static Wall* create(const std::string& spriteFrameName);
    bool init(const std::string& spriteFrameName);

    //隐藏 移除刚体
    void hide();

    //显示 恢复刚体
    void show();

private:
    //隐藏 显示的时间
    const float fadeTime = 0.1f;

    //防止连击 做一个判断
    bool canTouch = true;
};

#endif // !__WALL_H__
==============================================================


在wall.cpp中添加两个方法



void Wall::hide()
{
    

    //隐藏动作
    auto fadeOut = FadeOut::create(fadeTime);
    
    auto bodyUnEnableFunc = CallFunc::create([this]{
        //设置刚体无效
        this->getPhysicsBody()->setEnable(false);
    });

    //设置可以单击
    auto canTouchFunc = CallFunc::create([this]{
        canTouch = true;
            
    });

    /*
        1.精灵隐藏
        2.刚体无效
        3.可以点击
    */
    auto seq = Sequence::create(fadeOut, bodyUnEnableFunc, canTouchFunc, nullptr);

    this->runAction(seq);

}

void Wall::show()
{
    //放止连击
    if (!canTouch)
    {
        return;
    }

    canTouch = false;

    //显示动作
    auto fadeIn = FadeIn::create(fadeTime);

    auto bodyEnableFunc = CallFunc::create([this]{
        //设置刚体生效
        this->getPhysicsBody()->setEnable(true);
    });

    auto seq = Sequence::create(fadeIn, bodyEnableFunc, DelayTime::create(fadeTime), CallFunc::create(CC_CALLBACK_0(Wall::hide, this)), nullptr);

    this->runAction(seq);
}


=========================================================


在GameScene.h中


#include "Wall.h"

Wall *wallDown = nullptr;


把cpp中的wallDown换成全局变量

修改创建下方墙壁的方法

//创建下方墙壁
    wallDown = Wall::create("width.png");
    wallDown->setPosition(vSize.width * 0.5, wallLeft->getBoundingBox().getMinY() - wallTop->getContentSize().height / 2);
    this->addChild(wallDown);
    wallDown->hide();


修改onTouchBegin


bool GameScene::onTouchBegan(Touch *touch, Event *unused_event)
{
    if (isFirstTouch)
    {
        isFirstTouch = false;
        ball->move();
    }
    else
    {
        wallDown->show();
    }

    return true;
}


最后注释掉调试模式

//设置物理世界调试模式:显示全部

 //world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);


资源和代码下载地址:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值