我尝试使用cocos2d 2.1和Tiled 0.9.1制作基于tilemap的游戏。游戏在模拟器上完美运行,但在设备上运行时,瓷砖之间有间隙(神器线)。
请参阅截图。
差异是原始图块(从图块集的png直接拍摄)与cocos2d渲染的图块之间的差异(在photoshop中制作)。如您所见,在模拟器中它们是100%相同的。然而,在设备上似乎cocos2d只是略微缩小了瓷砖纹理。 1像素条纹实际上是tileset中麻烦的瓷砖上方的纹理。
知道造成这种情况的原因以及解决方法吗?
答案 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移动中,结束),请确保在那里进行四舍五入。注意批处理节点:节点本身及其所有子节点应位于像素边界上。