1

タイルマップを動的に変更したいので、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) に変更する必要があります。

結果

4

0 に答える 0