私はLibGdxを初めて使用し、入力処理に問題があります。
タッチダウンするたびに、プレーヤーは弾丸を発射する必要があります。しかし、このメソッドは一度だけ呼び出されるようです...
そして、ユーザーは別の弾丸を撃つためにもう一度クリックする必要があります。
クリックダウン中は常に弾丸を発射したい...
このユースケースを処理する方法はありますか?
私はLibGdxを初めて使用し、入力処理に問題があります。
タッチダウンするたびに、プレーヤーは弾丸を発射する必要があります。しかし、このメソッドは一度だけ呼び出されるようです...
そして、ユーザーは別の弾丸を撃つためにもう一度クリックする必要があります。
クリックダウン中は常に弾丸を発射したい...
このユースケースを処理する方法はありますか?
入力イベントを取得する代わりに、タッチ入力の「ポーリング」を調べてください。したがって、renderまたはupdateメソッドでは、次のようなものを使用します。
boolean activeTouch = false;
if (Gdx.input.isTouched(0)) {
if (activeTouch) {
// continuing a touch ...
} else {
// starting a new touch ..
activeTouch = true;
}
} else {
activeTouch = false;
}
コンセプトをプールすることなく、これを解決することに成功しました。
私はカスタムInputProccesorを持っていますが、PTのような同様のロジックを使用しました。タッチダウン私は弾丸を発射するスレッドを開始し、いくつかの計算を行います。これは、使用するレンダラークラスのいくつかのメソッドにアクセスするためです。
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;
}
}
今私のApplicationクラスで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;
}
終わり