我的游戏中有两个类非常有用,但逐渐变得很痛苦。消息和属性(属性本质上是一个组件)。
它们都从基类派生并包含一个静态ID,因此系统只能关注他们想要的对象。效果很好...除了...
随着游戏的扩展,我一直在不断开发新的消息类型和属性类型。每次我需要编写2个文件(hpp和cpp)和一堆样板文件,以获得本质上是classID和一种或两种标准数据类型或指针。
它开始使玩转和测试新想法成为真正的琐事。我希望当我想创建一个新的消息或属性类型时,我希望能够键入类似
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
而不是创建头文件和cpp文件,而是编写一个构造函数,包括父类等。
大约20到40行(包括警卫和其他所有内容)在我脑海中逻辑上是1或2行。
是否有一些编程模式可以解决此问题?
用脚本(我一无所知)呢?有没有办法定义一堆几乎相同的类?
这正是一个类的样子:
// Velocity.h
#ifndef VELOCITY_H_
#define VELOCITY_H_
#include "Properties.h"
#include <SFML/System/Vector2.hpp>
namespace LaB
{
namespace P
{
class Velocity: public LaB::Property
{
public:
static const PropertyID id;
Velocity(float vx = 0.0, float vy = 0.0)
: velocity(vx,vy) {}
Velocity(sf::Vector2f v) : velocity(v) {};
sf::Vector2f velocity;
};
} /* namespace P */
} /* namespace LaB */
#endif /* LaB::P_VELOCITY_H_ */
// Velocity.cpp
#include "Properties/Velocity.h"
namespace LaB
{
namespace P
{
const PropertyID Velocity::id = Property::registerID();
} /* namespace P */
} /* namespace LaB */
所有这些仅适用于2D向量和ID说要期待2D向量。(当然,某些属性具有更复杂的元素,但这是相同的想法)