0

这两个功能之间的预期区别是什么:

    var size = cc.Director.getInstance().getWinSize();
    var sizePx = cc.Director.getInstance().getWinSizeInPixels();

在我的情况下,它们都返回完全相同的值。

在哪些情况下它们应该返回不同的值?

4

2 回答 2

2

在最近的 Cocos2dx 版本中,给出的答案不再准确,特别是因为框架已经放弃了对显式视网膜模式的支持,而是为程序员提供了独立于屏幕和资产分辨率设置游戏分辨率、执行缩放的能力必要时。

严格来说,函数getWinSize()返回您选择(使用CCGLView::setDesignResolution(float, float, ResolutionPolicy))的任何分辨率的值,以像素为单位;getWinSizeInPixels()返回设计分辨率乘以内容比例因子,这也是由您提供的CCDirector::setContentScaleFactor(float). 如果您不提供这些函数的值,Cocos2dx 将根据当前平台选择基于任意值的设计分辨率。例如,在 iOS 上,它将使用提供的 CAEAGLView 的像素大小(在某些情况下可能小于实际设备分辨率),两者都getWinSize()getWinSizeInPixels()返回相同的值。

getWinSize()getWinSizeInPixels()如果您将资源缩放到游戏分辨率,则会返回不同的值。在这种情况下,getWinSizeInPixels()指示如果您不必扩展资源,分辨率将是多少。

一些可能的设置来说明系统如何工作:

  • 1 组图像,1 种设计分辨率,许多设备分辨率 = 设计时缩放的图像!= 设备(高档的外观质量较低,低档时不必要的内存/cpu 使用),单分辨率布局代码(可能更简单)
  • 多组图像,1 种设计分辨率,许多设备分辨率 = 更少需要缩放图像,因为不同的资产覆盖了更广泛的目标范围,保留了单一分辨率的布局代码
  • 多组图像,多个/可采用的设计分辨率,许多设备分辨率 = 较少需要扩展,代码必须明确与分辨率无关(可能更复杂)

自从我不久前开始研究 Cocos2dx 以来,我可能有问题,但这是我经过一些测试后得到的结果。

于 2017-02-14T19:39:45.607 回答
1

一个返回点、逻辑像素,另一个返回物理像素。在 Retina 显示器中,这两个值是不同的 (2x)。

于 2014-05-02T08:42:58.153 回答