公司的项目 的 多分辨率适配 工作
2014-10-20 14:31
211 查看
仅供自己平时学习和工作所用~
公司所用的框架是quick cocos 2dx的,不过感觉这种多分辨率适配同样适用于cocos2dx,也不失为是一种方法。
这里还要考虑的东西是一个是位置的相对定位,还有一个是大小的相对设计。
首先我来说一下公司的项目(宝贝云计划)的分辨率适配我们需要怎样操作,然后再来说明这样做的原因。
使用方法:
在quickcocos2dx项目的config.lua中,把以下的内容全部屏蔽掉:
-- design resolution
-- CONFIG_SCREEN_WIDTH = 640
-- CONFIG_SCREEN_HEIGHT = 960
-- auto scale mode
-- CONFIG_SCREEN_AUTOSCALE = "FIXED_WIDTH"
相当于使用的是自己的多分辨率适配的方法,而屏蔽了quick自带的方法。
(1)首先从大小入手:
资源:背景图片的大小一般都为1260 * 940 (这个图片足够将绝大部分的手机的界面填满),但是其他的资源都是按照960*640的这个分辨率来提供的。
代码:所有的资源包括背景图片都是以setScale(Imagescale)这样的格式进行缩放。
(2)其次再来看位置:
这又分为两个部分:第一个部分是所有的背景元素(互动动画之类的东西),它们全部都被绘制在中心的960*640的区域内。这些的位置就直接使用getFixedX()和getFixedY()来进行定位就可以了。
第二部分是所有的ui元素(比如返回按钮,上一首,下一首,重新开始这样的按钮),它们在绘制的同时使用getFixedX()加或减 相应的 我们定义的偏移量(如CommonAPI.GAP_W),确定最后的位置。例如左上角的一个ui它的定位就应该是backBtn:setPosition(CommonAPI:getFixedX(34) - CommonAPI.GAP_W, CommonAPI:getFixedY(289) + CommonAPI.GAP_H)
ps:这里的getfixedX()和getFixedY() 它们的参数 都是在
480*320 这个分辨率我们量出来的值。
这样做的好处是可以将这个屏幕全部填满,使之没有黑边(不美观),同时我们真正有用的互动部分都放在屏幕中央的正方形以内,而周围则有一圈区域是在不同手机上呈现不同的情况,这里可以放置我们的ui,比如说我们的返回按钮要一直放在屏幕的左上角,距离左边界和上边界都很近。(使用方法在代码中都有体现,我这里只是进行了一个总结)
下面我们来说一说这种分辨率适配的原理:
1.本来quickcocos2dx可以控制图片的缩放,但是当我们注释掉config里的代码之后,图片的大小将不会有变化,也就是说缩放需要我们自己来做(通过setScale来做)。
2.(详见宝贝云计划commonapi文件calculateScale) 把960*640 的 依次往 800*480 和 1024*768里放,根据分子和分母的比值来进行判断,保证960*640的有超出部分,然后进行缩放。正好与相应边重合的即为标准。
3.背景图片大小:1260*940。
CommonAPI = {
-- 解析NPC配置文件,返回最终解析结果
SCALE = 1.0
,
FIXED_WIDTH = true --这里暂时用不到了
,
CENTER_X = 240 -- 中心参考点(根据像素计算出中心点)这个值会被重新赋值
,
CENTER_Y = 160 -- 中心参考点(根据像素计算出中心点)这个值会被重新赋值
,
BASE_W = 480 -- 分辨率基础宽度
,
BASE_H = 320 -- 分辨率基础高度
,
IMAGE_BASE_W = 960 -- 图片基础标准宽度
,
IMAGE_BASE_H = 640 -- 图片基础标准高度
,
BASE_IMAGE_SCALE = 1.0 -- 这个值也会被重新赋值
}
function CommonAPI:calculateScale( )
self.CENTER_X = display.widthInPixels / 2
self.CENTER_Y = display.heightInPixels / 2
if self.BASE_W/self.BASE_H >= display.widthInPixels/display.heightInPixels then
self.SCALE = display.widthInPixels / self.BASE_W
self.FIXED_WIDTH = true
self.BASE_IMAGE_SCALE = display.widthInPixels / self.IMAGE_BASE_W
else
self.SCALE = display.heightInPixels / self.BASE_H
self.FIXED_WIDTH = false
self.BASE_IMAGE_SCALE = display.heightInPixels / self.IMAGE_BASE_H
end
self.GAP_W = (display.widthInPixels - self.IMAGE_BASE_W*self.BASE_IMAGE_SCALE)/2 -- 超出显示线外的宽度
self.GAP_H = (display.heightInPixels - self.IMAGE_BASE_H*self.BASE_IMAGE_SCALE)/2 -- 超出显示线外的高度
end
-- 位置的缩放
function CommonAPI:getPosScale( )
return self.SCALE
end
function CommonAPI:getImageScale( )
return self.BASE_IMAGE_SCALE
end
-- 传进来的x是320*480下的X的距离
function CommonAPI:getFixedX( x )
return self.CENTER_X + self.SCALE * (x - self.BASE_W / 2)
end
--- 传进来的x是320*480下的Y的距离
function CommonAPI:getFixedY( y )
return self.CENTER_Y + self.SCALE * (y - self.BASE_H / 2)
end
公司所用的框架是quick cocos 2dx的,不过感觉这种多分辨率适配同样适用于cocos2dx,也不失为是一种方法。
这里还要考虑的东西是一个是位置的相对定位,还有一个是大小的相对设计。
首先我来说一下公司的项目(宝贝云计划)的分辨率适配我们需要怎样操作,然后再来说明这样做的原因。
使用方法:
在quickcocos2dx项目的config.lua中,把以下的内容全部屏蔽掉:
-- design resolution
-- CONFIG_SCREEN_WIDTH = 640
-- CONFIG_SCREEN_HEIGHT = 960
-- auto scale mode
-- CONFIG_SCREEN_AUTOSCALE = "FIXED_WIDTH"
相当于使用的是自己的多分辨率适配的方法,而屏蔽了quick自带的方法。
(1)首先从大小入手:
资源:背景图片的大小一般都为1260 * 940 (这个图片足够将绝大部分的手机的界面填满),但是其他的资源都是按照960*640的这个分辨率来提供的。
代码:所有的资源包括背景图片都是以setScale(Imagescale)这样的格式进行缩放。
(2)其次再来看位置:
这又分为两个部分:第一个部分是所有的背景元素(互动动画之类的东西),它们全部都被绘制在中心的960*640的区域内。这些的位置就直接使用getFixedX()和getFixedY()来进行定位就可以了。
第二部分是所有的ui元素(比如返回按钮,上一首,下一首,重新开始这样的按钮),它们在绘制的同时使用getFixedX()加或减 相应的 我们定义的偏移量(如CommonAPI.GAP_W),确定最后的位置。例如左上角的一个ui它的定位就应该是backBtn:setPosition(CommonAPI:getFixedX(34) - CommonAPI.GAP_W, CommonAPI:getFixedY(289) + CommonAPI.GAP_H)
ps:这里的getfixedX()和getFixedY() 它们的参数 都是在
480*320 这个分辨率我们量出来的值。
这样做的好处是可以将这个屏幕全部填满,使之没有黑边(不美观),同时我们真正有用的互动部分都放在屏幕中央的正方形以内,而周围则有一圈区域是在不同手机上呈现不同的情况,这里可以放置我们的ui,比如说我们的返回按钮要一直放在屏幕的左上角,距离左边界和上边界都很近。(使用方法在代码中都有体现,我这里只是进行了一个总结)
下面我们来说一说这种分辨率适配的原理:
1.本来quickcocos2dx可以控制图片的缩放,但是当我们注释掉config里的代码之后,图片的大小将不会有变化,也就是说缩放需要我们自己来做(通过setScale来做)。
2.(详见宝贝云计划commonapi文件calculateScale) 把960*640 的 依次往 800*480 和 1024*768里放,根据分子和分母的比值来进行判断,保证960*640的有超出部分,然后进行缩放。正好与相应边重合的即为标准。
3.背景图片大小:1260*940。
CommonAPI = {
-- 解析NPC配置文件,返回最终解析结果
SCALE = 1.0
,
FIXED_WIDTH = true --这里暂时用不到了
,
CENTER_X = 240 -- 中心参考点(根据像素计算出中心点)这个值会被重新赋值
,
CENTER_Y = 160 -- 中心参考点(根据像素计算出中心点)这个值会被重新赋值
,
BASE_W = 480 -- 分辨率基础宽度
,
BASE_H = 320 -- 分辨率基础高度
,
IMAGE_BASE_W = 960 -- 图片基础标准宽度
,
IMAGE_BASE_H = 640 -- 图片基础标准高度
,
BASE_IMAGE_SCALE = 1.0 -- 这个值也会被重新赋值
}
function CommonAPI:calculateScale( )
self.CENTER_X = display.widthInPixels / 2
self.CENTER_Y = display.heightInPixels / 2
if self.BASE_W/self.BASE_H >= display.widthInPixels/display.heightInPixels then
self.SCALE = display.widthInPixels / self.BASE_W
self.FIXED_WIDTH = true
self.BASE_IMAGE_SCALE = display.widthInPixels / self.IMAGE_BASE_W
else
self.SCALE = display.heightInPixels / self.BASE_H
self.FIXED_WIDTH = false
self.BASE_IMAGE_SCALE = display.heightInPixels / self.IMAGE_BASE_H
end
self.GAP_W = (display.widthInPixels - self.IMAGE_BASE_W*self.BASE_IMAGE_SCALE)/2 -- 超出显示线外的宽度
self.GAP_H = (display.heightInPixels - self.IMAGE_BASE_H*self.BASE_IMAGE_SCALE)/2 -- 超出显示线外的高度
end
-- 位置的缩放
function CommonAPI:getPosScale( )
return self.SCALE
end
function CommonAPI:getImageScale( )
return self.BASE_IMAGE_SCALE
end
-- 传进来的x是320*480下的X的距离
function CommonAPI:getFixedX( x )
return self.CENTER_X + self.SCALE * (x - self.BASE_W / 2)
end
--- 传进来的x是320*480下的Y的距离
function CommonAPI:getFixedY( y )
return self.CENTER_Y + self.SCALE * (y - self.BASE_H / 2)
end
相关文章推荐
- 由公司协同工作平台项目引发的Windows Active Directory(活动目录域)的应用问题
- 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目
- 以前工作过的公司的项目文件夹结构(经历时间和项目的考验,是比较合理的一个结构)
- LostRoutes项目日志——在main.js中添加多分辨率适配
- 在公司工作做第一个项目的收获,拿出来晒晒。
- 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目
- 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目
- 如果你是项目的一个组长,如果有个项目很急,要你尽快地完成,你是怎么分配工作任务或者你公司是怎么安排的?
- 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目
- 我们公司接到了一个比较大的IT软件项目,由于项目时间紧急,我们想采用有非常手段、非常方法,不自己进行全部的开发工作。
- [项目实施失败讨论Case] “凭心而论,在这家公司很敬业的工作了3年多,老板最后给我下的评语,大家都看看吧,千万别和我走同一条路!”(摘自csdn)
- Android项目研发之多分辨率适配
- 一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目
- 公司项目适配IOS9总结
- 做项目的公司如何做技术积累——对以前工作的一些回想
- 在公司工作做第一个项目的收获,拿出来晒晒。
- 项目经理做什么工作的,每个公司不一样吗?
- 公司项目须知和自己在工作上的心得体会
- 薪水是调节员工工作情绪的核武器。如果只有这个核武器的话,公司的管理一定有问题!