如何使用Libgdx手势探测器

时间:2015-01-29 00:59:41

标签: libgdx gesturedetector

我是Libgdx的新手,阻止我继续学习Libgdx的一个方面就是我不知道如何使用GestureListener。如果您在此链接LibGdx: Utilizing a Gesture Listener中看到相同的疑问,那么用户似乎有同样的疑问,但它对我没什么帮助。所以我的问题是:如何使用我自己的GestureListener类来处理我的播放器动画?我想使用平移功能使其跳跃,但我不知道如何将我的播放器对象放入方法中。如果你看到我的手势探测器类:

public class GestureHandler implements GestureListener {
// Main Game class
private ClimbUp mainGame;

public GestureHandler(ClimbUp game) {
    this.mainGame = game;
}

@Override
public boolean touchDown(float x, float y, int pointer, int button) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean tap(float x, float y, int count, int button) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean longPress(float x, float y) {
    // TODO Auto-generated method stub
    return false;
}

...

然后我按照他们告诉用户要做的事情:在主要课程中我通过了以下说明:

Gdx.input.setInputProcessor(new GestureDetector(new GestureHandler(this)));

现在在我的闪屏中,我不知道如何使用。如何使我的GestureHandler对象适用于所有项目?我非常感谢你的回答!

1 个答案:

答案 0 :(得分:0)

所以,你有一些你需要GestureListener"服务" - 您希望在发生某些手势事件时收到通知,并且您希望获得手势属性的信息。

然后,就像你一样,让你的类实现GestureListener接口。

之后你的IDE(Eclipse或Android Studio或其他东西)会抱怨你没有实现所有的GestureListener方法,但它也可以为你做到这一点。如果您(在eclipse中)将代码中的错误悬停在IDE中,则会为您创建缺少的方法。

我会说你正在迈出这一步。但是现在你的方法必须做一些有用的事情。就像,如果你想在玩家点击屏幕时做某事,那么在该方法中添加你的代码。做点什么。在GestureListener方法中,您可以获得一些信息,如x& amp; y坐标,按钮(左,中,右)等等。

因此,当您使用在您的类中创建的实现G.L.接口的对象调用setInputProcessor时,libGDX将知道在某些事件发生时调用您的方法。

IDE生成的每个方法都有" todo"标记 - 您需要放置代码的地方。代码将处理该事件,移动您的太空飞船,发射子弹或任何东西。你不必为每个事件做一些事情,但只针对你感兴趣的人。你可以把其他事情留空,但是你的班级必须拥有它们。

以下是一些例子:

// importing interface
import com.badlogic.gdx.input.GestureDetector.GestureListener;

// defining my class that implements that interface
public class TouchController implements GestureListener{

// constructor - just storing objects passed to it.
    public TouchController(Playground pg, Army army, Hud hud){
        super();
        this.pg = pg;
        this.army = army;
        this.hud = hud;
        initialZoom = pg.zoom;
    }

// Adding some action to touchDown method - I'm just calling my hud object's method and passing coords I get
    @Override
    public boolean touchDown(float x, float y, int pointer, int button) {
        hud.pressedAt(x, pg.camera.viewportHeight-y); // opposite Y axis
        // TODO Auto-generated method stub
        return false;
    }

// Similar thing. I unproject coords I get.
    @Override
    public boolean tap(float x, float y, int count, int button) {
        if (!hud.buttonPressed){
            Vector3 touchPos = new Vector3();
            touchPos.set(x, y, 0);
            pg.camera.unproject(touchPos);
            army.add(touchPos.x, touchPos.y, SoldierSide.RED);
        }else hud.released();
        return false;
    }

// Again similar stuff, but this pan methods is getting also delta value (difference from last reading x and y values) which can be useful
    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        if (hud.aimDrag) hud.aimDragged((int)deltaX, (int)deltaY);
        else if (hud.sliderDrag) hud.sliderDragged((int)deltaX, (int)deltaY);
        else if (!hud.buttonPressed) pg.panned((int)deltaX, (int)deltaY);
        return false;
    }

...