我不明白命令设计模式在游戏开发中是如何工作的
I dont get how command design pattern works in game development
也许那是我缺乏 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();
现在,他们没有指向任何东西。将它们指向某些东西,您会更快乐。
也许那是我缺乏 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();
现在,他们没有指向任何东西。将它们指向某些东西,您会更快乐。