【问题标题】:How to manage hundreds of Entities efficiently?如何高效管理数百个实体?
【发布时间】:2019-09-25 22:25:59
【问题描述】:

好的,所以我是新手,我坚持想出一个解决这个问题的好方法。所以我正在使用 slick2d 在 Java 中创建一个自上而下的 RPG 生存游戏。我在游戏中生成物品时遇到了问题。管理数百个项目的最佳方法是什么……一个例子;我有一个名为 PickUpItems 的项目子类。例如,当一棵树被玩家摧毁时,它会生成一个 PickUpItem,它只是一个带有用于碰撞的矩形框的图像。什么是选择要生成的项目的最佳方式,而不必为每个交互式项目(树、灌木、农作物等)制作数百个类。我应该有一个项目经理课程吗?给定一个名称它会搜索一个文本文件以获取所需的参数并创建一个对象呢?

public void spawnPickUpItem(String type, int x, int y) { PickUpItem pickUpItem = null;

    switch(type)
    {
        case"Log":
            pickUpItem = new PickUpItem(type,logImage,x,y,this);
        break;
        case"Flint":
            pickUpItem = new PickUpItem(type,flintImage,x,y,this);
        break;
        case"Rock":
            pickUpItem = new PickUpItem(type,rockImage,x,y,this);
        break;
    }

这是我目前的尝试,它可以产生必要的物品,但想象一下运行一个 switch 语句,其中包含数百个案例,每个物品都需要在游戏中产生一个物品。我相信有人可以提供帮助..谢谢

【问题讨论】:

    标签: java resources lwjgl slick2d


    【解决方案1】:

    您可以遵循Factory Method 模式

    Map<String, Image> imageRepository = new HashMap<>(); // to be filled
    
    PickUpItem createItem(String type, int x, int y) {
        Image itemImage = imageRepository.getOrDefault(type, yourDefaultImg);
        return new PickUpItem(itemImage, x, y); 
    }
    
    public void spawnPickUpItem(String type, int x, int y) {
       PickUpItem pickUpItem = createItem(String type, int x, int y);
       // further logic . . .
    }
    

    【讨论】:

    • 我不熟悉那个收藏。我将阅读它。谢谢。
    • 我对这个集合类型进行了一些研究,它似乎对我的项目非常有用。我的问题是如何用与给定字符串对应的所有图像填充这个 Hashmap ......?我假设我会使用 .put() 方法,参数一是字符串然后是图像?我在光滑的 2d 中工作,所以要创建一个图像,我需要做这样的事情...... Image img = new Image("pathgoeshere");谢谢
    • 使用地图作为您的临时存储库是保持未来扩展功能的可能性的好方法。第一个String(键)应该是您的图像标识符。与您在 case 关键字(“Rock”、“Flint”等)附近使用的含义相同
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-06-28
    • 2019-07-09
    • 2014-07-16
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    相关资源
    最近更新 更多