我已经研究了许多不同的方式来处理android的输入,但我真的无法绕过它。我想知道我提供给你的代码,有人可以向我解释如何将任一方法集成到我的代码中吗?为什么这样做是合适的?Libgdx - 输入处理[Android]。听众没有听到什么?
首先,我将解释我的意图,并向您展示相关代码的快速概述。我想要移动我的角色,左转,右转并跳转(暂时)。这是我的第一个游戏,它是一个没有自动跳跃的肖像(与涂鸦Jump有点相似的上下文)。我得到我的关卡随机生成,它呈现所有对象。现在我想添加输入,但主要困惑是我在哪里把代码放在我的代码中?
首先,我有一个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);
}
DynamicGameObject.java
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;
}
}
然后,我有游戏的主要对象,这将是莫对我将实施的行动进行评估。在这堂课我会把任何输入处理?
Ruben。 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;
}
然后,我有世界级的,将更新游戏内的一切,相关的更新方法会在哪里鲁本得到更新,如下所示:
private void updateRuben (float deltaTime, float accelX) {
if (ruben.getState() != Ruben.RUBEN_STATE_IDLE && ruben.position.y <= 0.5f) ruben.hitPlatform();
if (ruben.getState() != Ruben.RUBEN_STATE_IDLE) ruben.getVelocity().x = -accelX/10 * Ruben.RUBEN_MOVE_VELOCITY;
// clamp the velocity to the maximum, x-axis only
if (Math.abs(ruben.getVelocity().x) > Ruben.RUBEN_MAX_VELOCITY) {
ruben.getVelocity().x = Math.signum(ruben.getVelocity().x) * Ruben.RUBEN_MAX_VELOCITY;
}
// clamp the velocity to 0 if it's < 1, and set the state to standing
if (Math.abs(ruben.getVelocity().x) < 1) {
ruben.getVelocity().x = 0;
if (Ruben.isGrounded()) {
Ruben.setState(Ruben.RUBEN_STATE_IDLE);
}
}
ruben.getVelocity().scl(deltaTime);
ruben.update(deltaTime);
heightSoFar = Math.max(ruben.position.y, heightSoFar);
}
所以现在我希望你能得到我正在处理的演员的一般背景,我会在哪里做一个手势监听器回调?我把它放入ruben中吗?还是我完全创建了一个单独的课程?我尝试了很多不同的方式,而且我并没有真正得到任何地方,这让人感到沮丧。输入处理程序在哪里进行手势?我试图把回调的姿态探测器用新的姿态听众鲁
(GestureDetector gd = new GestureDetector(new GestureHandler(this));
的构造函数中
,然后用一个变量来表示一扔已经指向上方的屏幕上时,布尔触发是真实的,设置ruben的状态跳转并改变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();
}
}
不幸的是,这不是我要找的。我知道要实施什么。我只是不知道在代码中实现它的位置,我提到了我已经在上下文中提出了一个尝试,希望获得关于是否有特定方法来实现GestureListener的建议或信息。 – BIW
好吧,我认为输入未被识别。如果你初始化了重要的东西,你的主要类如何?什么是基类? – Quallenmann
感谢您的及时回复,我已经调整了问题。 – BIW