【问题标题】:Cocos2dx 3.17 TileMap Basic Sample - wrong tilecord position, object layer itmes position returned also wrongCocos2dx 3.17 TileMap Basic Sample - 错误的tilecord位置,返回的对象层itemes位置也错误
【发布时间】:2018-08-25 18:11:43
【问题描述】:

我尝试了来自here 的 cocos2d TileMap 示例,在这个为给定玩家位置返回的 tilecord 中是错误的。

这里是代码

Point HelloWorld::tileCoordForPosition(Point position)
{
    int x = position.x / mTileMap->getTileSize().width;
    int y = ((mTileMap->getMapSize().height * mTileMap->getTileSize().height) - position.y) / mTileMap->getTileSize().height;
    return Point(x, y);
}

这是地图截图

返回的 tileCord 也是错误的。所以碰撞不起作用。我从 Ray Wenderlich 网站的示例中使用它

这里是完整的示例代码https://app.box.com/s/whunv70tstwxbgzxdvxfeu080y6gwucb

如果有人有时间,请检查它,并请帮助我找到错误。

【问题讨论】:

  • 我无法为您提供真正的帮助,但我首先想到的是锚点位置的差异。像 cocos2D 这样的游戏引擎通常使用坐标系,它的 Y 位置从left-bottom 开始,而不是左上角。
  • @ToughGuy 感谢您的回复,我理解您的担心,TileMap 坐标系的y 是从左上角开始,而cocos2d 是从左下角开始。这就是为什么在上述函数中翻转 Y 位置的原因。同样的逻辑在 cocos2d-Obj.C 项目中对我来说很完美……现在在 Cocos2d-x 中出现了其他问题。
  • 尝试记录两个碰撞对象的 x y,(也在 cocos2d-iphone 中)它肯定会给你提示。
  • @ToughGuy 感谢您的精彩提示...在 cocos2dx 中,出于某种原因,生成点恰好返回 cocos2d-ObjC 的一半。如果我在 tileCoordForPosition 函数中乘以输入触摸点,那么它会返回正确的坐标。感谢您的精彩提示
  • 所以我猜你回答了你自己的问题:) 我想知道赏金会发生什么? :D

标签: iphone xcode cocos2d-x cocos2d-x-3.17 tmxtiledmap


【解决方案1】:

在 cocos2dx 3.17 中,返回的生成点正好是一半,相同的 tileMap 在 Cocos2d-ObjC 项目中返回正确的值。所以临时解决方法是将 tileCoordForPosition 中的输入值乘以 2。这是临时解决方案...仍在等待适当的修复。

Point HelloWorld::tileCoordForPosition(Point position)
{
    Point newPos = Vec2(position.x*2, position.y*2);

    int x = newPos.x / mTileMap->getTileSize().width;
    int y = ((mTileMap->getMapSize().height * mTileMap->getTileSize().height) - newPos.y) / mTileMap->getTileSize().height;
    return Point(x, y);
}

这里是完整的 TileMap 示例:https://app.box.com/s/r3kglzbx6naig896bq4my7opfeg6ftwz

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多