我正在尝试创建一个相对简单的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根本没有准备好? Cocos2D有什么替代品可以满足我的需求吗?
答案 0 :(得分:3)
对于无耻的自我推销感到抱歉,但我想它可以帮到你。我最近在cocos2d上写了两篇关于高分辨率的小博文,并将它们放在我们的网站上。
第一部分详细介绍了如何启动和运行cocos2d,包括如何实现常规vs高分辨率图像的自动加载行为的建议修复。
此外,还有第二篇文章试图详细介绍点和像素之间的差异。 UIKit完全基于点,这就是为什么你不必重新设置所有坐标。与UIKit相比,cocos2d基于像素工作,因此与分辨率有关。你可以通过一些相当简单的转换为cocos2d提供处理点而不是像素的方法。我已经将它们作为CCDirector和CCNode的类别实现,以使它们易于使用。显然,这些类别中的方法并不是唯一应该“指出”的方法。例如,在CCLabel或CCMoveBy上的任何位置指定尺寸都是基于像素的,因此也必须重新加工...
请看一下博客:http://apptech.next-munich.com/(我会直接链接到这些文章,但作为新用户,我只能在答案中发布一个链接)。
希望这会有所帮助,让你开始吧!
答案 1 :(得分:1)
我正在为此找出一个非常简单的解决方案。我的进度发布在此处:http://www.cocos2d-iphone.org/forum/topic/8511#post-50361
基本上你在CCSprite中缩放纹理源rects,但没有别的,这样你就可以使用相同的320x480坐标系统(也就是积分系统),但你获得了高分辨率的图形。
你应该将我的技巧与本杰明博客中的第2点结合起来,这样你就不会出现记忆问题:http://apptech.next-munich.com/2010/07/high-res-using-cocos2d-on-ios-4.html
答案 2 :(得分:0)
Cocos2D使用UIImage
方法imageWithContentsOfFile:
和initWithContentsOfFile:
,尽管文档中提到了这些方法,但在iPhone 4上时却无法正确返回@ 2x版本的图像。
这是一个已知的错误,显然Apple正在研究它。
但是,有些人认为这是正确的行为,因为它将路径传递给特定文件,而不是文件名,让系统决定使用哪一个。在这种情况下,我建议更新文件以反映这一事实,如果它是真的。我们将看到Apple如何回应。