2

私は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;
}

タイルはすべて幅40ピクセル、高さ20ピクセルです。

ここで、これらのワールド座標(アイソメ座標)を画面座標に変換する関数が必要です。何かのようなもの

WorldPos* WorldPos::convertToWorld(cocos2d::CCPoint &point)

私はこれを理解できないようです、私はそれをすべて間違ってやっています、そして私はポジショニングをするべきですか?別の方法ですか、それとも私が理解できないある種の計算がありますか?

4

1 に答える 1

0

試す:

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

ここPxPy、、、、はそれぞれ 、、、、ですWx_ _WyCCpoint::xCCPoint::yWorldPos::xWorldPos.y

于 2012-04-15T10:56:31.300 に答える