C# 帮助我上重力课(列出问题)

C# 帮助我上重力课(列出问题),c#,list,xna,foreach,gravity,C#,List,Xna,Foreach,Gravity,在我的主类中,我有一个“实体”对象的列表,实体是我用玩家和/或敌人所需的所有必要数据创建的类 List<Entity> Listentities = new List<Entity>(); 我在这里想做的很简单;每次调用该方法时,我都会尝试获取列表中的每个实体,并将其位置.X向下移动一个单位。然而,每次我运行游戏时,我都会得到一个“对象引用未设置为对象实例”的命令行 entity.entityPosition.X += 1; 我需要知道我做错了什么。虽然我学得很快,但

在我的主类中,我有一个“实体”对象的列表,实体是我用玩家和/或敌人所需的所有必要数据创建的类

List<Entity> Listentities = new List<Entity>();
我在这里想做的很简单;每次调用该方法时,我都会尝试获取列表中的每个实体,并将其位置.X向下移动一个单位。然而,每次我运行游戏时,我都会得到一个“对象引用未设置为对象实例”的命令行

entity.entityPosition.X += 1;
我需要知道我做错了什么。虽然我学得很快,但我还是相当新的。 目前,列表中只添加了一个实体,即实体“player1”。我可以很容易地通过键入来修复此错误

player1.entityPosition.X += 1;
但这只会影响球员

编辑:我包括实体的构造函数:

    public Entity(string entityName, Texture2D EntityAppearance, int EntityMaxHealth, int SpriteHeight, int SpriteWidth, int CurrentFrame, int AnimationCall, int EntityAttack, int EntityStr, int EntityDex, int EntityLuk, int EntityDefense, bool EntityIsMe )
    {
        this.entityName = entityName;
        this.EntityAppearance = EntityAppearance;
        this.EntityMaxHealth = EntityMaxHealth;
        this.SpriteHeight = SpriteHeight;
        this.SpriteWidth = SpriteWidth;
        this.CurrentFrame = CurrentFrame;
        this.AnimationCall = AnimationCall;
        this.EntityAttack = EntityAttack;
        this.EntityLuk = EntityLuk;
        this.EntityDex = EntityDex;
        this.EntityStr = EntityStr;
        this.EntityDefense = EntityDefense;
        this.EntityIsMe = EntityIsMe;
    }
以及game1中的loadcontent()方法

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        camera = new Camera(GraphicsDevice.Viewport);
        player1 = new Entity("player1", Content.Load<Texture2D>("PlaceHolder"), 100, 100, 100, 0, 0, 3, 1, 1, 1, 0, true);
        player1.EntityPosition = new Vector2(0, 0);
        player1.EntityBox = new Rectangle((int)player1.EntityPosition.X, (int)player1.EntityPosition.Y, player1.SpriteWidth, player1.SpriteHeight);
        player1.Origin = new Vector2();
        spritefont = Content.Load<SpriteFont>("SpriteFont1");
    }
列表的初始化:

    List<Entity> Listentities = new List<Entity>();
当然是在游戏1中


也许我还应该提到,我正在使用XNA GS 4.0,请确保每个实体在尝试分配给X之前都创建了其entityPosition属性。很可能,您忘记添加一个新的entityPosition()在某个构造函数中。

也许您没有设置实体的entityPosition的值

我希望entityPosition是一个,因此不需要初始化,但也许您有自己的entityPosition类

那么,

someEntity.entityPosition = new EntityPosition();

您可以发布创建实体列表的零件吗?从错误消息中可以清楚地看出,在使用列表之前,您没有正确初始化它

例如,看看这个:


另外,要调试,只需做一件事-在foreach循环之前在方法主体中打印
Listentities

确保您的实体和entityPosition不为null…

请确保列表确实已初始化。还要确保不要将null添加到列表中


您的EntityPosition是Vector2(结构),因此不能为null。(这是ofc假设您没有创建一个类并将其命名为vector2)。

您能提供用于添加实体的代码吗,可能还有您的实体类?我的猜测是,在创建实体或将其添加到列表时,某些内容没有正确初始化。或者entityPosition是一个私有字段,不能以这种方式访问。还有一件事:不使用新的Vector2(0,0),您可以使用Vector2.Zero(实际上不需要Vector2.Zero,因为Vector2是一个结构,因此具有等于Vector2.Zero的默认初始化),请在将Entityy(播放器)添加到列表的地方发布代码。我假设您在初始化播放器之前添加了它。我看不出您在哪里将player1添加到Listenties。。代码在哪里?列出添加的初始化代码以及其他位。请随意询问您是否还想看其他内容~我已经在entity中包含了struct以及上面与entityposition相关的行。每个实体的位置等将与player1一起在loadcontent()方法中初始化。
    List<Entity> Listentities = new List<Entity>();
    protected override void Initialize()
    {
        InitGraphicsMode(1280, 720, false);
        Listentities.Add(player1);
        base.Initialize();
    }
someEntity.entityPosition = new EntityPosition();