我正在使用xoppa的Simple Card Game Tutorial的部分内容编写纸牌游戏。但是现在我在翻卡时面临一个奇怪的问题。显示卡片另一面的Instad,它再次显示背面(但翻转):
我在xoppa的教程中创建卡的方式与我唯一的不同之处在于我没有使用图集,而是独立加载所有纹理。 (当我动态加载纹理时,这必须保持不变。)
可能有什么不对?此外,我不明白为什么使用后面和前面的两个精灵而不是材料。 (对我而言,无论如何看起来好像是显示了材质,而不是后面/前面的精灵)
答案 0 :(得分:1)
您不太可能使用相同的代码,因为它专门检查纹理是否相同(assert(front.getTexture() == back.getTexture());
)。
从教程中引用:
要解决这个问题,我们可以使用ModelCache,就像SpriteBatch一样,它将所有卡组合成一个渲染调用。但是,通过不为每张卡创建网格,可以进一步优化。 这是可能的,因为每张卡使用相同的纹理,因此使用相同的材料。就像我们可以将每张卡的正面和背面结合起来一样,我们也可以将所有卡组合在一起。这也将解决我们必须解决的处置问题。
如果要使用两种不同的纹理并且无法打包它们,则无法合并这些渲染调用。当然,您可以合并使用相同纹理的渲染调用。我想,在你的情况下,你需要将卡分成前后顶点。然后,您可以使用两个(或更多)批处理并组合共享相同纹理的渲染调用。
当然,使用纹理图集有一个原因:性能。使用许多单独的纹理将导致许多渲染调用,这需要GPU和CPU进行同步,因此对性能不利。如果你真的不想使用纹理图集,那么你最终会注意到这一点。所以,看起来你正试图解决错误的问题。
显而易见的解决方案是将纹理打包到地图集,因此您确实可以合并渲染调用。动态加载它们并不意味着你无法打包它们。请参阅:PixmapPacker。