我坚持创建一个类架构来执行此操作:
我有很多(约78种)类型的块。 游戏的级别由这些块组成。 在级别的ByteArray中,只有数字,表示块的类型。 因此,对于碰撞处理,我可以只检索所需位置的数字并获得该块的属性。 (实心,可选,可见,纹理)。 但。 我将重新排序这个块列表,因此,还需要一种方法来按名称访问块的属性。
所以,我希望能够通过
访问一个块的属性块[5]的.properties
&安培;
Blocks.Rock.Properties
请注意,这些不是实例,我不应该实例化它们来访问它们的属性。
答案 0 :(得分:1)
如果你想要Blocks [5] .Properties以及Blocks.Rock.Properties,Blocks必须是带有索引器的自定义类。设置类似于操作:
public Block this[] (int index)
{
//getter logic here
}
索引器可以采用整数类型或字符串,因此您可以使用Blocks来包装字典并按键访问值:Blocks["Rock"].Properties
。这确实涉及“魔术字符串”,如果拼错,编译器将无法捕获。
命名的getter是简单的只读属性:
public Block Rock { get{//getter logic here} }
如果这是我的应用程序,我会创建一个单例块类。这些块是游戏不可或缺的一部分,在整个生命周期中使用,你不想明确地实例化它们;单例场景的定义(并且更容易更改为常规范围的实例,而不是全部静态)。 Blocks类将包装Block对象的集合,然后该实现隐藏在Blocks访问器后面。您可以使用List并使用Linq搜索其属性(我假设块的属性将包括BlockID及其名称),或者您可以选择块的索引或名称作为Dictionary的键。块。
答案 1 :(得分:0)
由于不同的块类型是整数,因此可以使用map / dictionary / associative数组。
Dictionary<string, int> BlockTypes = new Dictionary<string, int>();
BlockTypes["Rock"] = 1337;