这两个功能之间的预期区别是什么:
var size = cc.Director.getInstance().getWinSize();
var sizePx = cc.Director.getInstance().getWinSizeInPixels();
在我的情况下,它们都返回完全相同的值。
在哪些情况下它们应该返回不同的值?
这两个功能之间的预期区别是什么:
var size = cc.Director.getInstance().getWinSize();
var sizePx = cc.Director.getInstance().getWinSizeInPixels();
在我的情况下,它们都返回完全相同的值。
在哪些情况下它们应该返回不同的值?
在最近的 Cocos2dx 版本中,给出的答案不再准确,特别是因为框架已经放弃了对显式视网膜模式的支持,而是为程序员提供了独立于屏幕和资产分辨率设置游戏分辨率、执行缩放的能力必要时。
严格来说,函数getWinSize()
返回您选择(使用CCGLView::setDesignResolution(float, float, ResolutionPolicy)
)的任何分辨率的值,以像素为单位;getWinSizeInPixels()
返回设计分辨率乘以内容比例因子,这也是由您提供的CCDirector::setContentScaleFactor(float)
. 如果您不提供这些函数的值,Cocos2dx 将根据当前平台选择基于任意值的设计分辨率。例如,在 iOS 上,它将使用提供的 CAEAGLView 的像素大小(在某些情况下可能小于实际设备分辨率),两者都getWinSize()
将getWinSizeInPixels()
返回相同的值。
getWinSize()
getWinSizeInPixels()
如果您将资源缩放到游戏分辨率,则会返回不同的值。在这种情况下,getWinSizeInPixels()
指示如果您不必扩展资源,分辨率将是多少。
一些可能的设置来说明系统如何工作:
自从我不久前开始研究 Cocos2dx 以来,我可能有问题,但这是我经过一些测试后得到的结果。
一个返回点、逻辑像素,另一个返回物理像素。在 Retina 显示器中,这两个值是不同的 (2x)。