我决定用c++和cocos2d-x做一个等距游戏。每个等距图块都有一个 X 和一个 Y 坐标,每移动一个图块,增加 1 个。这就是我将磁贴转换为屏幕坐标的方式。
cocos2d::CCPoint WorldPos::convertToScreen(){
cocos2d::CCPoint posScreen;;
posScreen.x=(this->x)*(TILE_WIDTH/2) + (this->y)*-TILE_HEIGHT;
posScreen.y=(this->x)*(TILE_HEIGHT/2) + (this->y)*(TILE_HEIGHT/2);
return posScreen;
}
磁贴均为 40px 宽和 20px 高。
现在我需要一个函数将这些世界坐标(等轴测坐标)转换回屏幕坐标。 类似的东西
WorldPos* WorldPos::convertToWorld(cocos2d::CCPoint &point)
我似乎无法弄清楚这一点,我是否做错了,我应该做定位是一种不同的方式,还是有某种我无法弄清楚的计算?
尝试:
WorldPos WorldPos::convertToWorld(cocos2d::CCPoint &point) {
int x = (point.x + 2*point.y)/40;
int y = (2*point.y - point.x)/40;
return WorldPos(x, y);
}
逻辑:
Px = 20*Wx - 20*Wy
Py = 10*Wx + 10*Wy, thus
Px + 2*Py = 40*Wx -> Wx = (Px + 2*Py) / 40
Px - 2*Py = -40*Wy -> Wy = (2*Py - Px) / 40
其中Px
、Py
、Wx
、Wy
分别是CCpoint::x
、CCPoint::y
、WorldPos::x
、WorldPos.y