0

JavaLibGDXおよびBox2Dライブラリを使用してゲームを作成しています。

画面には 12*7 ブロックの横長が含まれているため、ビューポートの幅と高さとして 12 と 7 の正投影カメラを使用します。また、Box2Dワールドはこのカメラを使用しています。ウィンドウの画面サイズは 840 x 490 で、12 と 7 で分割するのに適しています :)。

カメラは主人公を追いかけているため、その射影行列はカメラの動きごとに変化します。batch.setProjectionMatrix(camera.combined)そのため、ゲーム オブジェクトを使用して描画します。

しかし、マウス スクリーンの座標をローカルの box2D 座標に変換する必要がある場合はどうすればよいでしょうか。
座標をある射影 maxtrix から別の射影 maxtrix に変換する方法はありますか?
たとえば、私のカメラが画面の中央にある (0; 0) を見ている場合、画面の座標で (840/2; 490/2) のポイントを取得します。カメラの動きを考慮して、(420; 245)から..何でも。

4

2 に答える 2

1

画面への座標の投影を解除しようとしましたか? これにより、座標がワールド座標に変換されます。

Vector3 coordinates = new Vector3();    
coordinates = new Vector3(x,y,0); //where x,y,0 is mouse coordinates
Vector3 value = new Vector3();
value = camera.unproject(coordinates);
于 2014-10-27T07:41:12.967 に答える
0

誰かが興味を持っているなら、これが私がローカルからスクリーンへの座標変換で問題を解決した方法です。この例では、カメラが主人公を追いかけており、heroを使用してオブジェクトの位置を取得したいと考えていますcamera

static final float WIDTH = 640;
static final float HEIGHT = 480;
static final float METERS_TO_PIXELS = 40; //or whatever 

//first we create a vector from the camera position to the object
Vector2 relative = new Vector2(hero.getPosition().x, hero.getPosition().y);
relative.sub(camera.position.x, camera.position.y);

//now scale the relative vector to screen coordinates
Vector2 result = new Vector2(WIDTH/2.0f + relative.x / METERS_TO_PIXELS * WIDTH,
                             HEIGHT/2.0f + relative.y / METERS_TO_PIXELS * HEIGHT); 
于 2014-10-28T14:23:27.687 に答える