iPhone 4高分辨率支持Cocos2d-iphone吗?

4
我正在尝试创建一个相对简单的2D图形游戏,其中包含有些复杂的动画。我尝试使用基本的Core Graphics和Core Animation库开发游戏,但游戏对象的动画表现不尽如人意(即卡顿/延迟)。
因此,我现在正在研究Cocos2D,它看起来非常有前途,直到我检查了iPhone 4的高分辨率支持。这似乎根本不能很好地工作,但是话说回来,我刚开始研究它。
文档中唯一提到的问题是简单地使用CCDirector设置比例因子,可以像这样完成:
if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    [[CCDirector sharedDirector] setContentScaleFactor: [[UIScreen mainScreen] scale] ];
}

然而,这并不是我所期望的行为。它只是简单地将像素数量加倍,这意味着我必须在我的所有代码中考虑“双倍像素因子”。
在Core Graphics/Animation库中,我们使用的坐标空间并没有改变。在幕后,它只是将所有内容加倍以填充iPhone 4高分辨率屏幕,并在有@2x图像时使用它们。这实际上非常有效,游戏逻辑无需考虑设备的分辨率。Cocos2D似乎已经实现得相当糟糕,让我不想使用Cocos2D。
我在该主题上找到了一些其他话题,但没有真正的答案,除了解决方法。这个问题会被修复吗?我做错了还是Cocos2D不支持高分辨率屏幕?是否有其他替代品可以提供我需要的功能?
3个回答

3

非常抱歉我要进行一下自我推销,但我想这可能会对您有所帮助。最近我在我们的网站上写了两篇关于cocos2d高清晰度的小博客文章。

第一篇文章详细介绍了如何启动cocos2d,包括提出了一个修复建议来实现普通和高清晰度图像的自动加载行为。

此外,第二篇文章试图详细介绍点和像素之间的区别。UIKit完全基于点,这就是为什么您不必重新调整所有坐标。与UIKit相反,cocos2d基于像素,因此它是分辨率相关的。您可以通过一些非常简单的转换方法为cocos2d提供使用点而不是像素的方式。我已经将这些方法作为CCDirector和CCNode的类别实现,以使它们易于使用。显然,这些类别中的方法不是唯一应该“点化”的方法。例如,在CCLabel上指定大小或在CCMoveBy上指定任何位置都是基于像素的,因此也必须进行重新调整...

请查看博客:http://apptech.next-munich.com/(我本来想直接链接到文章,但由于我是新用户,只能在答案中发布一个链接)。

希望这可以帮助您入门!


你好,感谢你的回答。我很欣赏你的自我推广,因为你不仅回答了我的问题,还解释得更简单易懂。事实上,Cocos使用像素而UIKit使用点,这就是我遇到的问题所在。你所描述的解决方案既简单又有效。需要这样一个解决方案的事实使我说Cocos并不真正支持高分辨率,因为它没有像UIKit一样实现点坐标空间。希望Cocos2D能尽快实现这一点。无论如何,你已经回答了我的问题,因此将获得奖励 :) - Jeroen Bouma
我很高兴能够帮助到你!我也认为cocos2d应该逐渐采用点的概念,而不是像素,尽管我认为这将是一个相当大的改变,因为框架中的每个类都可能需要修改。所以不要期望很快就会有什么魔法出现 :) - Benjamin

1

我正在努力找出一个相当简单的解决方案。我的进展在http://www.cocos2d-iphone.org/forum/topic/8511#post-50361中发布。

基本上,在CCSprite中缩放你的纹理源矩形,但是不要缩放其他任何东西,这样你就可以使用相同的320x480坐标系统(也称为点系统),但你可以获得高分辨率的图形。

你应该结合Benjamin博客中的第2点技巧,这样你就不会遇到内存问题:http://apptech.next-munich.com/2010/07/high-res-using-cocos2d-on-ios-4.html


0

Cocos2D使用UIImage方法imageWithContentsOfFile:initWithContentsOfFile:,尽管文档中所说,在iPhone 4上无法正确返回@2x版本的图像。

这是一个已知的问题,显然苹果正在解决。

然而,有些人认为这是正确的行为,因为它传递了一个特定文件的路径,而不是文件名,并让系统决定使用哪个。在这种情况下,如果这是真的,我建议更新文档以反映这个事实。我们将看到苹果如何回应。


谢谢您的回复。我确实理解了同样的事情,但这不是我发现的唯一问题。如果cocos只在iPhone4上使用低分辨率而不是高分辨率图像,结果只会变得不那么清晰,但仍然处于与低分辨率(3GS)iPhone相同的坐标空间中。但事实并非如此。我必须根据设备的分辨率同时使用320x480和640x960来编写所有代码,这一点我不喜欢 :) - Jeroen Bouma

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