Java Libgdx-输入处理[Android]。我对听众没有什么了解?
我已经研究了很多不同的方法来处理android的输入,但我真的无法理解。我想知道我为您提供的代码,有人能解释一下我如何将这两种方法集成到我的代码中吗?为什么这样做是恰当的 首先,我将解释我的意图,并向您简要介绍相关代码。我想移动我的角色,向左,向右和跳跃(暂时)。这是我的第一个游戏,它是一个没有自动跳跃的肖像(在渲染方面与涂鸦跳跃有点类似)游戏。我的关卡是随机生成的,它渲染所有对象。现在我想添加输入,但主要的困惑是我应该把代码放在哪里 首先,我有一个Java Libgdx-输入处理[Android]。我对听众没有什么了解?,java,android,input,libgdx,gesture,Java,Android,Input,Libgdx,Gesture,我已经研究了很多不同的方法来处理android的输入,但我真的无法理解。我想知道我为您提供的代码,有人能解释一下我如何将这两种方法集成到我的代码中吗?为什么这样做是恰当的 首先,我将解释我的意图,并向您简要介绍相关代码。我想移动我的角色,向左,向右和跳跃(暂时)。这是我的第一个游戏,它是一个没有自动跳跃的肖像(在渲染方面与涂鸦跳跃有点类似)游戏。我的关卡是随机生成的,它渲染所有对象。现在我想添加输入,但主要的困惑是我应该把代码放在哪里 首先,我有一个GameObject类和一个子类Dynamic
GameObject
类和一个子类DynamicGameObject
,这是世界上所有对象(平台、电源、硬币、玩家、敌人等)的super
类
GameObject.java
public class GameObject {
public final Vector2 position;
public final Rectangle bounds;
public GameObject (float x, float y, float width, float height) {
this.position = new Vector2(x, y);
this.bounds = new Rectangle(x - width / 2, y - height / 2, width, height);
}
public class DynamicGameObject extends GameObject {
protected static Vector2 velocity;
public final Vector2 accel;
public DynamicGameObject (float x, float y, float width, float height) {
super(x, y, width, height);
setVelocity(new Vector2());
accel = new Vector2();
}
public Vector2 getVelocity() {
return velocity;
}
public void setVelocity(Vector2 velocity) {
DynamicGameObject.velocity = velocity;
}
}
DynamicGameObject.java
public class GameObject {
public final Vector2 position;
public final Rectangle bounds;
public GameObject (float x, float y, float width, float height) {
this.position = new Vector2(x, y);
this.bounds = new Rectangle(x - width / 2, y - height / 2, width, height);
}
public class DynamicGameObject extends GameObject {
protected static Vector2 velocity;
public final Vector2 accel;
public DynamicGameObject (float x, float y, float width, float height) {
super(x, y, width, height);
setVelocity(new Vector2());
accel = new Vector2();
}
public Vector2 getVelocity() {
return velocity;
}
public void setVelocity(Vector2 velocity) {
DynamicGameObject.velocity = velocity;
}
}
然后我有一个主要的游戏对象,在这个对象中,我将执行一些动作。在这门课上,我会进行任何输入处理吗
鲁本。java[相关代码]
public Ruben (float x, float y) {
super(x, y, RUBEN_WIDTH, RUBEN_HEIGHT);
state = RUBEN_STATE_IDLE;
stateTime = 0;
grounded = true;
facingRight = true;
}
public void update (float deltaTime) {
//getVelocity().add(World.gravity.x * deltaTime, World.gravity.y * deltaTime);
position.add(velocity.x * deltaTime, velocity.y * deltaTime);
bounds.x = position.x - bounds.width / 2;
bounds.y = position.y - bounds.height / 2;
if (position.x < 0) position.x = World.WORLD_WIDTH;
if (position.x > World.WORLD_WIDTH) position.x = 0;
stateTime += deltaTime;
}
然后,使用一个变量来指示屏幕上的投掷已经被指向上方,当布尔触发器为真时,将鲁本的状态设置为跳跃,并改变y轴上的速度。它仍然不起作用。有人能帮忙吗
如果你还需要什么,请告诉我
主要游戏类
public class GameView extends Game {
// used by all screens
public SpriteBatch batcher;
@Override
public void create () {
batcher = new SpriteBatch();
Settings.load();
Assets.loadBackgrounds();
Assets.loadItems();
Assets.loadRuben();
setScreen(new MainMenuScreen(this));
}
@Override
public void render() {
super.render();
}
}
如果您想使用
InputAdapter
,如libGdx中的GestureDetector
,则必须对其进行设置,不知道是否进行了设置,否则将不会从GestureDetector
调用任何方法。希望这是主要问题
此外,如果您想使用多个InputAdapter,则必须使用输入多路复用器
,尤其是如果您还想使用用于GUI的Stage
编辑:
我用屏幕实现它的首选方法是
MainMenuScreen extends Screen实现GestureDetector.GestureListener
和show()
方法Gdx.input.setInputProcessor(新的GestureDetector(this))代码>然后,您还可以通过这些方法轻松访问要控制的对象。不幸的是,这不是我想要的。我知道该实施什么。我只是不知道在我的代码中应该在哪里实现它,我提到了我在问题中已经做过的一次尝试,希望获得关于是否有实现GestureListener的具体方法的建议或信息。好的,我认为输入没有被识别。在初始化重要的东西时,你的主类看起来怎么样?什么是基类?感谢您的及时回复,我已经调整了问题。您是指继承所有内容的类还是更新主游戏的类?我使用Screen
实现基类的首选方法是MainMenuScreen Extendes Screen implements GestureDetector.GestureListener
和show()
methodGdx.input.setInputProcessor(新的GestureDetector(this))代码>然后您还可以通过这些方法轻松访问要控制的对象。
Gdx.input.setInputProcessor(new GestureDetector(new GestureHandler(this)));
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(stage);
inputMultiplexer.addProcessor(new GestureDetector(new GestureHandler(this)));
Gdx.input.setInputProcessor(inputMultiplexer);