내 게임에는 정말 유용하지만 천천히 고통스러워지는 두 가지 클래스가 있습니다. 메시지 및 속성 (속성은 본질적으로 구성 요소입니다).
둘 다 기본 클래스에서 파생되며 정적 ID를 포함하므로 시스템은 원하는 클래스에만주의를 기울일 수 있습니다. 잘 작동하고 있습니다 ... 제외하고 ...
게임을 확장하면서 새로운 메시지 유형과 속성 유형을 지속적으로 만들고 있습니다. 매번 클래스 ID와 하나 또는 두 개의 표준 데이터 유형 또는 포인터를 얻기 위해 2 개의 파일 (hpp 및 cpp)과 1 톤의 상용구를 작성해야합니다.
새로운 아이디어를 실제로 다루기 시작했습니다. 새 메시지 또는 속성 유형을 만들고 싶을 때 다음과 같은 내용을 입력하고 싶습니다.
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
헤더와 cpp 파일을 만드는 대신 부모 클래스 등을 포함한 생성자를 작성하는 대신
논리적으로 내 마음에 1 또는 2 줄이있는 것을 수행하는 것은 약 20-40 줄 (가드 포함하고 모든 것을 포함)입니다.
이 문제를 해결할 프로그래밍 패턴이 있습니까?
스크립팅은 어떻습니까? (아무것도 알지 못합니다) ... 거의 동일한 클래스를 정의하는 방법이 있습니까?
한 클래스의 모습은 다음과 같습니다.
// 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에 대한 모든 것. (일부 속성에는 더 복잡한 요소가 있지만 동일한 아이디어입니다.)