私はゲームプロジェクトのレイアウトを練っていて、「抽象ゲームの世界」を実装するためのいくつかの具体的なアイデアを思いついた。
このゲームの世界では、すべてがGameObject(ビークル、ユニット、パーティクルエフェクトなど)として表されます。実行時にオブジェクト間に依存関係が存在しないように、これらのオブジェクトを分離しておく必要があります。
これを実現するために、オブジェクトが他のオブジェクトのIDを要求して、メッセージを相互に送信できるようにします。メッセージは、そのIDでオブジェクトに配信されます。
私が取り組まなければならない問題は、他のオブジェクトからデータを要求するためのメソッドを持つことです。たとえば、車両に現在ドライバーがいるかどうか。これを行うためのいくつかの方法を検討しましたが、私が最も近いのは、送信者が他のオブジェクトに特別なメッセージを送信する特別な種類のメッセージです。受信オブジェクトは、要求されたデータをその中に配置することが期待されます。物体。
これは、オブジェクトがどのように機能するかを説明するために私が書いた「スタブ」です。
public class DataRequestMessage extends Message {
public final RequestedDataType dataType;
private boolean requestedDataReceived = false;
private String stringValue;
public DataRequestMessage(MessageType type, RequestedDataType dataType) {
super(type);
this.dataType = dataType;
}
public void setString(String value) {
if(requestedDataReceived) {
throw new RuntimeException("The content of the data request object has already been set");
}
if(dataType != RequestedDataType.String) {
throw new RuntimeException("Data type object expects a value of type " + dataType + ", but received one of type String.");
}
requestedDataReceived = true;
this.stringValue = value;
}
public String getString() {
if(dataType != RequestedDataType.String) {
throw new RuntimeException("This data type object has type " + dataType + ", and can therefore not return a String value.");
}
return stringValue;
}
}
ご覧のとおり、オブジェクトが意図したとおりに使用されていない場合は、地雷原になります。ただし、オブジェクトが別のオブジェクトが何かを実行することを期待し、2つの間に依存関係を与えることを私はまだ心配しています。
このメソッドは、他のオブジェクトから任意のデータを要求するための良い方法ですか?または、提供されたオブジェクトに対して別の関数が操作を実行することを期待しているのは、常に悪い考えですか?