我不明白命令设计模式在游戏开发中是如何工作的

问题描述

也许这是我缺乏 C++ 知识或缺乏编程技能,但我正在尝试了解 C++ 中用于游戏开发的命令设计模式。我正在阅读这本书(它的字面意思是“游戏编程模式”,我非常喜欢它),我决定在实际代码中使用其中一种设计模式,看看我是否真的理解它。所以我创建了这个废代码,不出所料,它不起作用:

#include <iostream>


void jump() {
    //assume that this is some random
    //code that makes player jump
    //if console displays "Player jumps"
    //this means that this code works...
    std::cout << "Player jumps";
}
void fireGun() {
    //same thing as jump function
    //but its for fire gun
    std::cout << "Gun goes pew pew";
}

class Command
{
public:
    virtual ~Command(){}
    virtual void execute() = 0;
};

class JumpCommand : public Command
{
public:
    virtual void execute() { jump(); }
};

class FireCommand : public Command
{
public:
    virtual void execute() { fireGun(); }
};

class InputHandler
{
public:
    void handleinput();
    
    /// Methods to bind commands????

private:
    Command* buttonX_;
    Command* buttonY_;
};

void InputHandler::handleinput() {
    bool is_BUTTON_A_pressed = true; 
    //lets assume that this is a function that detects
    //if button a ir pressed and it returns true 
    //(meaning button a is pressed)
    if (is_BUTTON_A_pressed) buttonX_->execute();
}



int main() 
{
    InputHandler input;
    input.handleinput();
    return 0;
}

对于那些想知道这里是我提取此设计模式示例代码的来源: https://gameprogrammingpatterns.com/command.html

所以最让我困惑的是“绑定命令的方法”部分(我在代码评论过),我觉得它与将 buttonX_ 和 buttonY_ 绑定到命令有关,但就是这样.. .

解决方法

你缺少的是绑定 buttonX_ 和 buttonY_ 来做某事。我认为你所缺少的只是一个构造函数(或其他一些机制),它可以做这样的事情:

buttonX_ = new JumpCommand();
buttonY_ = new FireCommand();

现在,他们没有指向任何东西。给他们指点什么,你会更快乐。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...