2016-06-02 7 views
0

ich auf ein Spiel ein wenig ähnlich Tetris arbeite. Ich bin an einer Straßensperre angelangt, wenn es um die Gravitationslogik geht. (Ich arbeite in XNA, wenn es überhaupt relevant ist)Anwenden von Schwerkraft zu einem 2D-Array in XNA Spiel

Ohne Ihre Zeit zu verschwenden, indem sie in Einzelheiten zu gehen Ich habe im Wesentlichen einen 2D-Array. Es gibt 4 Arten von Teilen: leer (0), blau (1), grün (2), rot (3) und gelb (4).

In diesem Spiel wird es möglich sein, NxM feste Blöcke der gleichen Farbe zu bilden. Dies ist der Teil, der die Logik unordentlich macht. Ich hoffe, es klingt jetzt nicht zu vage, aber ich werde ein Beispiel zeigen und meine bisherigen Fortschritte zeigen.

int[,] example = new int[5,5] 
     { 
      { 0,0,1,0,4 }, 
      { 0,2,2,0,0 }, 
      { 0,2,2,2,0 }, 
      { 0,0,0,3,0 }, 
      { 1,2,2,0,0 } 

     }; 

Nehmen wir an, dass dies der Boardstatus ist. Wie Sie sehen können, gibt es ein 2x2 von 2 (Grüns) und einige Stücke in der Luft schweben. Mein Plan ist es, eine Animation der herunterfallenden Teile zu spielen, bis der Platz darunter belegt ist. Ich habe versucht, das zu beheben, und es funktionierte gut, wenn ich nur die Schwerkraft für einzelne 1x1 Stücke betrachtete. Wenn es um die Handhabung von 2x2 und größeren Blöcken ging, wurde es ein großes Durcheinander und ich blieb einfach stecken.

bei dieser Mein Versuch, eine Liste zu halten, den Überblick über alle Blöcke, die auf dem Spielbrett haben war, würde dies jedes Mal aktualisiert wird, wurde die Schwerkraft Update-Methode aufgerufen.

  int[,] board = new int[6, 6]; 
      bool[,] isBlock = new bool[board.GetLength(0), board.GetLength(1)]; 
      List<int[]> blocks = new List<int[]>(); 
      List<int[]> toplayAnimation = new List<int[]>(); 


      for (int x = 0; x < board.GetLength(0); x++) 
      { 
       for (int y = 0; y < board.GetLength(1) - 1; y++) 
       { 
        if ((isBlock[x, y] == false) && (board[x, y + 1] == 0) && (board[x, y] != 0)) 
        { 

        } 
       } 
      } 

Wenn wir am Beispiel aussehen sollte das Ergebnis sein, dass das Board aktualisiert wird und eine Animation der Stücke gespielt unten fallen es sollte wie folgt aussehen:

int[,] example = new int[5,5] 
     { 
      { 0,0,0,0,0 }, 
      { 0,0,1,0,0 }, 
      { 0,2,2,0,0 }, 
      { 0,2,2,2,0 }, 
      { 1,2,2,3,4 } 

     }; 

Also im Grunde habe ich die Frage, welchen Ansatz schlage ich vor, wenn ich dieses Problem anwende? Ich dachte daran, zwei separate 2D-Arrays für Blöcke und Einzelstücke zu haben und diese in der Schleife zu vergleichen. Ich bin jetzt seit etwas mehr als zwei Wochen dran und ich konnte keine Hilfe in bereits existierenden Threads finden. Hoffe ich habe alles gut erklärt, danke im Voraus!

+0

Sie benötigen einen Block Klasse und eine Liste den Überblick über alle Eigenschaften zu halten. Die Block-Klasse enthält die Größe des Blocks, wo er sich auf der Tafel befindet, Orientierung, Farbe. – jdweng

+0

von curiousity, sah man auf diese http://farseerphysics.codeplex.com/? Werfen Sie einen Blick auf den Quellcode :) Ich denke, Sie haben bereits diesen Thread gefunden, der Ihnen vielleicht helfen kann oder nicht: http://gamedev.stackexchange.com/questions/318/what-are-some-known-2d -3d-Physik-Motoren-für-XNA – pix

+0

jdweng, Danke. Daran habe ich aus irgendeinem Grund nicht gedacht! pix, Danke. Ich werde die farseer physics Verbindung überprüfen. Es sieht so aus, als ob ich es verwenden könnte, anstatt den ganzen Code selbst zu schreiben :) – Quaz

Antwort

Verwandte Themen