2

当我第一次开始为 iOS 编程(使用 Cocos2d)时,我为 iPhone 使用了一堆基于 320x480 屏幕尺寸的硬编码坐标。我刚刚意识到我需要至少包含一个基本版本的 iPad 和 iPad mini。

我读过这些:

cocos2d(但我不确定这是否是最好的方法?) cocos2d:Convert iPhone App to Universal App

转换坐标: 将坐标从 iPhone 屏幕尺寸转换为 iPad 屏幕尺寸

将 iphone 转换为 ipad:http: //iphonedevelopment.blogspot.com/2010/04/converting-iphone-apps-to-universal.html

Apple 关于创建通用应用程序的文档:http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW24

  1. 有没有一种简单的方法可以将图形显示从 iPhone 转换为 iPad,而无需编辑我使用硬编码值的代码的每一部分?(50 个点,全部在 1 个文件中)
  2. 未来使用 iOS/Cocos2D 坐标编码的最佳实践是什么?我应该怎么做

    #define SPACE_SHIP_X_IPAD 384

    #define SPACE_SHIP_X_IPHONE 160

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){

    `[ship.setPosition ccp:(SPACE_SHIP_X_IPHONE,0)];`
    

    } else {

    `[ship.setPosition ccp:(SPACE_SHIP_X_IPAD,0)];`
    

    }

    (顺便问一下,有谁知道如何用“#”号格式化这段代码,请教我如何格式化上面的代码?)

  3. 是否建议我创建 2 个不同的应用程序 - 一个用于 iphone,一个用于 iPad?还是这种只有 1 个应用程序的通用方法,然后在我提交到 Appstore 时选择分发类型?

  4. Mac 版本的应用程序与 iPhone 和 iPad 的应用程序商店的分发渠道相同吗?在 Mac 上分发还有哪些优点或缺点?(我猜这不好,因为图形必须适应像大型 iMac 一样的东西?)
  5. 只是为了确保 - 我的应用程序文件(不使用任何特定于 iphone 的任何东西,如呼叫)将在 iPod 和 iPad Mini 上运行,而无需任何额外的工作,对吗?

任何帮助将不胜感激。我会赞成所有好的尝试

4

2 回答 2

4

看起来您的方法过于复杂。制作通用应用程序通常不涉及对位置值进行硬编码,而是根据设备的边界计算这些位置值。

例如:

//Button in center for universal
CGPoint buttonOffset = CGPointMake( ([[UIScreen mainScreen] bounds].size.width - button.frame.size.width) / 2, ([[UIScreen mainScreen] bounds].size.height - button.frame.size.height) / 2);

button.frame = CGRectMake(buttonOffset.x, buttonOffset.y, button.frame.size.width, button.frame.size.height);

使用类似的概念来创建位置相对于屏幕边界的按钮(或船)。这将为您节省大量时间和悲伤。

需要注意的一件事是屏幕的“边界”不会影响设备方向。如果您想支持多个方向,您会发现创建一个实用方法来为您处理该逻辑很有用。

就像是:

+ (CGSize) deviceSize {
    CGSize size;
    if(UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])){
        size = CGSizeMake([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width);
    } else {
        size = CGSizeMake([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height);        
    }
    return size;
}

我知道您想要一个简单的解决方案,因此您不必更改所有值,但我建议您硬着头皮更改值。从长远来看,它将对您有很大帮助。不仅对于这个应用程序,而且实践将有助于您将来创建的任何应用程序。

是否建议您为通用创建两个不同的应用程序? 不,不推荐。您可以在创建 xcode 项目时选择“通用”,也可以在现有项目中进行更改。您也不需要创建两个构建或二进制文件。Apple 将承认它是通用的,并在商店中为所有设备提供。但是,您需要创建多个版本的初始屏幕以适应不同的屏幕尺寸和像素密度。

Mac 版本的应用程序与 iPhone 和 iPad 的应用程序商店的分发渠道相同吗?有点...您可以部署到应用商店并获得更多自由,因为您可以自己打包和分发 OSX 二进制文件——但您必须创建一个单独的应用程序,因为您很可能会使用不是在 mac 上支持。您将希望保留不使用 CocoaTouch 的功能,例如您的渲染和游戏逻辑。如果您正在部署到 OSX,那么大屏幕尺寸将是您最不关心的问题。优点:受众更广。缺点:在构建应用程序/游戏时需要进行大量规划,以便您可以尽可能多地重用代码并满足所有屏幕的需求。

只是为了确保 - 我的应用程序文件(不使用任何特定于 iphone 的任何东西,如呼叫)将在 iPod 和 iPad Mini 上运行,而无需任何额外的工作,对吗? 嗯...一些额外的工作 有了一些用于主屏幕图标和启动屏幕的额外图像资产,你会很高兴。

于 2012-11-16T01:22:28.070 回答
1

我使用通过 iCloud 共享的数据文件执行此操作,以便数据出现在两个设备上的正确位置... X *= 768 / 320 和 Y *= 1024 / 480。要从 iPad 分辨率返回 iPhone,只需除以乘。它简单而精确。然后,如果需要,记录您的数据配置的坐标集。

于 2012-11-16T02:17:22.963 回答