【发布时间】:2017-09-07 14:55:07
【问题描述】:
我使用这样的 C# 行创建了一个对象列表:
gameObjects.Add(new Object());
我还制作了一个函数,可以在屏幕上打印游戏对象中包含的对象类型列表。
for(int i = 0; i < gameObjects.Count; i++)
Console.WriteLine(gameObjects[i].GetType());
到目前为止一切顺利。但是,我在屏幕上打印的项目比游戏对象中应该出现的项目多,所以我一直在尝试找出一种方法来找出是否有任何条目是重复的,因为我在我的代码中找不到任何内容可能会在列表中创建额外的对象。如果我能打印出列表中每个对象的名称,那就太好了,但由于我没有给它们命名,我认为这是不可能的。还有什么其他东西可以将列表中的一个对象与我可以利用的另一个对象区分开来吗?由于它只是调试,我真的不想进入并确保每个对象都有一个名称。
谢谢!
编辑:
对于那些要求更多代码的人,我有一个函数可以将 staticObject 类型的对象添加到 gameObjects 列表中:
private void CreateStaticObject(Vector2 v2StaticObjectPosition)
{
Texture2D staticObjectTexture = Content.Load<Texture2D>(@"textures\StaticObject");
GameInfo.gameInfo.gameObjects.Add(new StaticObject(staticObjectTexture, v2StaticObjectPosition, sbSpriteBatch));
}
该列表包含在名为 GameInfo 的类中。每个 StaticObject 都继承自 Sprite 类,如果这很重要的话。
我还在列表中添加了一个 Player 对象,它继承自 StaticObject 类:
private void CreatePlayer(Vector2 v2PlayerPosition)
{
Texture2D playerTexture = Content.Load<Texture2D>(@"textures\Player1");
player1 = new Player(playerTexture, v2PlayerPosition, sbSpriteBatch);
}
然后我用这个打印出列表的内容:
for(int i = 0; i < GameInfo.gameInfo.gameObjects.Count; i++)
{
string sObjectString = string.Format("Game object {0} is a {1}", i, GameInfo.gameInfo.gameObjects[i].GetType());
DrawWithShadow(sObjectString, new Vector2(10, 20 * i + 10));
}
DrawWithShadow() 只是一个简单的方法,它可以很好地将屏幕上的文本格式化到所需位置。不幸的是,对于我通过调用 CreateStaticObject() 方法创建的每个对象,我的列表中都有两个条目。
【问题讨论】:
-
查看更多代码真的很有帮助...
-
define "duplicates",你的意思是对同一个实例的两个引用吗?还是您的对象实际上包含一些可以使用的数据?
-
重现您的问题的信息会很好。
-
我在上面添加了更多代码。希望它会有所帮助。