OS.min_window_size如何在iOS视网膜屏幕上工作



我知道您可以在gdscript中设置最小和最大窗口大小,以应对应用程序在台式机或笔记本电脑上运行并且可调整大小的情况。即

OS.min_window_size = Vector2(500, 500)
OS.max_window_size = Vector2(6000, 4000)

这是如何转化为带有视网膜屏幕的iOS的。最小和最大大小是表示物理像素宽度,还是表示逻辑像素宽度?文件没有说明这一点:

首先,在项目设置中有一个名为"允许Hidpi";您应该启用它来使用操作系统缩放它并没有真正引起问题,但由于向后兼容性,它在Godot3.x中默认被禁用

现在,您可以查询OS.get_screen_dpi()OS.get_screen_scale()OS.get_screen_max_scale()来了解游戏当前的缩放比例。

而且,您是正确的,文档没有指定min_window_sizemax_window_size是在缩放之前还是之后…

答案:我确信min_window_sizemax_window_size在缩放之后(在任何缩放下,而不是在当前缩放下(。如果我理解正确的话,那就是物理像素。


找出答案

从现在开始,这个答案就是弄清楚我上面所说的

现在,我相信在iOS中Godot将始终处于全屏模式。在这种情况下CCD_ 8和CCD_。

因此,这不是看iOS,而是OSX的set_max_window_size(来源(:

void OS_OSX::set_max_window_size(const Size2 p_size) {
if (is_no_window_mode_enabled()) {
return;
}
if ((p_size != Size2()) && ((p_size.x < min_size.x) || (p_size.y < min_size.y))) {
ERR_PRINT("Maximum window size can't be smaller than minimum window size!");
return;
}
max_size = p_size;
if ((max_size != Size2()) && !zoomed) {
Size2 size = max_size / get_screen_max_scale();
[window_object setContentMaxSize:NSMakeSize(size.x, size.y)];
} else {
[window_object setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
}
}

那么,让我们看看…

  • 它在全屏显示中被忽略
  • 最大大小必须大于或等于最小大小

到目前为止还不错。

那么我们就有了这个zoomed字段。据我所知,它在全屏幕上设置为true,在其他情况下设置为false。

因此,这就是我们正在寻找的逻辑:

Size2 size = max_size / get_screen_max_scale();
[window_object setContentMaxSize:NSMakeSize(size.x, size.y)];

它是这样的(伪代码(:OS_max_size = max_size / max_scaling


好的,现在我想看看setContentMaxSize:

窗口基本坐标系中窗口内容视图的最大大小。

😒


好的,有四种可能性:

  1. setContentMaxSize设置缩放前的最大大小(以像素为单位(。max_window_size是缩放之前的最大像素大小。

    如果是这样的话,我们会直接设置它。所以,事实并非如此。

  2. setContentMaxSize设置缩放前的最大大小(以像素为单位(。CCD_ 17是缩放后以像素为单位的最大大小。

    如果是这种情况,我们就必须将max_window_size除以比例。所以,可能就是这样。

  3. setContentMaxSize设置缩放后的最大像素大小。max_window_size是缩放之前的最大像素大小。

    如果是这种情况,我们将不得不将max_window_size乘以缩放。所以,我不这么认为。

  4. CCD_ 22设置缩放后以像素为单位的最大大小。CCD_ 23是缩放后以像素为单位的最大大小。

    如果是这样的话,我们会直接设置它。所以,事实并非如此。

因此,除非这是一个错误,否则max_window_size是缩放后的像素大小。这是任何缩放比例下的最大像素大小,而不是当前缩放比例,因为它使用get_screen_max_scale()而不是get_screen_scale()。CCD_ 27也会以同样的方式工作。*

相关内容

  • 没有找到相关文章