cocos2d-x step by step(3) Double Kill

喏,咱们已经调通hello world 了,然后呢,咱们做一些高大上的东西,那做什么呢,做一个打乒乓球的小东西,啊哈!

这就是最终界面了,没画一个球形  就用一个白色方框代替吧。

啊哈!

public:
    virtual bool init();

    static cocos2d::Scene* scene();
    void update(float dt) override;

    void menuCloseCallback(Ref* sender);

    void onButtonClicked(Ref *pSender,ui::Widget::TouchEventType type);
    void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event);
    void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
    CREATE_FUNC(FishTestScence);

首先呢,我们需要keypreed 和keyreleased 两个事件,因为要触发键盘事件

bool isUp = false;
bool isLeft = true;
bool isPreessLeft = false;
bool isPressRight = false;
bool isDead = true;
void FishTestScence::update(float dt)
{
    if (isDead)return;

    const cocos2d::Vector<cocos2d::Node*> arr = this->getChildren();
    Sprite* sprite1 = (Sprite*)arr.at(2);
    Sprite* sprite2 = (Sprite*)arr.at(3);

    if (ballPosition.x < 5)
    {
        isLeft = false;
    }
    else if (ballPosition.x > maxWidth)
    {
        isLeft = true;
    }

    if (ballPosition.y < 36)
    {
        isUp = true;
    }
    else if (ballPosition.y > maxHeight)
    {
        isUp = false;
    }

    isLeft ? ballPosition.x -= 2 : ballPosition.x += 2;
    isUp ? ballPosition.y += 2 : ballPosition.y -= 2;

    if (isPreessLeft)dangbanVec.x -= 2;
    if (isPressRight)dangbanVec.x += 2;

    if (((ballPosition.x - dangbanVec.x) > 45 && ballPosition.y <= 36) || ((ballPosition.x - dangbanVec.x) < -45 && ballPosition.y <= 36)) isDead = true;

    sprite1->setPosition(Vec2(dangbanVec.x, dangbanVec.y));

    sprite2->setPosition(Vec2(ballPosition.x, ballPosition.y));

}

// 键位响应函数原型
void FishTestScence::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)
{
    const cocos2d::Vector<cocos2d::Node*> arr = this->getChildren();
    Sprite* sprite1 = (Sprite*)arr.at(2);
    Vec2 vec = sprite1->getPosition();
    switch (keyCode)
    {
    case     EventKeyboard::KeyCode::KEY_LEFT_ARROW:
        isPreessLeft = true;
        break;
    case     EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
        isPressRight = true;
        break;

    default:
        break;
    }
}

void FishTestScence::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)
{
    switch (keyCode)
    {
    case     EventKeyboard::KeyCode::KEY_LEFT_ARROW:
        isPreessLeft = false;;
        break;
    case     EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
        isPressRight = false;
        break;
    case     EventKeyboard::KeyCode::KEY_UP_ARROW:
        isDead = false;
        break;
    default:
        break;
    }
}

这是代码实现,大概是这样的,当点击up箭头,游戏开始,当白色方块不在触板内,则game over ,用 isDead缓存

再次按up重新开始,

小东西,没什么技术含量,只是娱乐!

不写了,代码里有!

    // create a scene. it's an autorelease object
    auto scene = HelloWorld::scene();
    auto fish = FishTestScence::scene();
    // run
    director->runWithScene(fish);

这里替换一下就行,图片如果没有的话 上一篇内有呢

烦死了!

妈蛋的淘宝,给姑娘买东西半天提示我重置密码和支付密码,老子重置了,浪费老子一个小时,还你妈比的不能买,qnmlgb!艹!

代码:源代码

原文地址:https://www.cnblogs.com/fish124423/p/4455982.html