【问题标题】:Does anyone know what kCCDirectorProjection2D does?有谁知道 kCCDirectorProjection2D 是做什么的?
【发布时间】:2012-03-09 00:55:37
【问题描述】:

我找到了一个修复程序来支持我的 cocos2d 游戏的 iPad 视网膜显示。当我在 ipad 视网膜模拟器中以纵向模式运行游戏时,它无法显示任何内容。但是当我将默认设置从 kCCDirectorProjection3D 更改为 kCCDirectorProjection2D 时,它开始正常工作。

我想知道 kCCDirectorProjection2D/kCCDirectorProjection3D 到底是做什么的?更改默认设置会导致任何问题吗?

谢谢 阿比纳夫

【问题讨论】:

    标签: ipad cocos2d-iphone retina-display


    【解决方案1】:

    3D 投影(默认):

    • 使用具有固定相机位置和视点的 OpenGL 透视投影
    • 节点按照添加到节点层次结构中的顺序绘制。您可以通过zOrder 属性影响绘制顺序。 zOrderaddChild:z: 中的 z 相同。

    看着图片,您将不得不想象您的节点都绘制在相同的深度,例如直接在背板上。因此,它们都以相同的大小出现。仅通过按一定顺序渲染每个节点来实现节点的正确重叠。

    您仍然可以通过vertexZ 更改节点的真实 OpenGL 渲染深度,但不建议在 3D 投影中这样做,因为它会导致渲染的节点由于 3D 投影而略微偏离其位置。

    2D 投影:

    • 使用 OpenGL 正交投影
    • 节点按vertexZ 属性的顺序绘制,优先于zOrder
    • 更改vertexZ 也会影响节点的大小。如果您确实更改了vertexZ,则必须在 EAGLView 中启用深度缓冲才能正确渲染。这最常用于正确渲染等距切片地图中的重叠切片。
    • cocos3d 不能使用 2D 投影。
    • CCCamera 的行为会有所不同。
    • 3D、网格和相机动作(翻页、波浪等)在 2D 投影中无法正常工作或表现不同,甚至可能重置为 3D 投影。

    使用 2D 投影,您现在可以使用 vertexZ 在任意深度移动精灵,而不会偏移节点位置。但是,除非您启用深度缓冲,否则您的节点会根据其vertexZ 属性显示得更小或更大。

    如果您不更改任何节点的vertexZ 属性,2D 投影应该给出与 3D 投影相同的结果。但是,某些节点或动作可能需要 3D 投影才能正常工作。

    如果您想了解有关OpenGL projection matrices 的所有详细信息,请查看本句末尾的链接。

    两种投影具有相同的性能特征。然而,在不使用vertexZ 的情况下启用 2D 投影通常只有在使用 tilemap 时才有意义。

    长话短说:只要您的应用在 2D 投影中运行良好,并且经过全面测试后没有显示任何错误,您应该没问题。

    但我确定这不是 iPad Retina 的正确解决方案。据我们所知,直到 3 月 16 日,这可能是仅在 iPad 视网膜模拟器中出现的问题。而且这个问题更有可能通过更新retina mode function of CCDirector来解决。

    【讨论】:

    • 谢谢!这很有帮助。我将拭目以待,看看 cocos2d 是否为此提供了官方修复。如果不是,您认为我可以使用我提到的 hack 修复来发布我的游戏吗?我想尽快发布 ipad Retina 版本,以利用市场早期的优势。
    • 根据我的经验,设置 kCCDirectorProjection3D 会使所有 cocos2d 场景以非像素完美的方式渲染。它们显示得稍微大一点,有点模糊。这是对您创建的每个场景的固定设置“scene.vertexZ=-0.5f”。这在 kCCDirectorProjection2D 中不会发生(添加 scene.vertexZ=-0.5f 没有任何区别,场景从一开始就清晰且像素完美)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多