为什么在iPhone上运行时,正交tilemap cocos2d游戏中的切片之间会出现间隙?

时间:2013-11-03 06:01:52

标签: ios iphone opengl-es cocos2d-iphone

我尝试使用cocos2d 2.1和Tiled 0.9.1制作基于tilemap的游戏。游戏在模拟器上完美运行,但在设备上运行时,瓷砖之间有间隙(神器线)。

请参阅截图。

Gaps between tilemap

差异是原始图块(从图块集的png直接拍摄)与cocos2d渲染的图块之间的差异(在photoshop中制作)。如您所见,在模拟器中它们是100%相同的。然而,在设备上似乎cocos2d只是略微缩小了瓷砖纹理。 1像素条纹实际上是tileset中麻烦的瓷砖上方的纹理。

知道造成这种情况的原因以及解决方法吗?

2 个答案:

答案 0 :(得分:2)

使用this answer时,在我的情况下启用CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL是不够的。

我还在AppDelegate::applicationDidFinishLaunching()函数中添加了以下代码,并将传递给setPosition(x, y)函数的舍入值传递给最近的int。

Director::getInstance()->setProjection(Director::Projection::_2D);

我使用cocos2d-x 3.4.

答案 1 :(得分:0)

不确定为什么会在设备上发生这种情况,但您应该在ccConfig.h中读取参数CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL。这本身就是一个糟糕的问题,但它会给你一个关于在哪里看的暗示。

基本上,您应确保所有位置都在精确的像素边界上,即在非视网膜设备上将它们转换为int,并在视网膜设备上舍入到最接近的精确倍数.5。最好的方法是确保你的所有纹理都是w,甚至是数字......艺术家们有责任为任何不会移动的东西。如果你移动东西,并计算最终位置(例如在ccTouches移动中,结束),请确保在那里进行四舍五入。注意批处理节点:节点本身及其所有子节点应位于像素边界上。