【问题标题】:Cocos2d/Cocos2d-x Retina IssuesCocos2d/Cocos2d-x 视网膜问题
【发布时间】:2012-07-30 11:05:40
【问题描述】:

我有一个用 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 手机呢?

【问题讨论】:

  • 您将视网膜版本的图形命名为什么?
  • 没有,只有我的问题中所述的一组图形。问题不仅仅存在于图形中,因为文本也会先按比例缩小然后再放大,这会导致大量像素化。
  • 您必须包含视网膜版本。您如何期望它能够显示没有像素化的高分辨率版本?您的字体也可能是从位图字体而不是系统字体生成的,在这种情况下,您还需要这些字体的视网膜版本。
  • 我对字体不好,默认情况下所有图像已经是视网膜,请阅读编辑 2。

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


【解决方案1】:

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

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

【讨论】:

  • 缩小放大操作未经我同意,仅在视网膜设备上进行。这是我要避免的问题(我的图片都是 960x480)。
  • 那你为什么要在 Retina 手机上进行缩放呢?缩放图像后,您将获得锯齿或过滤(模糊)效果。
  • 我只缩放了一些菜单和文本,主要的游戏元素保持不变。按钮不会缩放,一些游戏效果也不会。但这不是这里真正的问题。无论如何,我认为我已经设法解决了我的问题。我一小时后回来。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    如果这看起来很复杂,您可以尝试更改CC_RETINA_DISPLAY_FILENAME_SUFFIX,这样cocos2d 就不会为retina iPhone 寻找特别命名的文件,而只使用普通文件。

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      相关资源
      最近更新 更多