【问题标题】:Cocos2d-iPhone and iPhone X resolutionCocos2d-iPhone 和 iPhone X 分辨率
【发布时间】:2018-09-27 07:02:09
【问题描述】:

你能相信我们还在使用 Cocos2d-iPhone 吗?

有没有人可以修复它以使其与最新的 iPad 和 iPhone X 兼容?

我们的模式是横向。

【问题讨论】:

    标签: ios cocos2d-iphone screen iphone-x


    【解决方案1】:
    1. 如果 cocos2d 版本 1.0 - 2.1 则更新到 Cocos2d 2.2
    2. 在 Images.xcassets 中添加 iPhoneX 启动画面
    3. 在 CCConfiguration.m 文件中更新了下面的函数。在此我们正在处理 contentScaleFactor 3。

      -(NSInteger) runningDevice
      {
          NSInteger ret=-1;
      
            #ifdef __CC_PLATFORM_IOS
      
          if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
          {
              ret = (CC_CONTENT_SCALE_FACTOR() == 2) ? kCCDeviceiPadRetinaDisplay : kCCDeviceiPad;
          }
          else if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone )
          {
              // From http://stackoverflow.com/a/12535566
              BOOL isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
      
              if( CC_CONTENT_SCALE_FACTOR() == 2 ) {
                  ret = isiPhone5 ? kCCDeviceiPhone5RetinaDisplay : kCCDeviceiPhoneRetinaDisplay;
      
                  // Guru - Handle iPhone Plus device, iPhoneX
                  // - - - - -  - - --  -- - - - -- - -  - - -
                  if([[UIScreen mainScreen] scale]==3)
                  {
                      ret = kCCDeviceiPhone5RetinaDisplay;
                  }
              }
              else
              {
                  // Guru - Handle iPhone Plus device, iPhoneX
                  // - - - - -  - - --  -- - - - -- - -  - - -
                  if([[UIScreen mainScreen] scale]==3)
                  {
                      ret = kCCDeviceiPhone5RetinaDisplay;
                  }
                  else
                  // - - - - -  - - --  -- - - - -- - -  - - -
                  ret = isiPhone5 ? kCCDeviceiPhone5 : kCCDeviceiPhone;
              }
          }
      
          #elif defined(__CC_PLATFORM_MAC)
      
          // XXX: Add here support for Mac Retina Display
          ret = kCCDeviceMac;
      
           #endif // __CC_PLATFORM_MAC
      
            return ret; 
      

      }

      1. 使用 iPhone5HD 中的按钮和其他图像并为 iPhone X 手动加载背景

        CCSprite *bg ;
        if([App isIphoneX])
        {
           bg = [CCSprite spriteWithFile:@“Background-iphoneX.png"]; // 1624X750 image size
        }
        else
        {
           bg = [CCSprite spriteWithFile:@"Background.png"]; // make sure -hd,-ipad,-ipadhd, -iphone5hd there
        }
        

    或者只是缩放背景图像

    #define SW ([[CCDirector sharedDirector] winSize].width)
    #define SH ([[CCDirector sharedDirector] winSize].height)
    
    CCSprite *bg ;
    if([App isIphoneX])
    {
          bg = [CCSprite spriteWithFile:@"Background.png"];
          bg.scaleX = SW/bg.contentSize.width;
           bg.scaleY = SH/bg.contentSize.height;
    
    } 
    

    应用代理代码:

    -(bool)isIphoneX
    {
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
            CGSize screenSize = [[UIScreen mainScreen] bounds].size;
            if (screenSize.width == 812) // portrait height = 812
            {
                return true;
            }
            if([self isIphoneXR]) // Now in this game iPhoneXR, iPhoneXS Max = iPhoneX,
            {
                return true;
            }
        }
        return false;
    }
    -(bool)isIphoneXR
    {
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
            CGSize screenSize = [[UIScreen mainScreen] bounds].size;
            if (screenSize.width == 896 && screenSize.height == 414)
            {
                return true;
            }
        }
        return false;
    }
    
    1. 不要添加 iPhone6、iPhone7、iPhoneXR、iPhoneXSMax 闪屏..系统自动缩放 iphone5 到 iPhone6、iPhone7 等和 iPhoneX 到 iPhoneXR、iPhoneXSMax。你必须使用 iPhone 5、iPhoneX 飞溅

    注意:我刚刚支持 iPhoneX 和我的旧游戏的所有设备支持...Apple 最近批准了此更改...成功将 iPhoneX 支持添加到 cocos2d 2.2

    【讨论】:

    • 您好,您有任何着色器问题吗?我收到大量警告,因为 iOS 12 不推荐使用 OpenGLES API
    • 在我的游戏中没有使用着色器。结帐你忘了从 cocos2d 2.2 中替换 GLES-Render.mm 结帐这个..可能有用stackoverflow.com/questions/11662770/…
    • 感谢您的及时回复。不幸的是,这没有帮助。但是到目前为止,在您的帮助下,我实际上已经启动了该应用程序,尽管它很早就崩溃了。编译 CCGLProgram.m 文件中的着色器时出错,所以我会进一步调查
    • 刚刚发现这个替换了 CCGLProgram.m 中的一个方法。我没有使用公认的答案,而是使用它下面的答案。 stackoverflow.com/questions/30864055/…。我相信它可以正常工作,因为我的应用程序现在比以前更进一步,但我遇到了 IAP 错误,我可能会从我的应用程序中删除这些错误。
    • 我在 Cocos2d 2.2 游戏中有 inApp 购买,它工作正常...您可能需要替换您已弃用的 inApp 代码...最好在单独的问题中发布您的其他问题...它与Cocos2d.
    【解决方案2】:

    Guru 的解决方案不完整。他的解决方案以 2 (1624x750) 而不是 3 (2436×1125) 的比例加载 iPhone X 图像。因此,您需要将设备的比例设置为 3。在 CCDirectiorIOS.m 的 setContentScaleFactor 中,您必须添加:

    if([UIScreen mainScreen].scale == 3.0f)
            __ccContentScaleFactor = 3;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多