Масштабирование видовых экранов в Godot 3

Я новичок в Godot / GDScript, и я делаю игру с пиксельной графикой.

Графика с низким разрешением может быть легко увеличена путем масштабирования области просмотра, однако это влияет на масштаб всех узлов в дереве. Уменьшение масштаба области просмотра дает желаемые четкие края, которые нельзя получить при увеличении масштаба узла спрайта (в противном случае пиксельная графика будет размыта). Проблема возникает, когда я хочу отобразить текст или элементы графического интерфейса в игре.

Я хочу:

  1. рендеринг тайловой карты и игровых спрайтов на увеличенном узле / окне просмотра, например, 120x100 с масштабированием до размера окна
  2. Рендеринг кнопок и текста (hud) с постоянным более высоким разрешением поверх игры без масштабирования

Я пробовал играть в нескольких окнах просмотра, но пока не понимаю.

Любая помощь в настройке будет очень признательна!


person Walt Wonderwolk    schedule 17.10.2018    source источник


Ответы (1)


Я думаю, что установка для этого могла бы выглядеть так:

- scene
  - GameViewportContainer
    - Viewport
  - UIViewportContainer
    - Viewport

Если для параметра ViewportContainers stretch установлено значение true.

Затем в скрипте GameViewportContainer:

extends ViewportContainer

var your_custom_size = Vector2(128, 128)

func _ready():
    $Viewport.connect('size_changed', self, '_on_viewport_size_changed')
    change_viewport_size()

func _on_viewport_size_changed():
    change_viewport_size()

func change_viewport_size():
    $Viewport.set_size_override(true, your_custom_size)
    $Viewport.set_size_override_stretch(true)

Для дальнейшего чтения оформление заказа:

  1. https://godotengine.org/qa/25504/pixel-perfect-scaling
  2. https://github.com/godotengine/godot/issues/6506

Надеюсь это поможет.

person hola    schedule 18.10.2018
comment
Узел $ViewportContainer/Viewport не является узлом в предоставленном вами коде. Я заменил эти узлы на $Viewport. Затем я добавил tileMap в качестве дочернего элемента к области просмотра в GameViewportContainer, но там ничего не видно - дочерний элемент даже не отображается. - person Walt Wonderwolk; 18.10.2018
comment
Я заставил ребенка появиться, установив размер контейнера области просмотра на размер окна. - person Walt Wonderwolk; 18.10.2018
comment
Ах да, это опечатка. Отредактировано. - person hola; 21.10.2018
comment
В редакторе видовые окна привередливы. Я рекомендую создать еще одну сцену и отредактировать ее там, а затем поместить эту сцену в область просмотра. - person hola; 21.10.2018
comment
Другое дело, я думаю, что поддерево UIViewportContainer вообще не нужно. Вы можете просто использовать настройки редактора окна просмотра Godot, чтобы настроить это. Если только это не противоречит поддереву GameViewportContainer. - person hola; 21.10.2018