2

我有一个用 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,我只是将它们缩小一点。这适用于安卓手机。

例如,我有一个图像,取决于通过以下方式获得的屏幕分辨率getwinsize()

如果当前分辨率宽度为 1024,则图像保持不变。如果当前分辨率宽度为 900,则图像将缩放 900/1024,没问题。如果设备是 iPhone 4 分辨率宽度是 480,所以图像被缩放 480/1024,然后 cocos2d-x 自动将生成的图像缩放 2 从而像素化。我尝试使用getwinsizeinpixels,我尝试增加屏幕大小,我尝试了很多东西,但没有任何开箱即用的方法,除非我要重做我的许多代码。

那么问题来了,我怎么能让该死的引擎把 iPhone 4 当作一部分辨率为 960x640 的 Android 手机呢?

4

3 回答 3

1

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

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

于 2012-07-30T11:20:36.917 回答
1

SI 无法深入了解它,所以我使用了一个 hack。我启用了 Retina Display,然后我通过代码将除文本之外的所有内容都缩放了 x2。听起来很愚蠢,但它奏效了,像素化消失了。感谢所有花时间帮助我的人。

于 2012-07-31T06:36:15.290 回答
0

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

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

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

如果这看起来很复杂,您可以尝试的一件事是更改,CC_RETINA_DISPLAY_FILENAME_SUFFIX以便 cocos2d 不会为视网膜 iPhone 查找特别命名的文件,而只使用普通文件。

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

您可能会尝试的另一件事是不使用winSize, 但是winSizeInPixels,因此当您缩小时,您会将其缩小到点分辨率,而只是到像素分辨率(这是点分辨率的两倍)。

希望这可以帮助。

于 2012-07-30T11:18:59.733 回答