タイルマップを動的に変更したいので、setTileGID
. 2 番目のパラメーターは tileCoordinate です。
convertPointToTiledPoint()
ポイントのワールド座標をタイル座標に変換する関数で取得しようとしました。
失敗し、場所は正しい場所の左側にあります。
器具の問題点は何ですか?
リソースの解像度は 1600x800、デザインの解像度は 480x320 で、FIXEDHEIGHT を選択し、リソースの高さ/デザインの高さを維持します。
中央のタイルを変更し、スプライトを追加して確認したい。
auto map = TMXTiledMap::create("bg.tmx");
auto bgLayer = map->getLayer("bg");
bgLayer->setAnchorPoint(Vec2(0.5f, 0.5f));
bgLayer->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2));
bgLayer->setTileGID(32, convertPointToTiledPoint(Vec2(visibleSize.width/2, visibleSize.height/2), map));
auto player = Sprite::create("Player.png");
player->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
this->addChild(player);
座標を変換する道具です。
Point TestScene::convertPointToTiledPoint(Point touchpoint, TMXTiledMap *map) {
Point point = (touchpoint - map->getPosition())*Director::getInstance()->getContentScaleFactor();
point.x = (int) (point.x / map->getTileSize().width);
point.y = (int) ((map->getMapSize().height * map->getTileSize().height - point.y) /
map->getTileSize().height);
return point;
}
黒いものは正しい位置にあるスプライトで、岩は私が変更したタイルです。いくつかの問題があります。
スプライトの位置は (285, 160) で、visibleSize は 570x320 なので、中央にあります。
タイルマップは 50x25 タイルで、各タイルは 32x32 ピクセルです。関数の戻り値は (22, 12) であり、これは center(25, 12) ではありません
Point point = (touchpoint - map->getPosition())*Director::getInstance()->getContentScaleFactor();
point
(712.5, 400) を取得し、最初は 800 ではありません (正しい)。
map->getPosition()
は (0, 0) スケールは 2.5
おそらくmap->getPosition()
、スケーリングされたタイルマップの左下隅の位置である負の値 (-87.5, 0) に変更する必要があります。