簡體   English   中英

Java游戲設計類加載

[英]Java Game Design Class Loading

我正在使用JavaFX構建RPG,需要從專家那里獲得一些建議。

加載某些資源的正確方法是什么? 我不是在談論圖像和聲音,那部分很簡單。 我在說課。 例如; 我喜歡一些可以激活的400+奇特能力。 對於每種能力,我都有一個單獨的班級(或我所說的技巧)。 要使用此功能,我希望能夠打電話

Data.getArte(idOfArte);

這應該返回Arte類型的對象。 所有的技巧都有一個separte類文件。

還有其他資源,例如英雄,敵人等等。 加載和調用這些資源以供使用的最佳方法是什么? 有更好的方法嗎?

編輯:我也非常關注性能。

一種更有效的方法可能是使用實體組件系統或至少借用構圖設計。 這樣,您可以擁有一個具體的類,例如Ability ,其中將包含所有能力共有的通用字段,例如技能點成本,能力持續時間,目標類型,激活類型等。然后,您將為每個特殊值擁有一個組件您需要為該通用功能添加和控制每種特殊行為。 例:

Ability ability = new Ability();
ability.addComponent(new DurationComponent(double seconds)); // specify how long effect lasts
ability.addControl(new DamagingControl(int damage, Object targetType, etc.)); // so ability can damage
ability.addControl(new ElementAugmentingControl(Element element, Object weapon/armor, etc.)); // so ability can change status effects / elements

這應該給您構圖的想法。 根據您的能力的普遍行為,您應該獲得大約10-30個類,而您的400個能力只是成為基本通用能力的配置。 舉個例子,這里有一個角色扮演游戲,它具有大約100個能力(技能),被實現為6個類。 相同的設計也可以用於任何游戲項目/角色。

對於對象創建,您可以執行以下操作:

public static final int ABILITY_ID_SOME_NAME = 1000;    

ability.addComponent(new IDComponent(ABILITY_ID_SOME_NAME));

然后,您的每個能力都可以成為全局數據存儲的一部分,其中僅存儲能力原型:

Ability ability = DataStore.getByID(ABILITY_ID_SOME_NAME).clone();

或者,使數據存儲返回已克隆的功能,以免暴露原型。

最后,您可以考慮使用腳本語言(例如javascript)來更改通用功能的行為。 在這種情況下,您所有的能力都將存儲在scripts/abilities/文件夾中,您可以在運行時加載該文件夾,而只有您需要的那些文件夾。 一些任意的示例:(heal.js文件)

function onUse(object, healValue) {
    if (object.hasComponent(HP_COMPONENT)) {
        val hp = object.getComponent(HP_COMPONENT);
        hp.value += healValue;
    }
}

這是一篇展示如何在Java中調用javascript函數的文章

您正在尋找工廠模式。 我在這里找到了一篇很好的文章: http : //alvinalexander.com/java/java-factory-pattern-example

我假設您不必在運行時加載類文件? 如果是這種情況,我建議您在這里看看: 動態加載Java類文件的方法

暫無
暫無

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

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