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() {
}
}
}
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
@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
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