У меня есть эта игра, которая следует за каждым входом, который игрок делает в игре. Я определил конкретные действия для touchDragged, touchDown и touchUp. Единственная проблема заключается в том, что всякий раз, когда игрок начинает перемещать мышь/палец, а затем останавливается, но все же держит свою мышь/палец, игра не поймает этот вход, и в результате игра не работает должным образом.Процессор ввода Libgdx не работает должным образом
Есть ли способ обработки ввода в случае, если пользователь перетаскивает палец/мышь, а затем останавливается, не поднимая палец?
Вот его мой InputProcessor:
package com.david.helpers;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.david.objects.Acorn;
public class InputHandler implements InputProcessor{
private Vector2 target;
private Vector3 temp;
private OrthographicCamera camera;
private Array<Acorn> acorns;
private boolean isAiming = false;
public InputHandler(Array<Acorn> acorns, OrthographicCamera camera) {
this.camera = camera;
this.acorns = acorns;
target = new Vector2();
temp = new Vector3();
}
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
isAiming = true;
}
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
acorns.peek().getBody().setLinearVelocity(target.cpy().scl(25));
isAiming = false;
}
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
}
return true;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
public Vector2 getTarget() {
return this.target;
}
public boolean isAiming() {
return this.isAiming;
}
}
Моя проблема за это довольно просто - у меня есть снарядом, что до его запуска, пользователь может перетащить мышь/палец и выбрать, куда стрелять. Теперь код рисует траекторию в соответствии с пользовательским прикосновением и отлично работает. Единственная проблема заключается в том, что всякий раз, когда пользователь перестает перемещать свой палец, но все еще удерживает его, программа не рисует траекторию. В моем классе Renderer я проверяю, истинна ли переменная isAiming из InputProcessor. Если это так, он рисует желаемую траекторию. Как я вижу, это похоже на то, что InputProcessor не получает данные касания в этот конкретный момент, когда пользователь начинает перемещаться по его пальцу, а затем останавливает движение, но все еще удерживает его.
Это очень раздражает, и я был бы рад, если бы вы, ребята, могли бы помочь мне здесь :)
Хорошо, спасибо. Я сделаю снимок. –