簡體   English   中英

Java-處理游戲中可切換效果的最佳方法

[英]Java - Best method of handling toggleable effects in a game

我正在開發一個游戲,用戶可以在其中打開/關閉某些效果。 這些影響會消耗用戶的精力,並且程序的各個部分必須能夠檢查某個影響是否處於活動狀態。 當前,我正在使用枚舉類型來存儲和檢查效果:

public static enum Effects { SUPER_FIRE, FIRE_SHIELD }

if (someEffect == Effects.SUPER_FIRE) {
    // Breath fire etc..
}

如此說來,我必須為每種效果存儲其他變量-例如使用它所需的級別或它消耗能量的速率。 因此,我想到的另一種方法是使用一個類:

public class SuperFire extends Effect {

    public static int levelRequired = 10;
    public static int drainRate = 5;        

    public boolean active() {
        // Check if it's active
    }

    public boolean activate() {
    }

    public boolean deactivate() {
    }

}


SuperFireEffect sfe = new SuperFire();
sfe.activate();
if (sfe.active()) {
    energyLevel -= sfe.drainRate;
}
sfe.deactivate();

哪種實施方式(或其他方式)最適合這種情況?

無論如何,我都猶豫要說“最好”,但是看來您的第二個例子在“更靈活”這個詞的含義上是“更好”的。

當然,從很小的代碼片段來看,您並不是很好地封裝了功能,因此您可能似乎希望先做更多的設計工作。

最后,您需要讓游戲代碼根據Effect基類及其作用來思考,而不必了解諸如SuperFireEffect之類的東西的實現。

我可能會選擇第二個,因為我認為第二個更“面向對象”。 另外,如果您開始添加很多效果,則將更易於維護,並且可以從繼承中受益於超級效果。

第二種實現效果更好,因為您提到了使用特有的功能/屬性/字段/屬性(例如“ levelRequired,rainRate”)指定的效果 因此,按照這種方法,您應該很好地定義您的類/實體及其特征和共同特征。 應當傳達面向對象的編程原則。

暫無
暫無

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

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