3

「arrow_sprite」をタッチ位置に向けようとすると問題が発生します。

私が望む結果は、矢印(回転させたいスプライト)がタッチ位置を指すことです。

どうすればこれを達成できますか?

4

3 に答える 3

3

タッチ位置とスプライト位置の間のベクトルを計算する必要があります。これを行うには、InputProcessorを介して受け取ったタッチ位置の投影を解除する必要があります。

public class MyInputProcessor implements InputProcessor {
   ...

   @Override
   public boolean touchDown (int x, int y, int pointer, int button) {
      Vector3 touchDown = new Vector3(x, y, 0);
      camera.unproject(touchDown);
      Vector3 spritePosition = new Vector3(yourSpriteX, yourSpriteY, 0);
      spritePosition.sub(touchDown);
      return false;
   }

   ...
}

これで、スプライトからタッチ位置を指すベクトルができました。そこから、回転角を計算する必要があります。1つの方法は、Vector2.angle()を使用して、spritePositionVector3からVector2を作成することです。

于 2012-07-24T11:14:04.710 に答える
3

2Dで描画する場合は、SpriteBatchをCamera.combinedに設定する必要があります。

このようなもの:yourBatch.setProjectionMatrix(yourCamera.combined);

次に、「バッチ」が言ったようにカメラの投影を解除する必要があります。

その後、ベクトルまたは2D座標のどちらを使用するかを選択する必要があります。角度計算の基本的に同一の終了:

最初にフロート度を定義し、次にtouchDownメソッドでそのようにします。

degrees = (float) ((Math.atan2 (touchPoint.x - arrowPosition.x, -(touchPoint.y - arrowPosition.y))*180.0d/Math.PI)+90.0f);

入力と矢印の両方にVector3または2を使用すると仮定します。

次に、Arrowスプライトをレンダリングするとき:

Batch.draw(Arrow, x, y, originX, originY, width, height, scaleX, scaleY, degrees);

これがお役に立てば幸いです。

于 2012-08-04T00:15:12.873 に答える