问题
touch area http://imageshack.us/a/img836/2909/swipe1.png
In the green area the user can swipe up, right, down, left. How can I now get e.g. swipe Up? or swipe Down? or swipe right or swipe left? e.g. how to get a String -> input = getSwiped(); -> input is then Up, or right, or down, or left
And the user can touch two buttons. 1 or 2. 1 is for duck and 2 is for jump.
I want to check this inputs at the same time. The user can touch and also swipe Up at the same moment.
I know there is a GestureDetector. I looked at the code, but no clue how can I use the swipe part.
I know a little bit how to check the buttons. The problem is only here -> How to check the inputs at the same time and how get Swipe Up, or Swipe right etc.
I searched an found how to check Multitouching:
for (int i = 0; i < 10; i++) {
if (Gdx.input.isTouched(i) == false) continue;
float x = Gdx.input.getX(i);
float y = Gdx.graphics.getHeight() - Gdx.input.getY(i) - 1;
//...
}
回答1:
This explain a very good way to implement a system to detect the direction of a swipe. I'll post it here because the article may be lost in the future:
Create a class name SimpleDirectionGestureDetector
public class SimpleDirectionGestureDetector extends GestureDetector {
public interface DirectionListener {
void onLeft();
void onRight();
void onUp();
void onDown();
}
public SimpleDirectionGestureDetector(DirectionListener directionListener) {
super(new DirectionGestureListener(directionListener));
}
private static class DirectionGestureListener extends GestureAdapter{
DirectionListener directionListener;
public DirectionGestureListener(DirectionListener directionListener){
this.directionListener = directionListener;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(Math.abs(velocityX)>Math.abs(velocityY)){
if(velocityX>0){
directionListener.onRight();
}else{
directionListener.onLeft();
}
}else{
if(velocityY>0){
directionListener.onDown();
}else{
directionListener.onUp();
}
}
return super.fling(velocityX, velocityY, button);
}
}
}
On the create() function of the LibGdx application, put this to activate gesture handling for your game:
Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() {
@Override
public void onUp() {
}
@Override
public void onRight() {
}
@Override
public void onLeft() {
}
@Override
public void onDown() {
}
}));
回答2:
i made a simple class to identify the direction of a swipe
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.input.GestureDetector;
import com.badlogic.gdx.math.Vector2;
/** * Created by ROHIT on 3/11/2018. */
public class swipelistener {
public boolean isswipright(){
if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()>0)
return true;
return false;
}
public boolean isswipleft(){
if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()<0)
return true;
return false;
}
public boolean isswipup(){
if(Gdx.input.isTouched()&&Gdx.input.getDeltaY()>0)
return true;
return false;
}
public boolean isswipdown(){
if(Gdx.input.isTouched()&&Gdx.input.getDeltaX()<0)
return true;
return false;
}
}
All the above code uses the libGDX Gdx.input.getDeltaX()
and Gdx.input.getDeltaY()
to get the relative change in direction.
Hope this will help.
来源:https://stackoverflow.com/questions/15185799/libgdx-get-swipe-up-or-swipe-right-etc