如何动态更改tilemap的tile?

时间:2015-04-12 14:57:23

标签: c++ cocos2d-x cocos2d-x-3.0 tiled cocos2d-x-2.x

我想动态修改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;
}

黑色的是精灵位于正确的位置,而岩石是我改变的瓷砖。有一些问题。

精灵的位置是(285,160),其中visibleSize 570x320,所以它位于中心。

tilemap是50x25个tile,每个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),这是缩放的tilemap左下角的位置。

result

0 个答案:

没有答案