【问题标题】:how to set vertexZ or proper zorder in isometric tilemap in cocos2d-x/ how to apply proper depth management in isometric tilemaps in cocos2d-x如何在 cocos2d-x 的等距 tilemap 中设置 vertexZ 或适当的 zorder/如何在 cocos2d-x 的等距 tilemap 中应用适当的深度管理
【发布时间】:2013-11-15 11:46:47
【问题描述】:

我在 cocos2d-x 中使用等距 tilemap,我面临的一个问题与深度管理有关。玩家精灵没有正确地隐藏在放置在不同瓷砖地图层上的树木和房屋后面。我已将 cc_vertexz = -1000 应用到 background 并将 automatic 应用到 house and enviornment layer 我正在设置vertexZ 使用以下由更新调用的方法。

void HelloWorld::repositionSprite()
{
CCPoint p = playerSprite->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
float newZ = -(p.y+16) /16;
playerSprite->setVertexZ( newZ );

}

我还在 AppDelegate 类中启用了以下功能。

CCDirector::SharedDirector()->setDepthTest(true); CCDirector::SharedDirector()->setProjection(kCCDirectorProjection2D);

但仍然无法获得适当的解决方案,请帮助我,让我知道我缺少什么。

【问题讨论】:

  • 要让vertexZ工作,你必须启用深度缓冲,这应该在CCGLView初始化中
  • 你说的是depthFormat吗?
  • 是的,depthFormat 等于深度缓冲
  • 它已经在 AppController.mm 中的方法 applicationdidFinishLaunchingWithOptions 中启用,您认为我在编码部分还缺少什么?我已经发布了我的代码。

标签: ios cocos2d-x depth-buffer


【解决方案1】:

假设平铺坐标的格式类似于 (x,y)

                         (0,0)
                      (1,0) (0,1) 
                   (2,0) (1,1) (0,2)
                (3,0) (2,1) (1,2) (0,3)

        So on........

    int a= _tileCor.x + _tileCor.y;
   _playerSprite->setZorder(a);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多