当前位置: 首页 > 知识库问答 >
问题:

如何高效地管理数百个实体?

令狐钧
2023-03-14

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

public ull spawnPickUpItem(String type, int x, int y){PickUpItem picUpItem=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语句,每个项目都需要在游戏中产生一个项目。我相信有人能帮上忙。。非常感谢。

共有1个答案

平嘉熙
2023-03-14

您可以遵循工厂方法

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 . . .
}
 类似资料:
  • 在C很新,很抱歉提前听起来很没有经验... 我希望通过将节点存储在静态分配的数组中来实现列表抽象数据类型,而不使用malloc()或free()。每个列表元素都是一个节点,可以容纳一个“项”。我需要能够使用next和previous遍历节点,并具有“current”、“tail”、“head”的概念。 还有两个数组。。。一个指向“头”的指针数组,因此每个头都有一个“节点”数组。我还需要能够将当前项

  • 我有INT数组 我也在寻找类似的问题,但我只发现了java.util.stream.stream .sorted()的大O复杂性,这一点也没有帮助,因为有两个不同的答案(第一个当然是部分错误的,因为arrays.sort并不总是O(n log n))。第二个呢?我还没找到证据。

  • 有两个类。我想在dataConsumer类中获取数据提供程序类providerData_。 为了解决这种情况,我认为下面是一个解决方案。我制作了如下的singleton数据传输类。但我不确定这是不是c中的通用解,首先我想知道我的解是否可用。接下来,如果你知道更好的解决方案(或设计模式)来解决我的情况,请告诉我。

  • 假设我有理由要求通过多个值类型快速查找类实例,为了便于解释,我将以游戏服务器为例。 假设服务器使用静态标识号处理用户。这个数字用于与特定玩家交流和互动(即:私聊、交易请求、战斗、公会邀请等)。 这需要经常使用玩家的识别号来查找玩家,根据我目前的经验,最好的方法是:(如果我错了,请纠正我。) 然而,在处理网络时,很多时候我还需要将播放器与网络会话关联,或者一些人可能更熟悉的“套接字”。看起来是这样的

  • 目前,我有一个EC2实例(2个CPU、8GB RAM、Linux),上面有: NodeJS Express服务器(后端) NodeJS“微服务”Express服务器(与API等通信) PostgreSQL数据库 Redis(作为我的服务器(1)和我的微服务服务器(2)之间的消息代理 与服务器(1)通信的ReactJS应用程序(前端) 现在,这在低流量下工作得很好,但是随着流量的增加(每分钟/小时1

  • 然而,所提出的解决方案似乎都没有涵盖“简单”应用程序的情况:我有一棵大树(即一棵非常深、非常宽或两者兼而有之的树),我希望以编程方式完全扩展它。 下面是一个显示问题的MCVE:它创建了一个有100k个节点的树模型。按下该按钮会触发对的调用,该调用尝试使用从相关问题的答案派生的方法展开所有节点。 问题是,扩展这100k个节点大约需要13秒(在一台普通机器上,使用最新的JVM)。