Ada dua kelas dalam gim saya yang benar-benar bermanfaat, tetapi perlahan-lahan menjadi menyakitkan. Pesan dan Properti (properti pada dasarnya adalah komponen).
Keduanya berasal dari kelas dasar dan berisi id statis sehingga sistem hanya dapat memperhatikan yang mereka inginkan. Ini bekerja dengan sangat baik ... kecuali ...
Saya terus-menerus membuat jenis pesan baru dan tipe properti saat saya memperluas permainan saya. Setiap kali saya perlu menulis 2 file (hpp dan cpp) dan satu ton boilerplate untuk mendapatkan dasarnya sebuah classID dan satu atau dua tipe data standar atau sebuah pointer.
Itu mulai membuat bermain-main dan menguji ide-ide baru menjadi tugas nyata. Saya berharap ketika saya ingin membuat pesan atau tipe properti baru, saya ingin bisa mengetikkan sesuatu seperti
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
alih-alih membuat file header dan cpp, menulis konstruktor, termasuk kelas induk, dll.
Ada sekitar 20 - 40 baris (termasuk termasuk penjaga, dan semuanya) hanya untuk melakukan apa yang secara logis 1 atau 2 baris dalam pikiran saya.
Apakah ada pola pemrograman untuk mengatasi ini?
Bagaimana dengan scripting (yang saya tidak tahu) ... apakah ada cara untuk mendefinisikan sekelompok kelas yang hampir sama?
Inilah yang persis seperti satu kelas:
// 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 */
Semua itu hanya untuk Vector 2D dan ID yang mengatakan mengharapkan vektor 2D. (Memang, beberapa properti memiliki elemen yang lebih rumit, tetapi ide yang sama)