Cocos2d / Cocos2d-x Retina问题

时间:2012-07-30 11:05:41

标签: iphone cocos2d-iphone resolution cocos2d-x retina-display

我有一个用Cocos2d-x编程的多平台iOS / Android游戏。我只有一组图像可供使用(我只能在高分辨率设备之后)根据设备的分辨率进行缩放。例如,所有图像都适用于iPad,但如果您使用的是Galaxy S,则图像位置和缩放会受到GalaxyS_screenWidth / iPadscreenWidth的影响。

这适用于所有Android设备以及iPad,iPad2和旧款iPhone,但使用Retina iPhone则存在问题。在iPhone 4上,我的所有图像看起来都非常像素化,这是因为图像被缩放到iPhone非视网膜分辨率,然后缩小以填充屏幕。

我尝试启用Retina模式并且图像是其预期大小的一半(可能是由于使用了使用点的get winsize())并且手动缩放会导致其他类型的问题。我试着玩很多选项和属性,但无济于事,所以我现在该怎么办?

编辑: 这不仅仅是一个图形问题,因为文本会自动缩小然后显示为像素化。

编辑2: 字体是位图所以我的坏。但我不想使用视网膜,因为默认情况下所有图像都已经是视网膜。我的所有图像都是为iPad设置的,所以对于iPhone 4我只是缩小了一点。这适用于Android手机。

例如,我有一张图片,具体取决于通过getwinsize()获得的屏幕分辨率:

如果当前分辨率宽度为1024,则图像保持不变。 如果当前分辨率宽度为900,则图像缩放900/1024,没问题。 如果设备是iPhone 4分辨率宽度是480,那么图像缩放480/1024,然后cocos2d-x自动将结果图像缩放2,从而像素化。我尝试使用getwinsizeinpixels,我尝试将屏幕尺寸相乘,我尝试了很多东西,但除非我要重做我的许多代码,否则一切都没有用。

所以问题是,我怎么能让该死的引擎将iPhone 4视为分辨率为960x640的Android手机?

3 个答案:

答案 0 :(得分:1)

如果您希望Retina分辨率图像看起来像Retina分辨率图像,那么这些图像需要采用Retina分辨率(960x480)。

如果您首先将图像缩小到480x320,然后在设备上将其放大,那么它当然会看起来模糊不清。你不能通过放大来神奇地使Retina像素从较低分辨率的图像中显现出来。

答案 1 :(得分:1)

SI无法触及它的底部所以我采用了黑客攻击。我启用了Retina Display,然后我通过代码缩放了所有x2,除了文本。听起来很愚蠢,但它奏效了,而且像素化已经消失了。谢谢大家花时间试图帮助我。

答案 2 :(得分:0)

  

我尝试启用Retina模式,图像是其预期大小的一半

启用视网膜支持时,cocos2d通过将@“ - hd”附加到其提供的文件名来获取图像。这些图像意味着“视觉”尺寸的两倍(在iOS术语中,像素与点数),因此可以按比例缩小以充分利用设备分辨率。

如果你看一下CCDirectorIOS类,你会发现有几种方法可以解决这个问题,尤其是那些处理scalingFactor的方法。我不知道你应该做些什么改变才能使它工作,但是如果你进入这些方法并查看各种对象的值,你可能会找到一种方法来修改特定情况下的cocos2D默认行为。

如果这看起来很复杂,你可以尝试改变CC_RETINA_DISPLAY_FILENAME_SUFFIX,这样cocos2d就不会为视网膜iPhone寻找特别命名的文件,只需使用正常的文件。

  

例如,所有图像都适用于iPad,但如果您使用的是Galaxy S,则图像位置和缩放会受到GalaxyS_screenWidth / iPadscreenWidth的影响。

您可能尝试的另一件事是不使用winSize,而是使用winSizeInPixels,这样当您向下缩小时,您可以将其降低到点分辨率,但仅限于像素分辨率(这是点分辨率加倍。)

希望这有帮助。