我有一个有趣的问题。由于某种原因,位置变量已停止正常工作。位置将在代码的LoadContent部分中更改(例如,32,96),但是当涉及Update部分时,该变量已重置为默认值(0,0)。在LoadContent代码中,Area类触发一个方法,通过给定的数据字符串加载对象。对象将添加到Area的ObjectList类中。类的关系如下所示。
Area -> Owns -> ObjectList -> Contains -> Objects
对象使用的所有变量虽然受保护,但对象与位置变量之间的关系具有get和set。
---区域---(区域是一个部分类。一半的方法在一个文件中,其余的在另一个文件中)
protected ObjectList objects;
--- ObjectList ---(继承Object属性但也覆盖了一些)
protected List<Object> objects;
--- ---对象
protected Vector2 position;
protected Object parent;
我还提供了如何更改
下面的位置变量---改变位置---(在Area类中触发)
/*Earlier in the code, a string is split into parts which is used to determine the object (codeParts), this object is known as newObject and is returned at the end of the method to be added to the ObjectList*/
if (codeParts.Length >= 2)
newObject.X = int.Parse(codeParts[1]);
if (codeParts.Length >= 3)
newObject.Y = int.Parse(codeParts[2]);
newObject.Position = new Vector2(newObject.X, newObject.Y);
---更改位置---(Object类的get和set)
public virtual Vector2 Position
{
get { return this.position; }
set { this.position = value; }
}
关于这个问题的奇怪之处在于使用系统输出,很明显,当位置变量被重置为(0,0)时,X和Y变量仍然保留它们给出的值。
object_1 0,0 //The position output
object_1 200,200 //The X,Y output
正如您所看到的,让一组变量给出正确答案而第二组给出错误值是一个非常不寻常的错误。有谁知道什么可能导致Vector2变量重置自己?
非常感谢!我很乐意提供更多代码以期解决这个问题。
foreach (Object obj in testArea.ObjectList.Objects) {
Debug.Write(obj.ID + " " + ObjectMethods.getObjectPriority(obj) + " " + obj.InView + " ");
Debug.WriteLine(obj.X + "," + obj.Y);
if (obj.Sprite != null)
Debug.WriteLine(" " + obj.Sprite.Name);
}