2014-01-29 15 views
5

Ich versuche ein einfaches Brettspiel mit libGDX zu erstellen. Nur dass Sie eine ungefähre Vorstellung davon haben, was ich vorhabe, stellen Sie sich Bejeweled vor (obwohl meine natürlich nicht so komplex ist).libGDX: Gitter für Brettspiel erstellen

Das Spiel beinhaltet ein Brett mit Zellen als Quadrate. Je nach Level hat dieses Gitter eine andere Anzahl von Zellen, wie 6x6 oder 8x8. Ich möchte auch eine nette Animation für die Position zweier benachbarter Zellen (wie in Bejeweled) einfügen. Natürlich müssen auch einige Tasten auf dem Bildschirm sein.

Meine Frage ist: Was ist der beste Weg, dies zu tun? Soll ich eine Bühne und dann Tische für das Gitter verwenden? Kann ich dann noch einfach eine Animation machen (mit der Universal Tween Engine)? Oder ist es besser, die Sprites einzeln zu zeichnen? Oder gibt es noch eine ganz andere Art, sich diesem zu nähern?

Vielen Dank für Ihre Antworten,

Cheers,

Tony

Antwort

5
Sprite square = new Sprite(new Texture("texture")); 

float squareWidth = camera.viewportWidth/squaresOnWidth; 
float squareHeight = camera.viewportHeight/squaresOnHeight; 
square.setWidth(squareWidth); 
square.setHeight(squareHeight); 
batch.begin(); ` 
for(int y = 0; y < squaresOnHeight; y++){ 
    for(int x = 0; x < squaresOnWidth; x++){ 
     square.setX(x * squareWidth); 
     square.setY(y * squareHeight); 
     square.draw(batch); 
    } 
} 
batch.end(); 

Dieser Ausgang ein Raster von Texturen darstellen soll, nicht getestet.

Wenn Sie glatte Animation erstellen möchten Sie auf jeden Fall in UniveralTweenEngine aussehen sollte, ist hier ein Demo von dem, was sie tun können: http://www.aurelienribon.com/universal-tween-engine/gwt/demo.html

Wenn Sie das Raster in Tasten statt wollen.

OrthoGraphicCamera camera = new OrthoGraphicCamera(); 
camera.setToOrtho(false, yourViewportWidth, yourViewportHeight); 
camera.translate(xPos, yPos); 
Stage stage = new Stage(your wanted stage width, your wanted stage height, false, batch); 
stage.setCamera(camera); 
for(int y = 0; y < buttonsOnHeight; y++){ 
    for(int x = 0; x < buttonsOnWidth; x++){ 
     stage.addActor(new TextButton("" + x + y * buttonsOnWidth, textButtonStyle); 
    } 
} 

Die machen

float buttonWidth = camera.viewportWidth/buttonsOnWidth; 
float buttonHeight = camera.viewportHeight/buttonsOnHeight; 
for(int y = 0; y < buttonsOnHeight; y++){ 
    for(int x = 0; x < buttonsOnWidth; x++){ 
     TextButton button = stage.getActors().get(x + y * buttonsOnWidth); 
     button.setX(x * buttonWidth); 
     button.setY(y * buttonHeight); 
     button.setWidth(buttonWidth); 
     button.setHeight(buttonHeight); 
    } 
} 

Dann die Bühne ziehen, beachten Sie, dass Sie jede Charge stoppen sollte, die derzeit läuft, weil Bühne seine eigene batch.begin() und batch.end() hat. Sie könnten Ihren Stapel nach stage.draw() erneut starten.

stage.act(delta); 
stage.draw(); 
+0

Alles klar, so dass Sie keine Bühne verwenden. Aber wie kann ich Knöpfe ohne Bühne hinzufügen? Oder ist es möglich, eine Bühne zu haben, die nur Teile des Bildschirms abdeckt? – tomet

+0

Antwort wurde bearbeitet, meinst du das? – thetheodor

+0

Vielen Dank für Ihre Mühe. Ich möchte sowohl ein Gitter aus Sprites als auch einige Buttons darunter haben. Also muss ich beides irgendwie rendern. – tomet

0

Um ein Raster haben Sie könnten und Kamera verwenden soll:

OrthographicCamera cam = new OrthographicCamera(8,8); 

Sie sagen, die Kamera zu haben, ein Ansichtsfenster von 8 x 8 und y. Der Kamera (0,0) Punkt befindet sich in der Mitte des Bildschirms.

es haben an der linken unteren Sie seine Position zu

cam.translate(camWidth/2, camHeight/2); 

festlegen müssen Jetzt können Sie Ihre sqares bei sqare.setX(0) für sqares in der unteren Zeile hinzufügen oder sqare.setY(3) es von links auf der 4rd Zeile hinzufügen nach rechts. Für die Animationen könnten Sie auch Actions verwenden, mit denen Sie einem Schauspieler verschiedene Bewegungen hinzufügen und ihn im Laufe der Zeit ausführen lassen können. Beispiel:

actor.addAction(Actions.parallel(Actions.moveTo(float x, float y, float duration), Actions.rotateTo(float rotation, float duration))); 

Mit diesem Codebeispiel Sie Ihre Schauspieler erzählen von seiner Position zu (x,y) in duration Sekunden zu bewegen, und während er in diese Position bewegt dreht er sich von seinem aktuellen Dreh rotation in duration Sekunden. Hoffe, das hilft

+0

es gibt keinen Methodenaufruf setPosition, es heißt translate und macht dasselbe. Außerdem kann man setToOrtho() aufrufen, um die Kamera manuell auf 0, 0 zu setzen; – thetheodor

+0

Die Position der Kamera ist 0/0 Standardmäßig ist das nur Pseudocode, damit die Leute wissen, wie es funktioniert.Ich erinnere mich nicht an genaue Methodennamen, Eclipse hilft mir sehr: P Danke für deinen Kommentar, ich werde meine Antwort bearbeiten! – Springrbua

+0

Eclipse tut wirklich viel helfen, Code vor dem Posten testen!: D – thetheodor