2010-07-20 50 views
4

我正尝试用2D图形创建一个相对简单的游戏,它具有一些复杂的动画。我试图用基本的Core Graphics和Core Animation库开发游戏,但游戏对象的动画表现并不令人满意(即生涩/延迟)。支持iPhone 4的Cocos2d-iphone高分辨率

所以,我现在正在考虑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有什么替代品可以给我我需要的吗?

回答

3

对不起,无耻的自我推销,但我想它可以帮助你。我最近在cocos2d上写了两篇关于高分辨率的小博客文章,并将它们放在我们的网站上。

第一个详细介绍了如何让cocos2d启动并运行,其中包括如何实现常规和高清晰度图像自动加载行为的建议修复。

此外,还有第二篇文章试图进入点和像素之间的差异的一些细节。 UIKit完全基于点,这就是为什么你不必重新处理所有坐标。与UIKit相比,cocos2d基于像素工作,因此依赖于分辨率。您可以通过一些相当简单的转换为cocos2d提供使用点而不是像素的方式。我已经将这些作为CCDirector和CCNode的类别实现,以使它们易于使用。显然,这些类别中的方法不是唯一应该“指出”的方法。例如,指定CCLabel上的大小或CCMoveBy上的任何位置都是基于像素的,因此也必须重新制作...

看看这个博客:http://apptech.next-munich.com/(我会直接链接到文章,但作为一个新用户,我只能在答案中发布一个链接)。

希望这可以帮助你,让你开始!

+0

嗨,谢谢你的回答。你的自我推销是值得赞赏的,因为你们都回答了我的问题,并且解释得更简单。的确,Cocos使用UIKit使用点的像素,这是我遇到的问题。您所描述的解决方案非常简单,因为它很有效。事实上,这样的解决方案是必需的,这让我说Cocos并不是真正的高分辨率,因为它没有实现像UIKit这样的点坐标空间。希望这将很快由Cocos2D实施。非的少;你已经回答我的问题,并因此获得奖励:) – 2010-07-22 13:09:25

+0

我很高兴我能帮助你!我也认为cocos2d应该逐渐采用点而不是像素的概念,尽管我认为这将是一个相当大的变化,因为框架中的每个类都很可能不得不被触及。所以不要指望任何魔法太快:) – Benjamin 2010-07-22 13:12:55

0

的Cocos2D使用UIImage方法imageWithContentsOfFile:initWithContentsOfFile:其中,尽管该文件说什么,不正确地返回在iPhone上的图像时的2倍@版本4.

这是一个已知的bug,显然是苹果在它上面工作。

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

+0

感谢您的答复。 我的确了解同样的事情,但这不是我发现的唯一问题。如果cocos只能在iPhone4上使用低分辨率而不是高分辨率图像,那么结果就不那么明快了,但仍然在与低分辨率(3GS)iPhone相同的坐标空间中。不是这种情况。根据设备的分辨率,我不得不使用320x480和640x960处理所有代码中的320x480。这我不喜欢:) – 2010-07-21 08:01:45

1

我正在找出一个非常简单的解决方案。我的进度贴在这里:http://www.cocos2d-iphone.org/forum/topic/8511#post-50361

基本上你在CCSprite中缩放你的纹理源矩形,但没有别的,这样你就可以使用相同的320x480坐标系统(又称积分系统),但你会得到高分辨率图形。

你应该与此有一点#2本雅明的博客在这里结合自己的技术,这样你就不会得到内存的问题:http://apptech.next-munich.com/2010/07/high-res-using-cocos2d-on-ios-4.html