2

私は、ユーザーの現在の位置がゲームマップに表示されるだけでなく、彼の周りの他のプレーヤーの位置も表示される、単純な位置認識ゲームに取り組んでいます。MKMapViewを使用していませんが、通りのないカスタムゲームマップを使用しています。

他のプレーヤーの他の緯度/経度座標をCGPoint値に変換して、50メートル=画面の50ポイントのような固定スケールで世界規模のゲームマップに表示し、ユーザーがで見ることができるようにすべてのポイントを方向付けるにはどうすればよいですか?他のプレイヤーに到達するために彼はどちらの方向に行かなければならないでしょうか?

主な目標は、フラットなトップダウンビューの緯度/経度座標のCGPoint値を生成することですが、Googleマップの地図の向きの機能(矢印)と同様に、ユーザーの現在の場所の周りにポイントを向けて、どこに何があるかがわかるようにします。

計算を行うフレームワークはありますか?

4

2 に答える 2

3

最初に、経度/緯度をメートル単位のデカルト x、y に変換する必要があります。
次は、他のプレイヤーへの角度の方向です。方向は dy/dx です。ここで、dy = player2.y から me.y へ、dx についても同じです。playerv2 と me の間の距離で割って、この値で dy と dx を正規化します。あなたが受け取る

ny = dy / sqrt(dx*dx + dy*dy)
nx = dx / sqrt(dx*dx + dy*dy)

50 を掛けます。これで、プレーヤーの方向に 50 m のポイントができました2:

comp2x = 50 * nx;
comp2y = 50 * ny;

me.x/me.y を地図の中心にします。画面をメートルスケールに適用します

于 2013-01-15T02:06:11.237 に答える
2

MapKitから MKMapPointForCoordinateが必要です。これにより、緯度と経度のペアが x と y で定義される平面に変換されます。プロジェクションについて説明しているMKMapPointのドキュメントをご覧ください。次に、ディスプレイの必要に応じて、これらの x、y ペアを CGPoints にスケーリングおよび回転できます。(自分のゲームでどのスケーリング係数が機能するかを確認するには、実験する必要があります。)

ポイントをユーザーの中心に配置するには、他のすべてのオブジェクトのポイントから x および y 位置の値 (MKMapPoints 内) を差し引くだけです。何かのようなもの:

MKMapPoint userPoint = MKMapPointForCoordinate(userCoordinate);
MKMapPoint otherObjectPoint = MKMapPointForCoordinate(otherCoordinate);

otherObjectPoint.x -= userPoint.x; // center around your user
otherObjectPoint.y -= userPoint.y;

CGPoint otherObjectCenter = CGPointMake(otherObjectPoint.x * 0.001, otherObjectPoint.y * 0.001);

// Using (50, 50) as an example for where your user view is placed.
userView.center = CGPointMake(50, 50);
otherView.center = CGPointMake(50 + otherObjectCenter.x, 50 + otherObjectCenter.y);
于 2013-01-15T01:38:23.823 に答える