私のゲームには本当に役立つ2つのクラスがありますが、徐々に面倒になっていきます。メッセージとプロパティ(プロパティは基本的にコンポーネントです)。
どちらも基本クラスから派生しており、静的IDが含まれているため、システムは必要なものにのみ注意を払うことができます。それは非常にうまく機能しています...を除いて...
ゲームを拡張するにつれて、常に新しいメッセージタイプとプロパティタイプを作成しています。2つのファイル(hppとcpp)と大量のボイラープレートを作成する必要があるたびに、本質的にclassIDと1つまたは2つの標準データ型またはポインターを取得します。
新しいアイデアを試したり試したりすることが実際の雑用になり始めています。新しいメッセージまたはプロパティタイプを作成したいときは、次のように入力できるようにしたい
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
ヘッダーとcppファイルを作成する代わりに、親クラスなどを含むコンストラクターを作成します。
私の心の中で論理的に1行か2行ということを行うには、20行から40行(ガードやその他すべてを含む)程度です。
これを回避するためのプログラミングパターンはありますか?
(私は何も知らない)スクリプトについてはどうですか?ほとんど同じである一連のクラスを定義する方法はありますか?
以下は、1つのクラスの外観です。
// 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ベクトルと、2Dベクトルを期待すると言っているIDのためのものです。(確かに、一部のプロパティにはより複雑な要素がありますが、同じ考え方です)