cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用
发布时间:2020-12-14 17:15:21 所属栏目:百科 来源:网络整理
导读:适配模式 (1) EXACT_FIT :拉伸变形,使铺满屏幕。 会出现图像拉伸 屏幕宽 与 设计宽比 作为X方向的缩放因子,屏幕高 与 设计高比 作为Y方向的缩放因子。 保证了设计区域完全铺满屏幕,但是可能会出现图像拉伸。 (2) NO_BORDER :按比例放缩,全屏展示不
bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) { glview = GLViewImpl::createWithRect("My Game",Rect(0,960,500),0.7f); director->setOpenGLView(glview); } auto winSize = Size(480,320);//设计分辨率 auto screenSize = glview->getFrameSize();//屏幕分辨率, // turn on display FPS director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); register_all_packages(); float widthRate = screenSize.width / winSize.width; float heightRate = screenSize.height / winSize.height; if (widthRate < heightRate) { //说明设计分辨率宽度偏大 //这时候我们让高度适配,宽度裁剪掉。也就是图片宽度会超出屏幕外 //设置设计分辨率的和适配模式,进去看setDesignResolutionSize和updateDesignResolutionSize这两个个方法的源码可以知道: //下面这句代码走完之后,设计分辨率的高度被设置成480,但是宽度并不是800,而是做了缩放,下面注释详细介绍 director->getOpenGLView()->setDesignResolutionSize(winSize.width,winSize.height,ResolutionPolicy::FIXED_HEIGHT); } else { //说明设计分辨率高度偏大 //这时候我们让宽度适配,高度裁剪掉。也就是图片高度会超出屏幕外 director->getOpenGLView()->setDesignResolutionSize(winSize.width,ResolutionPolicy::FIXED_WIDTH); } /* updateDesignResolutionSize函数部分源码: _scaleX = (float)_screenSize.width / _designResolutionSize.width; _scaleY = (float)_screenSize.height / _designResolutionSize.height; if ( _resolutionPolicy == ResolutionPolicy::FIXED_HEIGHT) { _scaleX = _scaleY; //为了让_screenSize.width / _designResolutionSize.width = _screenSize.height / _designResolutionSize.height,//将_designResolutionSize.width重新赋值 _designResolutionSize.width = ceilf(_screenSize.width/_scaleY); } */ auto scene = HelloWorld::createScene(); director->runWithScene(scene); return true; } void GLView::setDesignResolutionSize(float width,float height,ResolutionPolicy resolutionPolicy) { CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNOWN,"should set resolutionPolicy"); if (width == 0.0f || height == 0.0f) { return; } _designResolutionSize.setSize(width,height); _resolutionPolicy = resolutionPolicy; updateDesignResolutionSize(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |