cocos2d-x屏幕 适配
// initialize director
Director* pDirector = Director::getInstance();
EGLView* pEGLView = EGLView::getInstance();
pDirector->setOpenGLView(pEGLView);
Size win_size=pDirector->getWinSize();//屏幕尺寸
int w=win_size.width;
int h=win_size.height;
int design_w=1280;
int design_h=720;
float s=w/(float)h;
float scale_w=w/(float)design_w;//宽度缩放比例
float scale_h=h/(float)design_h;//高度缩放比例
float scale=1;
//做分支处理(以宽度做为判断依据)
if(w>design_w){//屏幕尺寸比设计尺寸大,需要做放大处理
if(scale_w>scale_h){//宽度放大比例大于高度放大比例 先确定比例小的尺寸 即高度
design_h=720;
design_w=(int)(design_h/s);
}else{//宽度放大比例小于高度放大比例,先确定比例小的尺寸,即宽度
design_w=1280;
design_h=(int)(design_w/s);
}
}else
if(w
if(scale_w
design_w=1280;
design_h=(int)(design_w/s);
}else{//宽度放大比例小于高度放大比例,先确定比例小的尺寸,即宽度
design_h=720;
design_w=(int)(design_h*s);
}
}else{
design_w=1280;
design_h=(int)(design_w/s);
}
//按照这个尺寸 达到 全屏显示
pEGLView->setDesignResolutionSize(design_w, design_h, ResolutionPolicy::SHOW_ALL);
参考:
从Cocos2d-x 2.0.4开始,Cocos2d-x提出了自己的多分辨率支持方案,废弃了之前的retina相关设置接口,提出了design resolution概念。
有以下相关接口:
CCFileUtils::sharedFileUtils()->setResourceDirectory()被新接口CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath)替代 从Cocos2d-x 2.1.3开始,新加入了两种ResolutionPolicy(kResolutionFixedHeight, kResolutionFixedWidth),共5中模式。 官方分别在Multi_resolution_support 和 Mechanism_of_loading_resources有介绍。 本文从引擎使用者角度分析Cocos2d-x的多分辨率适配技术。 从Retina 到 design resolution在Cocos2d-x 2.0.4之前,有Retina的概念,这个是从cocos2d-iphone过来的概念。 cocos2d-iphone为了支持Retina iphone 设备,使用了-hd等后缀来区分iphone和Retine iphone的图片资源。在设计游戏的时候,使用point 坐标系,而非真正的pixel坐标系。这点和iOS native应用开发提出的point概念一至,不用修改代码,就能在640×960的设备上跑之前320×480的程序,只是图片会看起来模糊,一旦加入@2x的图片,iOS自动加载@2x的图片,实现对Retna iphone的支持。 point坐标系,在一定范围内能解决多分辨率支持的问题。但是当iphone5,ipad 3出来以后,iOS总共有5个分辨率需要支持,如果做一个universal的程序,是相当痛苦的。point坐标系并不能完全解决问题,android上的分辨率情况更加复杂。 design resolution应该是从point坐标系进化过来的概念,目的是屏蔽设备分辨率,精灵坐标都在design resolution上布局,但要实现这个目标并不简单。Cocos2d-x提供了一组相关的接口和5种分辨率适配策略,哪种策略才是我们需要的,下面我们一同探寻。
具体参考:http://www.cocoachina.com/applenews/devnews/2013/0809/6767.html
相关新闻>>
- 发表评论
-
- 最新评论 更多>>