Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Warstwy Kanwy (Canvas layers)

Rzut Widoku oraz Elementy Kanwy (Viewport and Canvas items)

CanvasItem jest podstawą wszystkich węzłów 2D, czy to zwykłych takich jak Node2D, lub Control. Oba dziedziczą od CanvasItem. Elementy Kanwy można układać w struktury drzew. Każdy element dziedziczy transformacje od swojego rodzica: gdy rodzic się porusza jego dzieci również się poruszają.

Węzeł CanvasItem oraz węzły od niego dziedziczące są bezpośrednio bądź pośrednio dziećmi :ref:`Viewport <class_Viewport>`a, który je wyświetla.

Właściwość Viewporta Viewport.canvas_transform, pozwala na zastosowanie niestandardowej transformacji Transform2D w ramach hierarchi CanvasItem . Węzły takie jak Camera2D działają poprzez zmiane tej transformacji.

Aby uzyskać efekt skrolowania, zmiana właściwości kanwy 'transform' jest bardziej efektywna zamiast poruszać korzeniem elemnetów kanwy, który także poruszy całą sceną.

Zazwyczaj jednak nie chcemy, aby wszystko w grze lub aplikacji podlegało transformacji kanwy. Na przykład:

  • Parallax Backgrounds: Tło które porusza się wolniej niż reszta sceny.

  • UI: Pomyślmy o interfejsie użytkownika (user inteface - UI) lub o head-up display (HUD) nałożonych na nasz widok świata gry . Chcemy, aby licznik żyć, wyświetlanie wyników i inne elementy zachowały swoje pozycje na ekranie, nawet gdy nasz widok świata gry się zmienia.

  • Transitions: Możemy chcieć uzyskać wizualny efekt przejścia np. między scenami (zanikanie, blendowanie) to chcemy aby efekt pozostał w stałej lokalizacji ekranu.

Jak mogę to rozwiązać za pomocą jednej sceny?

CanvasLayers

Odpowiedzią jest CanvasLayer, który jest węzłem dodającym oddzielną warstwę renderowania 2D dla wszystkich swoich dzieci i wnuków (podwęzłów). Dzieci Viewporta będą domyślnie rysowane na warstwie numer "0", podczas gdy CanvasLayer może być rysowanym na dowolnym numerze warstwy. Warstwy z większym numerem będą rysowane wyżej od tych z mniejszym numerem. Będą je przysłaniać. CanvasLayers mają również własną transformację i nie zależą od transformacji innych warstw. Dzięki temu interfejs użytkownika może być stały w przestrzeni ekranu, podczas gdy nasz widok na świat gry się zmienia.

Przykładem tego jest tworzenie tła paralaksy. Można to zrobić ustawiająć w CanvasLayer warstwę na "-1". Ekran z punktami, ilością żyć bądź przyciskiem pauzy można utworzyć na warstwie "1".

Tutaj jest diagram jak to powinno wyglądać:

../../_images/canvaslayers.png

CanvasLayers są niezależne od pozycji w drzewie sceny i zależą wyłącznie od numeru warstwy, więc możesz je dodać na dowolnym poziomie drzewa sceny.

Informacja

CanvasLayers nie są konieczne do kontrolowania kolejności widoczności węzłów. Standardowym sposobem upewnienia się, że węzeł jest poprawnie rysowany "przed" lub "za" innymi, jest ustawianie kolejności węzłów na liście drzewa węzłów sceny. Wbrew intuicji najwyższe węzły w panelu sceny są rysowane za niższymi w rzutni. Węzły 2D mają również właściwość CanvasItem.z_index do kontrolowania ich kolejności rysowania.