В моем основном классе у меня есть список объектов "Entity", Entity - это класс, который я создал со всеми необходимыми данными, необходимыми для игрока и / или врагов.
List<Entity> Listentities = new List<Entity>();
ДальшеУ меня есть метод Gravity, который в его текущем состоянии имеет некоторые проблемы.
public void Gravity(GameTime gameTime)
{
foreach(Entity entity in Listentities)
{
entity.entityPosition.X += 1;
}
}
Это очень просто, что я пытаюсь сделать здесь;Я пытаюсь взять каждую сущность в списке и переместить ее позицию. X вниз на одну единицу каждый раз, когда вызывается метод.Однако каждый раз, когда я запускаю игру, я получаю «Ссылка на объект, не установленную для экземпляра объекта» в строке
entity.entityPosition.X += 1;
Мне нужно знать, что я делаю неправильно.Хотя я учусь быстро, я все еще довольно нов.Прямо сейчас, только одна сущность когда-либо добавлена в список, сущность "player1".Я легко могу исправить эту ошибку, набрав
player1.entityPosition.X += 1;
, но это повлияет только на игрока.
Редактировать: я включаю конструктор для Entity:
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;
}
и метод loadcontent () в game1.
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");
}
и переменные entityPosition в верхней части моего класса Entity.
public Vector2 entityPosition;
public Vector2 EntityPosition
{
get { return entityPosition; }
set { entityPosition = value; }
}
Инициализация списка:
List<Entity> Listentities = new List<Entity>();
это вверху game1.cs
Код, в который я добавляю сущность player1 к Сложностям:
protected override void Initialize()
{
InitGraphicsMode(1280, 720, false);
Listentities.Add(player1);
base.Initialize();
}
в Game1, конечно.
Может быть, я должен был также упомянуть, что я использую XNA GS 4.0