是否可以使用iPhone 4/5的完整原始分辨率,而不是使用旧款iPhone的半尺寸坐标

时间:2013-09-27 05:34:02

标签: cocos2d-iphone

问题是,Cocos似乎认为视网膜设备与标准设备的分辨率相同。如果你在ipad上的768,1024处画一个精灵,它会把它放在右上角。如果你在视网膜ipad上绘制一个778,1024的精灵,内容缩放使它也可以放在右上角。然而,如果你在视网膜iphone 5上以640,1136画一个精灵,它不在右上角,它离屏幕的距离是2倍。为了将它放在角落里,你必须在320,568处绘制它,因为内容缩放。

我有一个Default-568h@2x.png图像,我的版本是2.1。

我的问题是:有没有办法让Cocos2d这样做,以便在iPhone5上绘制640,1136的精灵会导致精灵位于右上角?

是否可以设置cocos2d自定义GL投影并将winSizeInPoints设置为等于winSizeInPixels和内容比例1.0,以便您可以使用iPhone 4/5的完整原始分辨率,而不是使用较旧的iPhone的半尺寸坐标。 / p>

3 个答案:

答案 0 :(得分:1)

您可以通过changing the iPad suffix轻松执行此操作,以通过CCFileUtils使用“-hd”。这样iPad设备就会为Retina iPhone加载常规的-hd资产。

有关评论的更新:

设备上的位置以点为单位,而不是像素。所以非视网膜iPad和视网膜iPad的分辨率都是1024x768。这非常棒,因为它可以很好地适应具有不同像素密度的屏幕。这也适用于iPhone设备。

我怀疑您还没有将Default-568h@2x.png启动图像添加到您的项目中,这可能会导致宽屏设备的处理方式不同。

特别是在iPhone 5之前的旧版cocos2d版本中,有一个将iPhone 5视为非Retina设备的错误,不管是否为正确的默认图像。

答案 1 :(得分:1)

是的你可以分享,简单的方法是将所有常见的精灵放在精灵表中并在运行时检查是否有iPad,如果是,则加载iPhone HD表。我们在许多项目中都这样做并且工作过。

if(IS_IPAD)
{
   [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"GameSpriteSheet-hd.plist"];
}
else 
{
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"GameSpriteSheet.plist"];

}

对于背景图片,最好有单独的iPad图像,如果缩放看起来不错,那么你可以在运行时缩放图像。

答案 2 :(得分:1)

据我所知,你想要做什么,以下方法应该有效:

    设置[director enableRetinaDisplay:NO]
  1. 致电CCDirector;

  2. CCDirector中修改或覆盖以下方法,以便将winSizeInPixels定义为全屏分辨率:

    一个。 setContentScaleFactor:;

    reshapeProjection:;

    ℃。 setView:;

  3. 步骤1将确保在渲染精灵或进行计算时不会应用任何缩放因子;第2步将确保在需要时使用全屏分辨率(例如,在定义投影时,但也可能在其他地方)。

    关于第2步,您会注意到所有列出的方法都显示如下语句:

    winSizeInPixels_ = CGSizeMake( winSizeInPoints_.width * __ccContentScaleFactor, winSizeInPoints_.height * __ccContentScaleFactor );
    
    第1步

    __ccContentScaleFactor等于1,你应该这样做;你可以,例如根据您的目标定制winSizeInPixels计算,如下所示:

    if (<IPHONE_4INCHES>)
        winSizeInPixels_ = CGSizeMake( winSizeInPoints_.width * 2, winSizeInPoints_.height * 2 );
    else 
        winSizeInPixels_ = CGSizeMake( winSizeInPoints_.width * __ccContentScaleFactor, winSizeInPoints_.height * __ccContentScaleFactor );
    

    遗憾的是,定义自定义投影无效,因为winSizeInPixels始终基于__ccContentScaleFactor计算;但是,__ccContentScaleFactor也可以在Cocos2D的任何地方用来定位/调整精灵等等。

    关于实施的最后一点说明,您可以将此更改破解到现有的CCDirectorIOS类中,或者您可以从中派生自己的MYCCDirectorIOS并覆盖那里的方法。

    希望它有所帮助。