我是 LibGdx 的新手,输入处理有问题。
每当触球被按下时,我的播放器都需要发射子弹。但似乎这个方法只被调用一次......
然后用户必须再次单击以射击另一颗子弹。
我想在点击关闭时总是射击子弹......
有没有办法处理这个用例?
我是 LibGdx 的新手,输入处理有问题。
每当触球被按下时,我的播放器都需要发射子弹。但似乎这个方法只被调用一次......
然后用户必须再次单击以射击另一颗子弹。
我想在点击关闭时总是射击子弹......
有没有办法处理这个用例?
查看触摸输入上的“轮询”,而不是获取输入事件。因此,在您的渲染或更新方法中,使用如下内容:
boolean activeTouch = false;
if (Gdx.input.isTouched(0)) {
if (activeTouch) {
// continuing a touch ...
} else {
// starting a new touch ..
activeTouch = true;
}
} else {
activeTouch = false;
}
我已经成功地解决了这个问题,没有汇集概念。
我有自定义的 InputProccesor,int 我使用了类似的逻辑,比如提到的 PT。我 touchDown 我启动了发射子弹的线程并进行一些计算,因为我从 Renderer 类中访问了一些我必须使用的方法
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
// process the result, e.g. add it to an Array<Result> field of the ApplicationListener.
shootBullet(screenX, screenY);
}
});
避免OpenGL上下文异常。
在 touchUp 方法中,我取消了拍摄线程。
Tnx 的想法!
我使用了连续输入句柄
这是通过为你的演员设置一个标志来完成的,例如:
public class Player{
private boolean firing = false;
private final Texture texture = new Texture(Gdx.files.internal("data/player.png"));
public void updateFiring(){
if (firing){
// Firing code here
Gdx.app.log(TAG, "Firing bullets");
}
}
public void setFiring(boolean f){
this.firing = f;
}
Texture getTexture(){
return this.texture;
}
}
现在在我的应用程序类中实现 InputProcessor
@Override
public void create() {
player= new Player();
batch = new SpriteBatch();
sprite = new Sprite(player.getTexture());
Gdx.input.setInputProcessor(this);
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
sprite.draw(batch);
// Update the firing state of the player
enemyJet.updateFiring();
batch.end();
}
@Override
public boolean keyDown(int keycode) {
switch (keycode){
case Input.Keys.SPACE:
Gdx.app.log(TAG, "Start firing");
player.setFiring(true);
}
return true;
}
@Override
public boolean keyUp(int keycode) {
switch (keycode){
case Input.Keys.SPACE:
Gdx.app.log(TAG, "Stop firing");
player.setFiring(false);
}
return true;
}
完毕