【问题标题】:How do I stop Cocos2D from requiring standard definition resources (SD images)?如何阻止 Cocos2D 需要标清资源(SD 图像)?
【发布时间】:2012-05-11 17:11:51
【问题描述】:

我正在使用 Cocos2d-iphone 开发一款 iPhone 游戏。

我希望我的游戏仅适用于 iPhone 4 和 iPad。为 iPhone 4 启用 Retina。我不希望游戏在旧设备上运行。

Cocos2d 总是会要求我提供 -hd 和非 hd 文件。如果我不提供 SD 文件,我会收到错误消息。我不希望这样:有没有办法禁止 Cocos2d 尝试检索 SD 文件,并且默认只获取 -hd 后缀的文件?

哦,当游戏由 iPad 运行时,图形也将是 -hd 图形。所以重点是,我只想在我的项目中有 -hd 文件。

编辑 Cocos2d 源代码的正确步骤是什么?

【问题讨论】:

  • “SD”表示“标准定义”,而不是“简单定义”。仅供参考。
  • @Jonathan Grynspan:我知道 - 是 Qwerty Bob 在那里编辑了我的标题。
  • 我没试过,但我想要一个更直接的方法。

标签: objective-c cocos2d-iphone


【解决方案1】:

如果你使用的 cocos2d 版本 >= 2.0,那么你可以更改 CCFileUtils.h 中的全局变量的值:

static NSString *__suffixiPad =@"-hd";

(其默认值为@"-ipad"。)

如果你使用的是cocos2d版本here一个类别,我写的可以透明地使用为iPad 1/2上的iPhone 4创建的-hd图像。

实际上,它的作用不止于此,但如果您将其添加到您的项目中,那么“-hd”图像将“自动”在 iPad 1/2 上使用,而不是它们的 SD 版本(您也可以不包括在你的项目中)。

如果您在集成此代码时遇到任何问题,请告诉我。

【讨论】:

  • 如果我改变主意并只想为 iPhone 4(s) 开发,只需添加此代码即可让我进入我的游戏项目并删除所有没有 -hd 后缀的文件?
  • 谢谢,效果很好。我可以将该代码用于商业游戏吗?
  • 一个简单的问题:我所做的是将您的代码放入我的项目中名为 CCFileUtils+SDSDeviceSuffix.m 的新文件中。这就是我所要做的吗?因为我怀疑代码什么也没做,而我的游戏开始运行的原因是其他原因(最近失败了)。
  • 您在文件部分是正确的。关于我的代码不起作用:你可能更新了你的 cocos2s 库吗?你用的是哪个版本?
  • 如果您使用的是 cocos2d 版本 >= 1.0,请查看我编辑的答案。
【解决方案2】:

如果我在你的位置..我会玩一个把戏..如果你不喜欢,请不要投反对票..但这只是我心中的一件事。

直接在代码中使用 -hd 图像.. iPhone 4 会轻松处理它.. 旧款 iPhone 会显示得更大,这并不重要,因为您不支持它们... 因此,不要使用 Background.png ,而是直接使用 Background-hd.png ,因为它适用于 iPhone 4 .. 而不是在所有这些 SD 东西上浪费时间.. 我将直接使用我的 -hd 图像来工作......

我不能说新 iPad.. 但旧 iPad 可以轻松地在代码中使用 -hd 图像。对于 iPad,我之前直接在我的代码中使用过.. 希望这会有所帮助.. :)

【讨论】:

  • 其实你不应该直接使用-hd。虽然它适用于旧版本的 cocos2d,但在 1.1beta2 中你会收到一个错误。(问题 1045)。在未来的版本中,您可能只需要引用不带 -hd / -ipad / -ipadhd 后缀的文件。
  • 感谢您的告知.. 但是我没有使用最新版本...当我开始使用 cocos2d-x 而不是 cocos2d 并且它以前可以正常工作时.. 在这种情况下,您可能给出更高分辨率的图像..我认为它可以直接支持...我今天会检查它..:)
【解决方案3】:

This tutorial might help.

如果您只提供 -hd 资产,则在 iPad 上运行时应该只会收到有关丢失 SD 资产的错误。 iPad 没有 Retina 显示屏,但它的分辨率确实足够高,可以像对待一个一样对待。

由于 cocos2d 通过fullPathFromRelativePath function in CCFileUtils 传递所有文件名请求,因此修改此函数以将 iPad 视为高清设备并强制它在 iPad 上加载 -hd 资产可能就足够了。

【讨论】:

    【解决方案4】:

    我能想到的第一个想法是对图像使用@2x 后缀(UIKit 样式),并且您不需要在应用程序中启用视网膜显示。问题是在 ipad 上您必须编写自己的方法来删除@2x 后缀

    第二个想法是制作 SD 图像..但只有 1x1 像素...它几乎不占用任何空间(119 字节,白色像素)。应该按原样在 ipad 上工作

    第三个想法:不启用(或启用..没有任何区别)视网膜显示,但将高清图像作为标清图像。我已经在 cocos2d v1.0.1 上对此进行了测试,它似乎可以工作。也..它应该可以在 ipad 上运行

    第 4 个想法在ccConfig.h 中强制启用视网膜显示(这样导演就不会要求您提供 ipad 上的 SD 图像)。我不确定这个,因为有很多测试可以检查分辨率,设备,如果它是视网膜,你必须编辑所有这些

    这些只是我脑海中的想法..它们可能是错误的..但它们只是想法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2013-07-14
      • 2019-08-08
      相关资源
      最近更新 更多