JSTileMap如何处理retina和iPad/iPhone瓦片地图?

4
我已经使用Tiled创建了一个基本的瓦片地图。我正在使用JSTileMap和SpriteKit将地图添加到场景中。根据我的理解,JSTileMap(而不是SKTexture)会自动处理视网膜和不同设备的问题。但是目前我还没有能够得到好的结果,这是我的配置:
我创建了一个.tmxf文件,使用map.png作为其瓦片集,在基本分辨率下创建。.tmx存在于项目中,但是我故意没有添加map.png(我不想支持非视网膜的iPhone)。
在项目中,我只添加了以下.png文件: map@2x~iphone.png(使用48x48瓦片的视网膜iPhone) map~ipad.png(使用48x48瓦片的非视网膜iPad) map@2x~ipad.png(使用96x96瓦片的视网膜iPad)
这里是我得到的结果(在模拟器上进行干净的构建和重置内容和设置后):
视网膜iPhone- 图块位置错误 iPad - 没有显示瓦片地图,JSTileMap存在解析错误 视网膜iPad - 图块位置错误
如果我仅使用普通的map.png(带有48x48瓦片): 视网膜iPhone - 瓦片地图显示良好,但当然太大 iPad - 瓦片地图完美显示 视网膜iPad - 瓦片地图完美显示并缩放。
我知道我可以只使用一个24x24的瓦片集,并且显然它会自动缩放一切。但是我不想使用缩放的瓦片集,因为质量会受到影响。
先谢谢您。
2个回答

2
我发现SKTexture忽略了~ipad文件扩展名,只使用@2x文件扩展名。这在尝试为iPhone retina、iPad和iPad retina构建瓷砖地图系统时只会带来更多麻烦。
因此,我决定避免这个问题。我现在在我的项目中不使用通用应用程序。我有一个iPhone项目和一个单独的iPad项目。这样,我每个项目只需要使用@2x文件扩展名就可以处理Retina。
这种方法完全有效(也更容易)。对于那些只为retina iPhone构建的人,请注意在.tmx文件中将一半的瓷砖高度和宽度大小,否则您将在尝试处理内容缩放时浪费大量时间。

0

由于你正在使用Sprite Kit,而这需要iOS 7,因此实际上没有非Retina iPhone可以定位。

在这种情况下的问题是,您不能在没有提供不带@2x后缀的相同图像的情况下使用@2x后缀的图像。因此,解决方案可能就是简单地提供不带@2x后缀的Retina iPhone图像。您可能甚至不需要~iphone后缀,因为另外两种类型的资源只会被iPad设备使用。

这基于对其他问题的回答。我个人没有验证过。


首先,感谢您的关注,Steffen。是的,我已经尝试了几乎每种排列组合,寻找“正确”的技巧。我更多地是在寻找它发生的原因,以便弄清楚为什么它还不正确。在您建议的修复中,所有构建都使用默认的瓷砖地图(例如map.png),并忽略iPad和iPad retina的副本。我已通过在每个瓷砖上放置标记来验证正在使用哪个瓷砖集。它还将iPhone retina上的默认缩放到我猜测的2倍,因此只有大约一半的地图可见。再次感谢。 - Calm Turtle
你是否考虑过场景的缩放模式可能会影响这种行为? - CodeSmile
是的,但仍然没有解释为什么JSTileMap(或SKTexture?)不使用@2x〜ipad文件扩展名,唯一加载的地图是默认的map.png。 - Calm Turtle
尝试使用图像加载简单的SKTexture,并检查纹理的大小。这样你就知道问题是出在瓦片地图还是SKTexture上了。 - CodeSmile
我决定彻底避免这个问题。我将使用下面的答案来帮助遇到类似问题的人们。 - Calm Turtle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接