Как динамически изменить плитку для карты тайлов?

Я хочу динамически изменять карту тайла и использую setTileGID, Второй параметр — tileCoordinate.

Я пытаюсь получить это с помощью функции convertPointToTiledPoint(), которые преобразуют мировую координату точки в координату плитки.

Не удалось, и местоположение слева от правильного.

Какие проблемы с моим навесным оборудованием?

разрешение ресурса — 1600×800, а проектное разрешение — 480×320 с выбором 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) с видимым размером 570×320, поэтому оно находится в центре.

Карта тайлов — это плитки размером 50×25, каждая размером 32×32 пикселей. возврат функции (22, 12), который не является центром (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), которое является позицией нижнего левого угла шкалы масштабированной карты тайлов.

результат

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector