2016-06-20 6 views
-1

テクスチャ(画像)をドラッグしてマウスカーソルの上に置くことなく、どのようにドラッグすることができますか?テクスチャをドラッグする(ジャンプなし)

テクスチャをクリックすると、何も起こりません。ドラッグすると、マウスカーソルが(テクスチャのエッジを基準にして)所定の位置に留まる必要があります。

例:https://s31.postimg.org/ojapwbj6j/Untitled_1.jpg

SpriteBatch batch; 
Texture texture; 
OrthographicCamera camera; 
Vector3 spritePosition = new Vector3(); 

float offsetX, offsetY; 
Vector3 input; 

@Override 
public void create() { 

    batch = new SpriteBatch(); 
    texture = new Texture("badlogic.jpg"); 
    camera = new OrthographicCamera(); 
    camera.setToOrtho(false); 

} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    batch.draw(texture, spritePosition.x, spritePosition.y); 
    batch.end(); 

    if (Gdx.input.justTouched()){ 

      int x1 = Gdx.input.getX(); 
      int y1 = Gdx.input.getY(); 
      input = new Vector3(x1, y1, 0); 
      camera.unproject(input); 

      offsetX = x1 - spritePosition.x; 
      offsetY = y1 - spritePosition.y; 

    } 

    if (Gdx.input.isTouched()) { 

     spritePosition.set(Gdx.input.getX() - offsetX, Gdx.input.getY() - offsetY, 0); 

    } 

} 

答えて

0

をあなたがうまく自分のイメージを基準にしたマウス位置のオフセット、およびそれよりもむしろ、あなたがでやっているの半分の幅/高さを減算される行うに必要なもの瞬間。

は、ここで私が何を意味するか示すためにいくつかの非常に大まかな擬似コードだ - あなたはJavaのよう書き換える必要があります...

if Gdx.input.justTouched { 
    get mouse position from Gdx.input 
    camera.unproject it into cameraX and cameraY 
    offsetX = cameraX - imageX 
    offsetY = cameraY - imageY 
} 

if Gdx.input.isTouched { 
    spritePisition.set(Gdx.input.getX() - offsetX, Gdx.input.getY - offsetY) 
} 
+0

あなたの答えに合うように自分のコードを編集しました。しかし、私は結果の半分を得ます:)この更新されたgifを確認してください:https://s31.postimg.org/lg8nu0u2z/Animation.gif – Beckham

+0

物理座標系が論理座標と異なっているので、y軸は反転されています - ダウン、もう一方はyアップ)。 Camera.unproject(これを修正する必要があります)を使用するか、画面の高さからyポジションを差し引いて、効果的に逆転させます。 –

0

なぜあなたはcamera.unprojectを使用していますか?

これを試してみてください:

Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    batch.draw(texture, spritePosition.x, spritePosition.y); 
    batch.end(); 

    if (Gdx.input.isTouched()) { 
     spritePosition.set(Gdx.input.getX() - texture.getWidth()/2, Gdx.input.getY() + texture.getHeight()/2, 0); 
    } 

} 
+0

マウスの位置は、物理的な(つまり、スクリーンピクセル)であるので、彼はカメラを使用する必要があります座標。それを論理座標に変換します。 –

+0

彼は決してカメラを動かさない? – IronMonkey

+0

はい。異なる座標系。 –

関連する問題