我是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对象适用于所有项目?我非常感谢你的回答!
答案 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;
}
...