OS.min_window_size 如何在 iOS 视网膜屏幕上工作
How does OS.min_window_size work on iOS retina screens
我知道您可以在 gdscript 中设置最小和最大 window 大小,适用于您的应用程序在台式机或笔记本电脑上 运行 并且可以调整大小的情况。即
OS.min_window_size = Vector2(500, 500)
OS.max_window_size = Vector2(6000, 4000)
这如何在视网膜屏幕上转化为 iOS。最小和最大尺寸代表物理像素宽度,还是逻辑像素宽度?文档没有说清楚:
首先,项目设置中有一个名为“允许 Hidpi”的选项,您应该启用它才能使用 OS 缩放。 它并没有真正引起问题,但由于向后兼容,它在 Godot 3.x 中默认被禁用。
现在,您可以查询 OS.get_screen_dpi()
、OS.get_screen_scale()
和 OS.get_screen_max_scale()
以了解游戏当前的缩放比例。
而且,你是对的,文档没有说明 min_window_size
和 max_window_size
是在缩放之前还是之后……
答案:我确信min_window_size
和max_window_size
是在缩放之后(在任何缩放中,而不是在当前缩放中)。其中 - 如果我理解正确的话 - 是物理像素。
求答案
从这里开始,这个答案就是在弄清楚我上面所说的。
现在,我相信 iOS Godot 将始终处于全屏模式。在这种情况下 min_window_size
和 max_window_size
将被忽略。
因此,不是查看 iOS,而是 set_max_window_size
for OSX (source):
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
:
The maximum size of the window’s content view in the window’s base coordinate system.
好的,有四种可能:
setContentMaxSize
设置缩放前的最大尺寸(以像素为单位)。 max_window_size
是缩放前的最大像素大小。
如果是这样的话,我们就直接设置了。所以,事实并非如此。
setContentMaxSize
设置缩放前的最大尺寸(以像素为单位)。 max_window_size
是缩放后的最大尺寸(以像素为单位)。
如果是这种情况,我们将不得不将 max_window_size
除以缩放比例。所以,可能就是这样。
setContentMaxSize
设置缩放后的最大尺寸(以像素为单位)。 max_window_size
是缩放前的最大像素大小。
如果是这种情况,我们必须将 max_window_size
乘以缩放比例。所以,我不这么认为。
setContentMaxSize
设置缩放后的最大尺寸(以像素为单位)。 max_window_size
是缩放后的最大尺寸(以像素为单位)。
如果是这样的话,我们就直接设置了。所以,事实并非如此。
因此,除非这是一个错误,max_window_size
是缩放后的像素大小。这是任何缩放比例下的最大像素大小,而不是当前缩放比例,因为它使用 get_screen_max_scale()
而不是 get_screen_scale()
。 min_window_size
的工作方式相同。
*
我知道您可以在 gdscript 中设置最小和最大 window 大小,适用于您的应用程序在台式机或笔记本电脑上 运行 并且可以调整大小的情况。即
OS.min_window_size = Vector2(500, 500)
OS.max_window_size = Vector2(6000, 4000)
这如何在视网膜屏幕上转化为 iOS。最小和最大尺寸代表物理像素宽度,还是逻辑像素宽度?文档没有说清楚:
首先,项目设置中有一个名为“允许 Hidpi”的选项,您应该启用它才能使用 OS 缩放。 它并没有真正引起问题,但由于向后兼容,它在 Godot 3.x 中默认被禁用。
现在,您可以查询 OS.get_screen_dpi()
、OS.get_screen_scale()
和 OS.get_screen_max_scale()
以了解游戏当前的缩放比例。
而且,你是对的,文档没有说明 min_window_size
和 max_window_size
是在缩放之前还是之后……
答案:我确信min_window_size
和max_window_size
是在缩放之后(在任何缩放中,而不是在当前缩放中)。其中 - 如果我理解正确的话 - 是物理像素。
求答案
从这里开始,这个答案就是在弄清楚我上面所说的。
现在,我相信 iOS Godot 将始终处于全屏模式。在这种情况下 min_window_size
和 max_window_size
将被忽略。
因此,不是查看 iOS,而是 set_max_window_size
for OSX (source):
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
:
The maximum size of the window’s content view in the window’s base coordinate system.
好的,有四种可能:
setContentMaxSize
设置缩放前的最大尺寸(以像素为单位)。max_window_size
是缩放前的最大像素大小。如果是这样的话,我们就直接设置了。所以,事实并非如此。
setContentMaxSize
设置缩放前的最大尺寸(以像素为单位)。max_window_size
是缩放后的最大尺寸(以像素为单位)。如果是这种情况,我们将不得不将
max_window_size
除以缩放比例。所以,可能就是这样。setContentMaxSize
设置缩放后的最大尺寸(以像素为单位)。max_window_size
是缩放前的最大像素大小。如果是这种情况,我们必须将
max_window_size
乘以缩放比例。所以,我不这么认为。setContentMaxSize
设置缩放后的最大尺寸(以像素为单位)。max_window_size
是缩放后的最大尺寸(以像素为单位)。如果是这样的话,我们就直接设置了。所以,事实并非如此。
因此,除非这是一个错误,max_window_size
是缩放后的像素大小。这是任何缩放比例下的最大像素大小,而不是当前缩放比例,因为它使用 get_screen_max_scale()
而不是 get_screen_scale()
。 min_window_size
的工作方式相同。
*