2016-03-29 9 views
2

Ich habe ein Problem mit meiner Textur. Die Tabelle funktioniert perfekt, aber wenn ich versuche, eine Textur hinzuzufügen, stimmt Android Studio nicht mit mir überein.LibGDX: Kann keine Textur in meiner Tabelle hinzufügen

private Sprite tiger2; 

.

batch.begin(); 
    batch.setColor(tiger2.getColor()); 
    batch.draw(
      tiger2, 
      Gdx.graphics.getWidth()/2f - tiger2.getRegionWidth()/2f, 
      Gdx.graphics.getHeight()/2f - tiger2.getRegionHeight()/2f, 
      tiger2.getRegionWidth(), 
      tiger2.getRegionHeight() 

    ); 
    batch.end(); 

.

tiger2 = new Sprite(new Texture("tiger2.png")); 

.

Ich weiß nicht, ob dies ist, wie ich es schreiben sollte:

table.add(tiger2); 

ich diesen Fehler: Kann Methode nicht lösen ‚add (com.badlogic.gdx.graphics.g2d.Sprite)‘

table.add(**tiger2**); 

Antwort

3

Sie versuchen, eine Sprite zu der Tabelle hinzuzufügen kein Texture und das ist der Hauptgrund, warum Sie Probleme haben. Es ist im Grunde das gleiche wie int i = "Hello World" zu tun, die einen Fehler wie incompatible types ergeben würde. Mit anderen Worten, ein Integer Container kann keinen String halten.

Wenn Sie mit der Maus über die Linie fahren, sehen Sie, dass table.add einen Schauspieler erwartet. Wenn Sie zu der Definition von Sprite gehen würden Sie bemerken, dass dies Actor in keiner Weise erweitert. Also Actor a = new Sprite() führt zu dem gleichen Fehler wie oben, können Sie nicht eine Sprite object in eine Actor container setzen. Dies sind die grundlegenden Grundlagen der Programmierung.

Also was sind kompatible Akteure? Alles, was Schauspieler wie Label, TextButton, Table, ScrollPane, Window, Dialog etc. erbt. Du kannst auch Action selbst erweitern und deinen eigenen Actor erstellen, aber da du damit zu kämpfen hast, solltest du damit warten.

Die einfachste Lösung ist die Verwendung scene2d.ui.Image. Wenn Sie diese Klasse überprüfen, sehen Sie, dass sie sich von Widget erstreckt, und wenn Sie Widget inspizieren, sehen Sie, dass es sich von Actor erstreckt und folglich ist Bild ein Schauspieler, da Sie ein Kind Ihrer Mutter und Ihrer Mutter Ihrer Großmutter sind.

Wenn Sie überprüfen, was der Image Konstruktor nimmt dann werden Sie die einfachste Sache zu tun ist, bemerken einen SpriteDrawable zu schaffen, da Bild ein Sprite wie table.add dauert nicht nehmen keinen entweder Sprite. SpriteDrawable nimmt ein Sprite und ist ein Drawable und das ist kompatibel mit dem Konstruktor Image.

Image image = new Image(new SpriteDrawable(mySprite)); 
table.add(image); 

Bild nimmt eine zu Textur so, wenn Sie nicht tun Phantasie Sprite Sachen mit Ihrem Sprit können Sie einfach das Bild mit einem als auch Texture erstellen.Sie können dies in Ihrer IDE sehen, indem Sie new Image( eingeben und intellisense wird Ihnen die kompatiblen Konstruktoren mitteilen.

Versuchen Sie, diese Typen zu verstehen und verwenden Sie Ihre IDE und die Dokumentation, um herauszufinden, was Sie verwenden können. Mit Android Studio können Sie mit der rechten Maustaste auf eine Klasse klicken und goto -> declaration aufrufen und die betreffende Klasse sehen. Andere IDEs haben äquivalente Methoden, es sei denn, Sie verwenden so etwas wie Notepad.

+0

ja, aber Sie können das Bild mit einer Textur, keine Notwendigkeit von Sprites erstellen - neues Bild (Textur); –

+1

@YasenBagalev Ich erwähne das. Aber wenn Sie den Zustand des Sprites beibehalten möchten, der geändert werden kann, dann können Sie das 'SpriteDrawable' hinzufügen – Madmenyo

+0

Entschuldigung, habe es nicht gesehen :) –

2

die Tabelle Angenommen ist eine Scene2D Tabelle:

eine Textur nicht Schauspieler sind und nicht zu einer Tabelle hinzugefügt werden. Um dies zu beheben, können Sie einem Bild die Textur hinzufügen (ein Darsteller mit einer Textur). Es würde wie folgt aussehen:

Image tiger2Image = new Image(new Texture("tiger2.png")); 
table.add(tiger2Image); 
Verwandte Themen