2014-10-10 5 views
2

У меня есть эта игра, которая следует за каждым входом, который игрок делает в игре. Я определил конкретные действия для 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 не получает данные касания в этот конкретный момент, когда пользователь начинает перемещаться по его пальцу, а затем останавливает движение, но все еще удерживает его.

Это очень раздражает, и я был бы рад, если бы вы, ребята, могли бы помочь мне здесь :)

ответ

1

Для меня касается в Android устройства часто глючит. Для чего вы хотите, вместо этого: Input Polling:

//In your render method. 
if(Gdx.input.isTouched()){ 
    camera.unproject(temp.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    if(!temp.isZero() && temp != null) { 
     target.set(temp.x, temp.y); 
     target.sub(acorns.peek().getBody().getPosition()); 
     target.nor(); 
     isAiming = true; 
    } 
}else{ 
    if(isAiming){ 
     camera.unproject(temp.set(Gdx.input.getX(), Gdx.input.getY(), 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; 
     } 
    } 
} 
+0

Хорошо, спасибо. Я сделаю снимок. –

Смежные вопросы