2016-10-24 7 views
0

Ich habe ein Projekt in der Klasse, wo ich beschloss, ein DX-Ball-Spiel in XNA zu machen, und ziemlich gut gegangen, aber jetzt bin ich fest.XNA/C# Liste bearbeiten <> aus einer anderen Klasse

Ich habe eine Liste von "Ziegeln" erstellt, also Rechtecke, damit meine Sprites von und für meinen Ball positioniert werden können. Ich habe eine Idee, alle Ball-Logik in der Ball-Klasse zu lassen, also jetzt der lustige Teil, mit dem ich Hilfe brauche. Wie man diese Liste bearbeitet, wenn der Ball mit einem der Steine ​​kollidiert. Ich möchte den Stein, der getroffen wurde, löschen, und ich denke, das wird in Ordnung sein, da sie als einzelne Steine ​​mit individuellen Koordinaten deklariert sind.

Ich habe diese Frage gefunden, und sie beantwortet den Teil, wie man Dinge aus einer Liste herausholt, aber nicht wie man sie bearbeitet.

Ich habe über das Schreiben einer Booleschen Funktion in das Ball-Update-Feld nachgedacht, da ich es nicht jedes Mal berechnen muss, wenn es einen Frame aktualisiert. Wenn die Kollision wahr ist, kann sie die Funktion, die durch die Liste von Steinen iteriert, löschen und diejenige löschen, die der Ball getroffen hat.

Ich bin mir nicht sicher, was ich aus meinem Ball Klasse zeigen muss, so dass es einige später wenn nötig geben könnte.

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

Zunächst einmal willkommen in SO. Ich würde dir raten, eine boolesche Variable, etwa "Sichtbar", zu deinem "BoundingBrick" hinzuzufügen. Anstatt eine 'List ' zu haben, sollten Sie besser eine 'List ' haben und Ihr Rechteck erstellen, nachdem die Liste aufgefüllt wurde. Ich bin kein XNA-Experte, also kann ich Ihnen nicht weiter helfen. – Pikoh

+0

RemoveAt (Index) entfernt das Element am angegebenen Index. https://msdn.microsoft.com/pt-br/library/5cw9x18z(v=vs.110).aspx – Magnetron

+0

Aber wie aus einer anderen Klasse bearbeiten? –

Antwort

0

Ich habe dies getan:

Liste Ziegel Rectangle Ball;

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

und in der TakeDamage Klasse des Ziegel:

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

Der 'ToArray()' Teil wird verhindert, dass es in der Liste vor einem Absturz.

Verwandte Themen