【发布时间】:2013-02-21 16:38:15
【问题描述】:
我一直在开发一款大型角色扮演游戏。问题是我在设计如何管理项目和库存系统时遇到了麻烦。目前我有类似的东西:
- 公共抽象类 Item 有 5 个嵌套类,它们都是抽象的和静态的,代表了 Item 的类型。每个嵌套类都有唯一的 use()、delete()(最终确定类实例)和 sell()(触发删除)void。它们还具有可选的 getter 和 setter 方法,例如填充所有必要字段的 setAll() 方法。
- 默认:具有基本价格、可交易性布尔值、字符串名称等...非常灵活
- Weapon:除了 Default 类型所拥有的东西之外,它还具有整数用于装备时的统计加成(用于equip() 和 unequip() 虚空)。与公开课 Hero 互动。
- 装备:类似于武器,只是它有一个名为“EquipSlot”的枚举字段,用于确定装备的位置。
- 消耗品:与默认类似,只是有一个consume() void,允许玩家在使用英雄时对英雄应用某些效果。消费通常意味着触发 delete() void。
- 特殊:通常与任务相关的项目,其中“可交易”布尔值是静态的、最终的并且总是错误的。
现在,我制作定制物品的方式是这样的。
- 首先,我创建了一个新类(非抽象类)
- 然后,我让它扩展 Item.ItemType
- 然后,我创建了一个内部有 setAll(info) void 的构造函数。
- 然后,我可以在其他类中使用这个类。
一切看起来像这样:
package com.ep1ccraft.Classes.Items.Defaults;
import com.ep1ccraft.apis.Item.*;
public class ItemExample extends Item.Default {
public ItemExample() { // Constructor
this.setAll(lots of arguments here);
}
}
那我可以做:
ItemExample something = new ItemExample();
而且我有一个完美的 ItemExample,它包含我想要的所有属性,所以,我可以制作它的各种实例,并使用诸如“getName()”之类的惊人方法。
问题在于命名实例,因为我不知道如何制作一个自动表单,该表单将为实例提供与另一个实例不同的名称,这样它们就不会发生冲突。另外,我想实现一个库存系统,使用插槽作为容器并且可以保持堆栈(仅限可堆叠物品),它的主要特点是您可以将它们拖放到其他插槽中(例如,重新组织或移动到另一个库存实例,如银行,或放置在英雄的武器或装备槽中,如果允许的话),您可以单击它们以显示一个屏幕,其中显示项目的名称、描述和可能的操作(哪个触发前面提到的 delete() 和 use() 无效)。
感谢您阅读所有内容!我知道也许我要求太多,但无论如何我都会很感激任何答案!
【问题讨论】:
-
我不太确定你在问什么。您是否正在寻找一种生成唯一名称的方法?如果是这样,你的标准是什么?它们是否必须是人类可读的名称或 ID?如果是后者,您可以使用 UUID 生成器。如果是前者,那么让它们独一无二是一项挑战。
-
您需要一个唯一的名称,还是只是一种区分引擎中项目的方法。
-
它们可以是 ID 而不会出现问题。我只需要每个实例具有不同的名称,并且在 Inventory 用户界面中单击时可以访问。此外,每个实例都有一个在变量中声明的标志性图像。这就是清单用户界面中显示的内容。
-
每个实例都有一个人性化的名称字符串,显示出来的 ID 标识符就可以了
标签: java