我打算用C#重写我的Python Tile Engine.它使用所有游戏对象的列表并在屏幕上呈现它们.我的问题是,与Python不同,你可以在数组中添加几乎任何东西(例如x = ["jj",1,2.3,'G',foo])你只能在C#数组中添加一种类型的对象(int [] x = {1,2,3};).是否有任何动态数组(类似于ArrayList()类)或允许您将不同类型打包到单个数组中的东西?因为所有游戏对象都是单独的类.
Nit*_*esh 43
非常简单 - 创建一个Object类数组并为数组赋值.
Object[] ArrayOfObjects = new Object[] {1,"3"}
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 14
你可以使用一个object数组. strings,int,bool,和classes都被认为是对象,但是一定要明白,每个对象不保留它曾经是什么,所以你需要知道的对象实际上是一个字符串,或某一类.然后,您可以将对象强制转换为该类/数据类型.
例:
List<object> stuff = new List<object>();
stuff.add("test");
stuff.add(35);
Console.WriteLine((string)stuff[0]);
Console.WriteLine((int)stuff[1]);
Run Code Online (Sandbox Code Playgroud)
虽然,C#是一种强类型语言,所以我建议你接受语言的差异.也许您应该看看如何重构引擎以使用强类型,或者查看其他方法来共享不同的类等.我个人喜欢C#这样做的方式,节省了我很多时间而不必担心数据类型等因为C#会在运行之前将我的代码中的任何转换(将一种数据类型更改为另一种数据类型)抛出.
另外,你不知道,xna是C#的游戏框架(没有它作为标签,所以我假设你没有使用它).
Gil*_*man 13
您可以编写一个名为GameObject的抽象基类,并使所有gameObject继承它.
编辑:
public abstract class GameObject
{
public GameObject();
}
public class TileStuff : GameObject
{
public TileStuff()
{
}
}
public class MoreTileStuff : GameObject
{
public MoreTileStuff()
{
}
}
public class Game
{
static void Main(string[] args)
{
GameObject[] arr = new GameObject[2];
arr[0] = new TileStuff();
arr[1] = new MoreTileStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
C#有一个ArrayList,允许你在一个数组中混合类型,或者你可以使用一个对象数组,object []:
var sr = new ArrayList() { 1, 2, "foo", 3.0 };
var sr2 = new object[] { 1, 2, "foo", 3.0 };
Run Code Online (Sandbox Code Playgroud)