• cocos2dx 3.x designResolutionSize须主动设置


    cocos2dx 3.x最初设置screenSize和designResolutionSize的地方如下:

    bool AppDelegate::applicationDidFinishLaunching() {

        // initialize director

        auto director = Director::getInstance();

        auto glview = director->getOpenGLView();

        if(!glview) {

            glview = GLViewImpl::create("title");

            director->setOpenGLView(glview);

        }

      ...

    }

    在iOS target下(在mac target下代码不一样),GLViewImpl::create(...)的实现代码如下:

    GLViewImpl* GLViewImpl::create(const std::string& viewName)

    {

        auto ret = new (std::nothrow) GLViewImpl;

        if(ret && ret->initWithFullScreen(viewName)) {

            ret->autorelease();

            return ret;

        }

        return nullptr;

    }

    bool GLViewImpl::initWithFullScreen(const std::string& viewName)

    {

        CGRect rect = [[UIScreen mainScreen] bounds];

        Rect r;

        r.origin.x = rect.origin.x;

        r.origin.y = rect.origin.y;

        r.size.width = rect.size.width;

        r.size.height = rect.size.height;

        return initWithRect(viewName, r, 1);

    }

    bool GLViewImpl::initWithRect(const std::string& viewName, Rect rect, float frameZoomFactor)

    {

        CGRect r = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);

        convertAttrs();

        CCEAGLView *eaglview = [CCEAGLView viewWithFrame: r

                                           pixelFormat: (NSString*)_pixelFormat

                                           depthFormat: _depthFormat

                                    preserveBackbuffer: NO

                                            sharegroup: nil

                                         multiSampling: NO

                                       numberOfSamples: 0];

        [eaglview setMultipleTouchEnabled:YES];

        _screenSize.width = _designResolutionSize.width = [eaglview getWidth];

        _screenSize.height = _designResolutionSize.height = [eaglview getHeight];

    //    _scaleX = _scaleY = [eaglview contentScaleFactor];

        _eaglview = eaglview;

        return true;

    }

    可见,默认cocos2dx 3.x会将designresolutionsize设成与screensize相等,于是显示效果如果在iphone上正常的话在ipad上肯定就不对了,所以我们必须主动设designresolutionsize。

    例如,可以在创建完glview后设置designResolutionSize:

    bool AppDelegate::applicationDidFinishLaunching() {

        // initialize director

        auto director = Director::getInstance();

        auto glview = director->getOpenGLView();

        if(!glview) {

            glview = GLViewImpl::create("title");

            director->setOpenGLView(glview);

        }

        //added by[yang chao]

        //by default glview is created "fullscreen", namely screenSize = designResolutionSize.width = eaglview size

        //but this is not what we want, we want use our own designResolutionSize, so we should set designResolution ourselves

        {

            director->getOpenGLView()->setDesignResolutionSize(1136,640,ResolutionPolicy::NO_BORDER);

        }

      

     ...

     }

  • 相关阅读:
    SQL 通配符
    正则表达式
    与运算(&)、或运算(|)、异或运算(^)、右移运算符(>>>)本质介绍
    博客园博客目录自动生成(页面目录)
    Linux查看并杀死被占用的端口
    Eclipse的环境配置
    L-Rui
    Web页面弹出窗口代码大全
    linux-用户
    linux-网络
  • 原文地址:https://www.cnblogs.com/wantnon/p/4329556.html
Copyright © 2020-2023  润新知