2016-07-15 5 views
0

マウスをクリックしたポイントへの移動を実装しようとしています。x軸の動きに左右されます

しかし、私はミラーリングされた振る舞いでもX軸に問題があります。 上をクリックすると、下に移動します。下をクリックすると、上に移動します。ここ

私は赤い十字を有する位置に画面をクリック例えば原位置 enter image description here

するためのものです。 enter image description here

しかし、矢印が示すように下に移動します。

問題が何ですか?それは動きベクトルと私は推測する何かのようです。

public class Player { 

    private static final float PLAYER_CIRCLE_RADIUS = 24f; 
    private static final float MOVEMENT_SPEED = 200f; 
    private final Circle playerCircle; 

    private Vector2 direction = new Vector2(); 
    private Vector2 position; 
    private Vector2 velocity = new Vector2(); 
    private Vector2 movement = new Vector2(); 
    private Vector2 mouseClick = new Vector2(); 

    public Player(float x, float y) { 
     position = new Vector2(x, y); 
     playerCircle = new Circle(x, y, PLAYER_CIRCLE_RADIUS); 
    } 

    public void draw(ShapeRenderer shapeRenderer) { 
     shapeRenderer.circle(position.x, position.y, playerCircle.radius); 
    } 

    public void update(float delta) { 
     movement.set(velocity).scl(delta); 
     if (position.dst2(mouseClick) > movement.len2()) { position.add(movement); } 
     else { position.set(mouseClick); } 
    } 

    public void setDirection(float x, float y) { 
     mouseClick.set(x, y); 
     direction.set(mouseClick).sub(position).nor(); 
     velocity.set(direction).scl(MOVEMENT_SPEED); 
    } 

    public Vector2 getDirection() { 
     return direction; 
    } 

    public Circle getPlayerCircle() { 
     return playerCircle; 
    } 

    public Vector2 getMouseClick() { 
     return mouseClick; 
    } 
} 


public class GameScreen extends ScreenAdapter { 

    private static final float WORLD_WIDTH = 640; 
    private static final float WORLD_HEIGHT = 480; 

    private ShapeRenderer shapeRenderer; 
    private Viewport viewport; 
    private Camera camera; 

    private Player player; 
    private Destination dest; 

    @Override 
    public void render(float delta) { 
     clearScreen(); 
     update(delta); 
     shapeRenderer.setProjectionMatrix(camera.projection); 
     shapeRenderer.setTransformMatrix(camera.view); 
     shapeRenderer.begin(ShapeRenderer.ShapeType.Line); 

     dest.draw(shapeRenderer); 
     player.draw(shapeRenderer); 

     shapeRenderer.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height); 
    } 

    @Override 
    public void show() { 
     camera = new OrthographicCamera(); 
     camera.position.set(WORLD_WIDTH/2, WORLD_HEIGHT/2, 0); 
     viewport = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT, camera); 
     shapeRenderer = new ShapeRenderer(); 

     player = new Player(WORLD_WIDTH/2, WORLD_HEIGHT/2); 
     dest = new Destination(); 

     Gdx.input.setInputProcessor(new InputAdapter() { 

      @Override 
      public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
       dest.setPosition(screenX, screenY); 
       camera.unproject(new Vector3(screenX, screenY, 0)); 
       player.setDirection(screenX, screenY); 
       return true; 
      } 

     }); 
    } 

    private void clearScreen() { 
     Gdx.gl.glClearColor(Color.BLACK.r, Color.BLACK.g, Color.BLACK.b, Color.BLACK.a); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    } 

    private void update(float delta) { 
     player.update(delta); 
    } 

} 

答えて

2

あなたの記述は、実際にはY軸に反映されます。 この動作の理由は、原点が左下隅にY軸が上を向くように描画行列が設定されているが、guiの原点が左上隅にY軸が下を指しています。だから、マウスの位置を取得するときは、次のような何かをする必要があります:

これは効果的にあなたの描画スペースにマウスの位置を変換します。

+0

です。私はUIビューを上から下に忘れてしまった。私は生の計算の代わりにベクトル乗算を加えるべきだと思う。 – lapots

関連する問題