簡體   English   中英

如何用Java編寫可靠的Pure Aggregation(組合)游戲對象?

[英]How to write solid Pure Aggregation (composition) Game Objects in Java?

所以我剛開始用Java編寫游戲,我正在編寫我的游戲對象。 現在我已經在Evolve Your Hierarchy中讀到,你應該將游戲構建為組合而不是大類層次結構。 正如上一個鏈接中的圖像所示:

在此輸入圖像描述

但是,當實際開始實現時,我有一個關於在哪里應用接口的小問題。

假設你有一個叫做Player的類,接口是Moveable和Renderable。 您是使用公共接口變量實現的:

class Player {
    public Moveable moveable;
    public Renderable renderable;
}

class GenericMoveable implements Moveable {
    // Function implementations
}

class PlayerRenderable implements Renderable {
    // Function implementations
}   

或者您嘗試通過將接口直接應用於對象來執行此操作:

class Player implements Moveable, Renderable {
    private GenericMoveable genericMoveable;

    // Non-direct Implementation of Moveable
    void someMoveFunc(double x, double y) {
        genericMoveable.someMoveFunc(x, y);
    }

    // Direct implementation of Renderable
    void someRenderableFunction() {
        // Player class specific code
    }
}

class GenericMoveable implements Moveable {
    // Function implementations
}

現在我覺得第二種方法更好。 主要原因是因為我可以創建以下列表:

List<Renderable> renderObjects; // use this to draw all of the objects to the screen
List<Moveable> moveObjects; // use this to move all objects at once

我真的只是想確認我是在正確的軌道上。 我很確定在通過Java游戲合成創建游戲對象時,您希望將接口直接應用於相關游戲對象,然后在需要時使用私有接口,並為其余部分直接實現這些功能。 它是否正確? 我正在做的事情的積極和消極是什么?

雖然,雖然我們在這里,但在Java中的Compositional Game Objects的實現中還需要注意什么? 我該怎么辦? 感謝您提前做出的任何回復,感謝您的幫助。

我已經使用java創建了一些游戲,並且還看到了一些非常好的游戲的來源,並且似乎最常見的方法是使用第二種方法。 據我所知,使用第二種方法的最佳理由是使用Lists更容易跟蹤對象,並允許您使用更少的線條進行繪制。 看起來你走在正確的軌道上,Evolve Your Hierarchy文章對於新游戲開發者來說是一個很好的閱讀。

這是一個有趣的鏈接。 我認為你對Player類的想法就是那篇​​文章所謂的組件容器。 為此,將接口應用到類中對我來說就像是要走的路。 它是唯一可以引導您進入純聚合結構的路徑(系統中不再存在Player本身

順便提一下,您提出的結構基本上是委托設計模式的應用。 Player將所有移動操作的委托依賴於Movement對象,並且它不關心它必須使用哪種特定類型的Movement對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM