我想动态修改 tilemap,我使用setTileGID
. 它的第二个参数是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;
}
黑色的是在正确位置的精灵,而岩石是我改变的瓷砖。有一些问题。
sprite 的位置是 (285, 160),visibleSize 为 570x320,所以它在中心。
瓦片地图是 50x25 瓦片,每个瓦片 32x32 像素。函数的返回是(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),即缩放后的瓦片地图左下角的位置。