我对面向对象编程有点新意。我必须实现一个应该考虑不同输入类型的接口,即。操纵杆,鼠标,xbox等。
运动控制器类将使用该接口,并且播放器类将实现移动类。
我无法将这些想法付诸代码。那么大多数应该进入接口类。
到目前为止我的想象如下:
Class InputInterface
{
//What goes here?
}
class Movement : InputInterface
{
}
//Other classes that inherit InputInterface
class PlayerShip
{
public:
MovementController* movementController;
}
所以我知道大多数'控制器'类(操纵杆,360控制器等),使用返回布尔值或浮点值的函数。所以我可能在接口类中有数据成员,它们的值可以由接口类中的成员函数设置。
答案 0 :(得分:0)
策略模式最好的事情就是保持简单。与客户端对象相关的方法将进入接口,并仅公开客户端调用方法时需要知道的内部对象的信息。您将在客户端对象之外构造具体对象。
template<typename T>
class IInput
{
public:
virtual ~IInput() { } // if you want to clean up via this interface instead
// of the concrete object you will need a virtual destructor
virtual T Poll() = 0;
};
我已经将类型设为通用类型,但您不必这样做。
您的播放器对象可能如下所示:
#include <memory>
class Player
{
std::shared_ptr<IInput<float>> velocityx;
float displacementx;
public:
Player(std::shared_ptr<IInput<float>> v)
:velocityx(v)
{
displacementx = 0;
}
void Update(float elapsedSeconds)
{
displacementx += elapsedSeconds * velocityx->Poll();
}
};
并像这样构造(想象MouseMover是你的具体类)
Player player(std::make_shared<MouseMover>());
或像这样动态:
std::shared_ptr<Player> player = std::make_shared<Player>(std::make_shared<MouseMover>());