视网膜显示屏上的高清和标清图形

时间:2012-01-12 22:25:53

标签: ios cocos2d-iphone retina-display

我正在尝试升级我的游戏以利用视网膜显示。以下是我感到困惑的事情。请帮帮我。

首先,如果我错了,请纠正我。 启用视网膜显示后,Cocos2d将尝试查找-hd文件(例如Dog-hd.png)并使用它们。 如果它找不到任何东西,那么它将加载原始的Dog.png而不将其缩放2。 我的问题是我没有(或者不想)所有的图形都是高分辨率的,但是我仍然希望所有的图像都能像以前一样大小,只有一些高清对象。 如果我只是保留SD图形,它们将在视网膜显示器上看起来像以前一样大。

我可以做些什么来让它识别SD图形并在代码中自动扩展2?谢谢!

3 个答案:

答案 0 :(得分:2)

Cocoa为您完美无缝地处理这个问题。使用myImage.png表示标准,myImage@2x.png表示视网膜图像。从xib,情节提要或UIImage imageNamed:加载图像时,它会自动选择正确的图像。此外,显示尺寸与光源不同的图像将自动在视网膜显示器上显示更高的分辨率,在非视网膜显示器上显示更低的分辨率,无论@2x后缀如何。

答案 1 :(得分:0)

SD和HD只能使用一个图形,在非视网膜显示屏上可以正常使用但在视网膜上看起来有点模糊......但是根据性能,如果你使用cocos2d就没有问题。

你必须使用ccp进行定位,使用boundingBox作为内容大小,并避免使用代码中的静态值。我认为一切都会好的。 :)

如果您对此有任何疑问,可以在此处发布新的评论或问题。

由于

答案 2 :(得分:0)

如果要在启用Retina的cocos2d应用程序中使用放大的SD图形,则必须更改节点的scale属性:

// upscaling a sprite that uses SD image
sprite.scale *= CC_CONTENT_SCALE_FACTOR();

您有两种方法可以确定精灵是否仅使用高清纹理。一,你只知道并将上述代码应用于所有不使用高清图像的精灵。其次,您可以检查是否存在-hd版本的图像。

NSString* imageFile = @"someimage.png"
CCSprite* sprite = [CCSprite spriteWithFile:imageFile];
NSString* fullFile = [CCFileUtils fullPathFromRelativePath:imageFile];
if ([fullFile hasSuffix:@"-hd.png"])
{
    // upscaling sprite because it uses an SD image
    sprite.scale *= CC_CONTENT_SCALE_FACTOR();
}

未经测试但应该可以使用。