Kurde, trochę ciężko jakoś to pełniej zaobrazować, ale spróbuję. Sprawa tyczy się biblioteki libgdx. Mam klasę InputManager implementującą InputProcessor. W ten sposób:
public class InputManager implements InputProcessor, Disposable {
public ArrayList<Integer> pointers = new ArrayList<Integer>();
public InputManager()
{
}
public Vector2 GetLastTouchDelta()
{
int lastTouchIndex = GetLastTouchIndex();
return new Vector2(Gdx.input.getDeltaX(lastTouchIndex),
Gdx.input.getDeltaY(lastTouchIndex));
}
public Vector2 GetLastTouchPosition()
{
int lastTouchIndex = GetLastTouchIndex();
return new Vector2(Gdx.input.getX(lastTouchIndex),
Gdx.input.getY(lastTouchIndex));
}
public boolean IsTouched()
{
return Gdx.input.isTouched();
}
public boolean IsJustTouched()
{
return Gdx.input.justTouched();
}
int GetLastTouchIndex()
{
if(pointers.size() == 0)
return -1;
else
return pointers.get(pointers.size() - 1);
}
@Override
public void dispose() {
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
pointers.add(pointer);
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
for(int i=0; i<pointers.size(); i++)
{
if(pointers.get(i) == pointer)
{
pointers.remove(i);
break;
}
}
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
}
Tę klasę przekazuję do biblioteki w następujacy sposób:
InputManager inputProcessor = new InputManager();
Gdx.input.setInputProcessor(inputProcessor);
I wywyołanie:
Vector2 touchPos = inputManager.GetLastTouchPosition();
Gdy naciśnięty zostanie ekran, wywołuje się metoda touchDown, w której dodaję do listy numer "tapnięcia". Problem leży w wywołaniu metody GetLastTouchPosition, a konkretniej GetLastTouchIndex, ponieważ mimo iż do listy tapnieć została dodana pozycja, to w GetLastTouchIndex wszystko jest zainicjalizowane domyślnymi wartościami, tj. lista jest pusta. Stąd zastanawiam się czy to jakiś magiczny mechanizm tracenia danych o którym nie wiem, czy po prostu biblioteka majstruje za bardzo w instancji klasy.