刚接触游戏开发,最近一直在对cocos2d-x中的一些基础概念进行理解,一开始便对point尺寸和pixel尺寸之间的关系很模糊,于是在网上找了一下资料,并整理了自己现在的理解,如有什么理解错误的地方请大家指点一下,在这里先谢谢大家了!!
大家都知道:point构成了纸上的一幅图像,而pixel则是构成显示器上图像的基本单位,要将画好的一幅图像在显示器上显示出来就得做好point和pixel之间的映射,通俗点说就是纸上的一个point在显示器上需要几个pixel绘制才能绘制出来。
将point和pixel看作单位长度,用一个式子表示上面的关系就是: point <=对应但不一定相等=> pixel * n
现在试想,我们将一幅以point为分辨率单位,大小为resolutionInPointsX * resolutionInPointsY的2D图像在显示器中显示出来,此时它的point分辨率大小并未发生改变,只是point单位本身发生了伸缩。其中以pixel为分辨率单位的显示器大小为resolutionInPixelsX * resolutionInPixelsY。
由于图像在显示器中显示出来了,图像大小与显示器大小相等,则有:point = pixel * n (注意:这里变成了等号)
有了上面的等式我们就可以得出:width = resolutionInPointsX * pointX = resolutionInPointsX * nx * pixelX ----- a
height = resolutionInPointsY * pointX = resolutionInPointsY * ny * pixelX ----- b
且:width = resolutionInPixelsX * pixelX ----- c
height = resolutionInPixelsY * pixelX ----- d
其中pointX,pointY为point在x,y轴方向上的尺寸,pixelX,pixelY为pixel在x,y轴上的尺寸。
由式子a和c,b和d可以得出显示器中pixel分辨率大小和point分辨率大小之间的对应关系如下:
resolutionInPixelsX = resolutionInPointsX * nx
resolutionInPixelsY = resolutionInPointsY * ny
故当我们知道point尺寸时,还需要乘以一个对应的缩放因子才能得到对应的pixel尺寸,即
sizeInPixelsX = sizeInPointsX * nx
sizeInPixelsY = sizeInPointsY * ny
由于一开始我们已经知道设计尺寸resolutionInPointsX * resolutionInPointsY和显示器分辨率resolutionInPixelsX * resolutionInPixelsY,不难直接求出
nx = resolutionInPixelsX / resolutionInPointsX
ny = resolutionInPixelsY / resolutionInPointsY
在需要用到时直接获取引用即可。
总结上面的其实是一个很简单的道理:在x,y轴上resolutionInPoints与resolutionInPixels之间的转换是按对应比例nx,ny计算的。