2013-08-07 6 views
0

У меня есть объект, который, если он попадает в определенное состояние, я создаю новый объект:XNA объекта не меняется

 if (currentShape.State == ShapeState.Landed) 
     { 
      Shape shape = new Shape(); 
      shape = utilities.GetRandomShape(contentManager); 
      shapes.Add(shape); 
      currentShape = shape; 
     } 

currentShape Объект постоянно меняется таким образом. По какой-то причине, однако, currentShape по-прежнему ShapeState.Landed навсегда.

Игра, в которой у меня есть предметы, падающие, когда человек достигает земли, создается другая и назначается currentShape. Поэтому, когда currentShape земли, другой создается ... как уже упоминалось.

Логика метода обновления заключается в следующем:

public void Update(TimeSpan elapsedTime, List<Shape> shapes, Shape fallingShape) 
    { 
     List<Shape> shapesInSameColumn = new List<Shape>(); 

     foreach (var shape in shapes) 
     { 
      if (shape.ColumnNumber == fallingShape.ColumnNumber) 
      { 
       shapesInSameColumn.Add(shape); 
      } 
     } 

     shapesInSameColumn.Remove(fallingShape); 
     float yDestination = 0f; 
     float yNextPosition = fallingShape.Position.Y + elapsedTime.Milliseconds/30 * FallSpeed; 

     if (shapesInSameColumn.Count == 0) // There are NO shapes in the column 
     { 
      yDestination = Utilities.bottomOfCanvas; 
      if (yNextPosition > yDestination) 
      { 
       fallingShape.Position.Y = yDestination; 
       fallingShape.State = ShapeState.Landed; 
       return; 
      } 
      else 
      { 
       fallingShape.Position.Y = yNextPosition; 
      } 
     } 
     else // There ARE shapes in the column 
     { 
      yDestination = shapesInSameColumn[shapesInSameColumn.Count - 1].Position.Y - Texture.Height; 

      if (yNextPosition > yDestination) 
      { 
       fallingShape.Position.Y = yDestination; 
       fallingShape.State = ShapeState.Landed; 
       return; 
      } 
      else 
      { 
       fallingShape.Position.Y = yNextPosition; 
      } 
     } 
    } 

UPDATE После нескольких кадров, он идет, чтобы бесконечный цикл добавления фигур в коллекции, как государство всегда Приземлился.

+0

Я предполагаю, что после первого кода, который вы предоставили, он запускает метод «Обновить», где 'fallShape.State' установлен на« Landed ». – ShadowCat7

+0

...... Не могли бы вы рассказать, что вы имеете в виду/что вы думаете о проблеме? – Subby

+0

Показать код объекта, который запускает первый код, который вы указали. Вероятно, он выполняет этот код, а затем запускает метод «Update». – ShadowCat7

ответ

1

Это то, что это звучит, как вы (поправьте меня, если я ошибаюсь):

public void Update(TimeSpan elapsedTime, List<Shape> shapes, Shape fallingShape) 
    { 
     List<Shape> shapesInSameColumn = new List<Shape>(); 

     //Added code. 
     if (currentShape.State == ShapeState.Landed) 
     { 
      Shape shape = new Shape(); 
      shape = utilities.GetRandomShape(contentManager); 
      shapes.Add(shape); 
      currentShape = shape; 
     } 

     foreach (var shape in shapes) 
     { 
      if (shape.ColumnNumber == fallingShape.ColumnNumber) 
      { 
       shapesInSameColumn.Add(shape); 
      } 
     } 

     shapesInSameColumn.Remove(fallingShape); 
     float yDestination = 0f; 
     float yNextPosition = fallingShape.Position.Y + elapsedTime.Milliseconds/30 * FallSpeed; 

     if (shapesInSameColumn.Count == 0) // There are NO shapes in the column 
     { 
      yDestination = Utilities.bottomOfCanvas; 
      if (yNextPosition > yDestination) 
      { 
       fallingShape.Position.Y = yDestination; 
       fallingShape.State = ShapeState.Landed; 
       return; 
      } 
      else 
      { 
       fallingShape.Position.Y = yNextPosition; 
      } 
     } 
     else // There ARE shapes in the column 
     { 
      yDestination = shapesInSameColumn[shapesInSameColumn.Count - 1].Position.Y - Texture.Height; 

      if (yNextPosition > yDestination) 
      { 
       fallingShape.Position.Y = yDestination; 
       fallingShape.State = ShapeState.Landed; 
       return; 
      } 
      else 
      { 
       fallingShape.Position.Y = yNextPosition; 
      } 
     } 
    } 

Так что означает, что он все равно будет продолжать обновлять после //Added code выполняет, правильно? Исправить не следует, если currentShape.State == ShapeState.Landed.

Смежные вопросы