2

我正在开发一个简单的位置感知游戏,其中用户的当前位置显示在游戏地图上,以及他周围其他玩家的位置。它不是使用 MKMapView,而是使用没有街道的自定义游戏地图。

如何将其他玩家的其他纬度/经度坐标转换为 CGPoint 值,以在具有固定比例(如 50 米 = 屏幕上 50 点)的世界比例游戏地图中表示它们,并定位所有点以便用户可以看到他必须去哪个方向才能接触到另一个玩家?

关键目标是为平面自上而下视图生成纬度/经度坐标的 CGPoint 值,但将点定位在用户当前位置周围,类似于谷歌地图的定向地图功能(箭头),以便您知道在哪里是什么。

是否有进行计算的框架?

4

2 回答 2

3

首先,您必须将 lon/lat 转换为以米为单位的笛卡尔 x,y。
接下来是与其他玩家的度数方向。方向是 dy/dx,其中 dy = player2.y 到 me.y,dx 相同。通过除以 playerv2 和我之间的距离,将 dy 和 dx 归一化。你收到

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

乘以 50。现在你在 player2 的方向上有一个 50 m 的点:

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 回答