2017-04-01 4 views
0

Sagen wir, ich habe einen Schauspieler foo und einen Schauspieler bar, die die größere Version des foo Schauspielers ist. Wie kann ich bar neben foo anzeigen, während foo angezapft wird und dann verschwinden lassen, wenn foo nicht mehr angezapft wird (irgendwie wie ein Tooltip)? Foo ist in einer stage2d-Tabelle. Wie kann ich eine größere, vollständigere Version des Schauspielers zeigen, während er angezapft wird?Größere Version von Schauspieler zeigen, während Schauspieler angezapft wird libgdx

grobe Vorstellung von dem, was ich will:

Actor foo = new Actor(); 
    foo.addListener(new ActorGestureListener() { 

     public void touchDown (InputEvent event, float x, float y, int pointer, int button) { 
      // show bar next to foo (like a tooltip) 
     } 

     public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
      // make bar dissapear 
     } 
    }); 

Code, die Art tut, was ich will: In diesem Fall toolTipCard ist der Schauspieler, den ich angezeigt werden soll, wenn ich eine der Saiten berühren von selectedDeck.

Stage collectionStage; 
List<String> selectedDeck; 
TestCard tooltipCard; 
Vector3 touch = new Vector3(); 

      selectedDeck.addListener(new ActorGestureListener() { 

       public void touchDown(InputEvent event, float x, float y, int count, int button) { 
        if (selectedDeck.getItems().size > 0) { 
         tooltipCard = new TestCard(game.cardFont, cardNameToCard.get(selectedDeck.getSelected())); 
         tooltipCard.setWidth(Gdx.graphics.getWidth()/(7 * scale)); 
         tooltipCard.setHeight(Gdx.graphics.getHeight()/(3.3f * scale)); 
         touch = viewport.unproject(touch.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
         tooltipCard.setPosition(touch.x - tooltipCard.getWidth(), touch.y - tooltipCard.getHeight()); 
         collectionStage.addActor(tooltipCard); 
        } 
       } 

       public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
        tooltipCard.remove(); 
       } 
      }); 
+0

Erstellen Sie Ihr eigenes Bild (foo), überschreiben Sie die Methode des Bildes und Zeichnungsleiste (Textur oder Label) mit der Verwendung von Flag. Ändern Sie den flachen Wert der touchDown-Methode. – Aryan

+0

Wäre es nicht eine bessere Idee, die Position des getappten Schauspielers ('foo') zu erhalten und dann den anderen Schauspieler (' bar') der Bühne zu dieser Position hinzuzufügen, übersetzt mit der Größe des getappten Schauspielers ('foo ')? – Andy

+0

Keine Notwendigkeit, einen anderen Akteur zu erstellen, nur ein Akteur foo, Bar ist nur ein Teil von foo, wie ein Datenelement von Ihrem Actor. – Aryan

Antwort

0

Wie in den Kommentaren beschrieben gibt es 2 Möglichkeiten:

  1. bearbeiten die Ziehverfahren eines Akteur (wenn Sie benötigen diese eine sehr einfache Tooltip Verwendung zeigen).

  2. Wenn Sie einen fortgeschritteneren Akteur zeigen möchten, der eigene Aktionen haben kann. Sie können die globalen Koordinaten des foo abrufen und einen Akteur direkt zu der Bühne hinzufügen, die Sie sichtbar/unsichtbar setzen (oder für ein schöneres Aussehen/Gefühl ein- und ausblenden).

Um die Koordinaten erhalten Sie verwenden können: localToStageCoordinates

Vector2 v = foo.localToStageCoordinates(new Vector2()); 

oder im Verhältnis zu seinem Zentrum:

Vector2 v = foo.localToStageCoordinates(new Vector2(foo.getWidth()/2,foo.getHeight()/2)); 

dann zum Beispiel verwenden: bar.addAction(Actions.fadeIn(0.5f)); und bar.addAction(Actions.fadeOut(0.5f));/den Tooltip verstecken zu zeigen,

Für Optimierungszwecke können Sie wiederverwenden Der Bar-Actor für alle foo-Instanzen auf dem Bildschirm und nur bei jedem Klick neu zuweisen. Es ist wahrscheinlich billiger als die Erstellung eines vollständigen Schauspielers für jeden von ihnen. Jedoch, wenn Sie es wahrscheinlich schaffen und zerstören Sie es auf Touch Down/Up ohne Probleme.

+0

Danke. Ich habe bereits implementiert, was ich wollte, indem ich die Position der Berührung erhalte, sie unprojiziert und der Bühne an dieser Position (auf TouchDown) "bar" hinzufüge und dann den Schauspieler von der Bühne auf touchUp entferne. Allerdings ist "foo" eigentlich eine "Liste" von "String" und ich möchte "bar" anzeigen, wenn ich auf die Saite klicke. Das Problem ist, dass wenn ich auf die Liste klicke, wo keine Saite ist, wird 'bar' angezeigt der ausgewählte 'String', also' bar' wird nicht genau dort erscheinen, wo er sollte. Wie könnte ich die Position des Strings bekommen? (localToStageCoordinates ist nur für Schauspieler) – Andy

+0

Ich sehe nicht, wie die Zeichenfolge ein Schauspieler ist. Meinst du Etikett? Bitte fügen Sie den tatsächlichen Code hinzu, den Sie verwenden, um mir eine bessere Idee zu geben, was Sie meinen. Das Hinzufügen eines Screenshots/einer Zeichnung könnte ebenfalls hilfreich sein. –

+0

Hinzugefügt den Code, den ich verwende.Ich denke, eine Lösung wäre, von Liste zu Liste

Verwandte Themen