Объект 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 приземляется, currentShape еще один... как упоминалось.

Логика для метода Update следующая:

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;
 }
 }
 }
</shape></shape></shape>

ОБНОВЛЕНИЕ После нескольких кадров он переходит в бесконечный цикл добавления Shapes в коллекцию, поскольку State всегда Landed.

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;
 }
 }
 }
</shape></shape></shape>

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

licensed under cc by-sa 3.0 with attribution.