2016-10-24 8 views
0

У меня есть проект в классе, где я решил сделать игру DX Ball в XNA и хорошо прошел, но теперь я застрял.XNA/C# Редактировать список <> из другого класса

Я создал список «кирпичей», то есть прямоугольников, для того, чтобы мои спрайты располагались и для моего шара сталкивались. У меня есть идея, чтобы вся логика шара была в классе шара, поэтому теперь интересная часть, в которой мне нужна помощь. Как отредактировать этот список, когда шар сталкивается с одним из кирпичей. Я хочу удалить кирпич, который был поражен, и я полагаю, что это будет хорошо, поскольку они объявлены как отдельные кирпичи с индивидуальными координатами.

Я нашел этот вопрос, и он отвечает на вопрос о том, как получить информацию из списка, но не как его редактировать. Access List from another class

Я думал о написании булевой функции в поле обновления шара, так как мне не нужно его вычислять каждый раз, когда он обновляет фрейм. Когда столкновение истинно, оно может выполнять функцию, которая выполняет итерацию по списку кирпичей и удаляет тот, который попал в мяч.

Я не уверен, что мне нужно показать из моего класса шара, чтобы в дальнейшем могли быть какие-то при необходимости.

public struct BoundingBrick 
{ 
    public Vector2 brickPosision; 
    public double BrickW; 
    public double BrickH; 

}  

public BoundingBrick boundingBrick = new BoundingBrick(); 

boundingBrick.BrickW = 50; 
boundingBrick.BrickH = 20; 
boundingBrick.brickPosision.X = 50; 
boundingBrick.brickPosision.Y = 50; 

bricks = new List<Rectangle>(); 

     for (var i = 0; i < 14; i++) 
     { 
      for (var j = 0; j < 12; j++) 
      { 
       bricks.Add(new Rectangle((int)boundingBrick.brickPosision.X + j * 50, (int)boundingBrick.brickPosision.Y + i * 20, (int)boundingBrick.BrickW, (int)boundingBrick.BrickH)); 
      } 
     } 
+0

Прежде всего, добро пожаловать в SO. Я бы посоветовал вам добавить логическую переменную, что-то вроде 'Visible' в ваш' BoundingBrick'struct. Затем вместо того, чтобы иметь «Список », вам лучше иметь «Список » и построить свой прямоугольник после заполнения списка. Я не эксперт xna, поэтому я не могу вам помочь. – Pikoh

+0

RemoveAt (index) удаляет элемент по данному индексу. https://msdn.microsoft.com/pt-br/library/5cw9x18z(v=vs.110).aspx – Magnetron

+0

Но как отредактировать из другого класса? –

ответ

0

Я сделал это:

List кирпичам Прямоугольник мяч;

foreach (BoundingBrick brick in bricks.ToArray()) 
    {      
     if (ball.rect.Intersects(brick.rect)) 
     { 
      ball.CollideEffect(); 
      brick.TakeDamage(); 
     } 
    } 

и в TakeDamage класса из кирпича:

public void TakeDamage(List<BoundingBrick> bricks) 
{ 
     lives -= 1; 
     if (lives <= 0) 
     { 
      bricks.remove(this)   
     } 
} 

'ToArray()' часть будет предотвратить его от падения в списке.

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

  • Нет связанных вопросов^_^