2016-08-12 7 views
0

Was ist der beste/einfachste Weg, "TouchUp" mit dem GestureListener in libgdx zu erkennen. (In früheren Projekten habe ich den InputListener verwendet und das hatte TouchUp, aber kein Pan oder Fling).libgdx Touchup mit Gestenlistener

Alles, was ich jetzt tun muss, ist, meine MovingLeft- oder MovingRight-Booleans auf False zu setzen, sobald der Finger gehoben ist.

package com.moneylife.stashinvaders; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.input.GestureDetector; 
import com.badlogic.gdx.math.Vector2; 

public class Player { 
    Vector2 position; 
    Texture texture; 
    int speed = 500; 
    float deltaTime; 
    int screenWidth, screenHeight; 
    boolean MovingRight = false, MovingLeft = false; 


    public Player(int ScreenW, int ScreenH){ 
     Gdx.input.setInputProcessor(new GestureDetector(new MyGestureDetector())); 
     texture = new Texture("bazookaman.png"); 
     position = new Vector2(Gdx.graphics.getBackBufferWidth()/2 - texture.getWidth()/2, 0); 
     screenWidth = ScreenW; 
     screenHeight = ScreenH; 
    } 

    public void update(){ 
     deltaTime = Gdx.graphics.getDeltaTime(); 
     if (MovingRight){ 
      position.x += speed * deltaTime; 
     } 
     if (MovingLeft){ 
      position.x -= speed * deltaTime; 
     } 
    } 

    public void draw(SpriteBatch spriteBatch){ 
     spriteBatch.draw(texture, position.x, position.y); 
    } 


    public class MyGestureDetector implements GestureDetector.GestureListener { 
     @Override 
     public boolean touchDown(float x, float y, int pointer, int button) { 
      if (x > position.x) { 
       MovingRight = true; 
      } 
      if (x < position.x){ 
       MovingLeft = true; 
      } 
      return false; 
     } 

     @Override 
     public boolean tap(float x, float y, int count, int button) { 
      return false; 
     } 

     @Override 
     public boolean longPress(float x, float y) { 
      return false; 
     } 

     @Override 
     public boolean fling(float velocityX, float velocityY, int button) { 
      return false; 
     } 

     @Override 
     public boolean pan(float x, float y, float deltaX, float deltaY) { 
      return false; 
     } 

     @Override 
     public boolean panStop(float x, float y, int pointer, int button) { 
      MovingLeft = false; 
      MovingRight = false; 
      return false; 
     } 

     @Override 
     public boolean zoom(float initialDistance, float distance) { 
      return false; 
     } 

     @Override 
     public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { 
      return false; 
     } 

     @Override 
     public void pinchStop() { 

     } 

    } 
} 

Antwort

0

Dies war eine viel einfachere Möglichkeit für meine grundlegenden Bedürfnisse in diesem Projekt. Es Polling genannt anstatt GestureListener (oder inputprocessor) überhaupt:

if (Gdx.input.isTouched()) { 
      if (Gdx.input.getX() > position.x) { 
       position.x += speed * deltaTime; 
      } 
      if (Gdx.input.getX() < position.x) { 
       position.x -= speed * deltaTime; 
      } 
     } 

Works und Spielerbewegung ist seemless (außer wenn der Finger zu nahen Spieler geht, aber ich bin nur hier so keine Sorgen, dass das Experimentieren)

1

können Sie verwenden, um beide GestureDetector und InputProcessor Schnittstellen und steckte sie in eine InputMultiplexer, die in Gdx.input.setInputProcessor eingeführt wird.

+0

Hallo danke. Ich habe über diese Dinge nachgedacht, war mir aber nicht sicher, ob das nötig war, nur um die Nachbesserung zu bekommen. Von dem, was du mir erzählst, ist dies die beste Option, also werde ich jetzt darüber nachforschen. Nochmals vielen Dank – Ronny

+0

@Ronny Ich habe keine Ahnung, warum diese Gesten nicht in einer einzigen Schnittstelle kombiniert werden, aber es ist wirklich egal, Sie haben nur ein paar zusätzliche leere Implementierungsmethoden in Ihrem Code. – Madmenyo

+0

Ich war eigentlich auf der Suche nach Gdx.input.isTouched(), an die mich jemand im IRC freundlich erinnerte. Dann ist die Verwendung der Methoden getX() und getY() in meiner Situation hier eindeutig einfacher. Ich kann jetzt den gesamten GestureListener-Code löschen, da er in diesem Projekt nicht benötigt wird. Ich dachte nur, ich würde das hinzufügen, falls jemand mit ähnlichen Kopfschmerzen diese liest – Ronny

Verwandte Themen