|
1 | 1 | --- |
2 | | -title: Kształty Kolizji |
3 | | -brief: Ta instrukcja opisuje szczegóły działania kształtów kolizji silnika fizyki. |
| 2 | +title: Kształty kolizji |
| 3 | +brief: Komponent obiektu kolizji może używać kilku kształtów podstawowych albo jednego kształtu złożonego. |
4 | 4 | --- |
5 | 5 |
|
6 | | -# Kształty Kolizji |
| 6 | +# Kształty kolizji |
7 | 7 |
|
8 | | -Komponent Obiektu Kolizji (Collision Object) może używać kilku kształtów podstawowych (ang. primitive shapes) lub pojedynczego kształtu złożonego. |
| 8 | +Komponent obiektu kolizji może używać kilku kształtów podstawowych albo jednego kształtu złożonego. |
9 | 9 |
|
10 | 10 | ### Kształty podstawowe |
11 | 11 |
|
12 | | -Podstawowe kształty to *box* - prostokąt, *sphere* - sfera i *capsule* - kapsuła. Aby dodać kształt podstawowy, <kbd>kliknij prawym przyciskiem myszy</kbd> obiekt kolizji, a następnie wybierz <kbd>Add Shape</kbd>: |
| 12 | +Kształty podstawowe to *box*, *sphere* i *capsule*. Aby dodać kształt podstawowy, <kbd>kliknij prawym przyciskiem myszy</kbd> obiekt kolizji i wybierz <kbd>Add Shape</kbd>: |
13 | 13 |
|
14 | 14 |  |
15 | 15 |
|
16 | | -## Kształt prostokątny |
17 | | -Kształt prostokątny (box) posiada pozycję, rotację i wymiary (szerokość, wysokość i głębokość): |
| 16 | +## Kształt prostokątny (box) |
18 | 17 |
|
19 | | - |
| 18 | +Kształt prostokątny (box) ma pozycję, obrót i wymiary: szerokość, wysokość oraz głębokość: |
20 | 19 |
|
21 | | -## Kształt sfery |
22 | | -Sfera (sphere) posiada pozycję, rotację i średnicę: |
| 20 | + |
23 | 21 |
|
24 | | - |
| 22 | +## Kształt sfery (sphere) |
25 | 23 |
|
26 | | -## Kształt kapsuły |
27 | | -Kapsuła posiada pozycję, rotację, średnicę i wysokość: |
| 24 | +Kształt sfery (sphere) ma pozycję, obrót i średnicę: |
28 | 25 |
|
29 | | - |
| 26 | + |
| 27 | + |
| 28 | +## Kształt kapsuły (capsule) |
| 29 | + |
| 30 | +Kształt kapsuły (capsule) ma pozycję, obrót, średnicę i wysokość: |
| 31 | + |
| 32 | + |
30 | 33 |
|
31 | 34 | ::: important |
32 | | -Kształty kapsuły są obsługiwane tylko w przypadku korzystania z fizyki 3D (skonfigurowanej w sekcji *Physics* w pliku *game.project*). |
| 35 | +Kształty capsule są obsługiwane tylko przy korzystaniu z fizyki 3D, skonfigurowanej w sekcji *Physics* pliku *game.project*. |
33 | 36 | ::: |
34 | 37 |
|
35 | 38 | ### Kształty złożone |
36 | | -Kształty złożone (ang. complex shapes) można utworzyć z komponentu mapy kafelków lub z kształtu wypukłego (convex hull shape). |
37 | 39 |
|
38 | | -## Kształt kolizji mapy kafelków |
39 | | -Defold zawiera funkcję, która umożliwia łatwe generowanie kształtów fizyki dla Źródła Kafelków (Tile Source) używanego przez mapę kafelków. W [instrukcji Źródła Kafelków](/manuals/tilesource/#tile-source-collision-shapes) wyjaśniono, jak dodać grupy kolizji do źródła kafelków i przypisać kafelki do grup kolizji ([przykład](/examples/tilemap/collisions/)). |
| 40 | +Kształt złożony można utworzyć albo z komponentu Tile map (mapy kafelków), albo z kształtu convex hull. |
| 41 | + |
| 42 | +## Kształt kolizji Tile map |
40 | 43 |
|
41 | | -Aby dodać kolizję do mapy kafelków: |
| 44 | +Defold zawiera funkcję, która pozwala łatwo generować kształty fizyki dla Tile source używanego przez Tile map. W [instrukcji Tile source](/manuals/tilesource/#tile-source-collision-shapes) wyjaśniono, jak dodawać grupy kolizji do Tile source i przypisywać kafelki do grup kolizji ([przykład](/examples/tilemap/collisions/)). |
42 | 45 |
|
43 | | -1. Dodaj mapę kafelków do obiektu gry, <kbd>klikając go prawym przyciskiem myszy</kbd> i wybierając <kbd>Add Component File</kbd>. Wybierz plik mapy kafelków. |
44 | | -2. Dodaj komponent obiektu kolizji do obiektu gry, <kbd>klikając go prawym przyciskiem myszy</kbd> i wybierając <kbd>Add Component ▸ Collision Object</kbd>. |
45 | | -3. Zamiast dodawać kształty do komponentu, ustaw właściwość Kształt kolizji na plik mapa kafelków (*tilemap*). |
46 | | -4. Skonfiguruj *Properties* komponentu obiektu kolizji. |
| 46 | +Aby dodać kolizję do Tile map: |
47 | 47 |
|
48 | | - |
| 48 | +1. Dodaj Tile map do obiektu gry, <kbd>klikając prawym przyciskiem myszy</kbd> obiekt gry i wybierając <kbd>Add Component File</kbd>. Następnie wybierz plik Tile map. |
| 49 | +2. Dodaj komponent obiektu kolizji do obiektu gry, <kbd>klikając prawym przyciskiem myszy</kbd> obiekt gry i wybierając <kbd>Add Component ▸ Collision Object</kbd>. |
| 50 | +3. Zamiast dodawać kształty do komponentu, ustaw właściwość *Collision Shape* na plik *tilemap*. |
| 51 | +4. Skonfiguruj *Properties* komponentu obiektu kolizji jak zwykle. |
| 52 | + |
| 53 | + |
49 | 54 |
|
50 | 55 | ::: important |
51 | | -Należy zauważyć, że właściwość *Group* **nie** jest tutaj używana, ponieważ grupy kolizji są definiowane w źródle kafelków (tile source) mapy kafelków. |
| 56 | +Zwróć uwagę, że właściwość *Group* **nie** jest tutaj używana, ponieważ grupy kolizji są definiowane w Tile source mapy kafelków. |
52 | 57 | ::: |
53 | 58 |
|
54 | | -## Kształt kolizji wypukłej |
55 | | -Defold zawiera funkcję, która umożliwia tworzenie kształtu wypukłego (convex hull shape) z trzech lub więcej punktów. Możesz użyć zewnętrznego narzędzia, takiego jak [Defold Polygon Editor](/assets/defoldpolygoneditor/) lub [Physics Body Editor](https://selimanac.github.io/physics-body-editor/), aby utworzyć kształt wypukły. |
| 59 | +## Kształt wypukły (convex hull) |
56 | 60 |
|
57 | | -1. Utwórz plik kształtu wypukłego (o rozszerzeniu pliku .`.convexshape`) za pomocą zewnętrznego edytora. |
58 | | -2. Zamiast dodawać kształty do komponentu obiektu kolizji, ustaw właściwość *Collision Shape* na plik *convex shape*. |
| 61 | +Defold zawiera funkcję pozwalającą tworzyć kształt wypukły (convex hull) z trzech lub większej liczby punktów. |
| 62 | + |
| 63 | +1. Utwórz plik kształtu convex hull o rozszerzeniu `.convexshape` przy użyciu zewnętrznego edytora. |
| 64 | +2. Edytuj plik ręcznie w edytorze tekstu albo przy użyciu zewnętrznego narzędzia, opisanego poniżej. |
| 65 | +3. Zamiast dodawać kształty do komponentu obiektu kolizji, ustaw właściwość *Collision Shape* na plik *convex shape*. |
| 66 | + |
| 67 | +### Format pliku |
| 68 | + |
| 69 | +Format pliku convex hull używa tego samego formatu danych co pozostałe pliki Defold, czyli tekstowego formatu protobuf. Kształt convex hull definiuje punkty bryły. W fizyce 2D punkty powinny być podane w kolejności przeciwnej do ruchu wskazówek zegara. W trybie fizyki 3D używana jest abstrakcyjna chmura punktów. Przykład dla 2D: |
| 70 | + |
| 71 | +``` |
| 72 | +shape_type: TYPE_HULL |
| 73 | +data: 200.000 |
| 74 | +data: 100.000 |
| 75 | +data: 0.0 |
| 76 | +data: 400.000 |
| 77 | +data: 100.000 |
| 78 | +data: 0.0 |
| 79 | +data: 400.000 |
| 80 | +data: 300.000 |
| 81 | +data: 0.0 |
| 82 | +data: 200.000 |
| 83 | +data: 300.000 |
| 84 | +data: 0.0 |
| 85 | +``` |
| 86 | + |
| 87 | +Powyższy przykład definiuje cztery narożniki prostokąta: |
| 88 | + |
| 89 | +``` |
| 90 | + 200x300 400x300 |
| 91 | + 4---------3 |
| 92 | + | | |
| 93 | + | | |
| 94 | + | | |
| 95 | + | | |
| 96 | + 1---------2 |
| 97 | + 200x100 400x100 |
| 98 | +``` |
| 99 | + |
| 100 | +## Narzędzia zewnętrzne |
| 101 | + |
| 102 | +Istnieje kilka narzędzi zewnętrznych, których można użyć do tworzenia kształtów kolizji: |
| 103 | + |
| 104 | +* [Physics Editor](https://www.codeandweb.com/physicseditor/tutorials/how-to-create-physics-shapes-for-defold) od CodeAndWeb pozwala tworzyć obiekty gry ze sprite’ami i pasującymi do nich kształtami kolizji. |
| 105 | +* [Defold Polygon Editor](https://rossgrams.itch.io/defold-polygon-editor) można użyć do tworzenia kształtów convex hull. |
| 106 | +* [Physics Body Editor](https://selimanac.github.io/physics-body-editor/) również można użyć do tworzenia kształtów convex hull. |
59 | 107 |
|
60 | | -::: sidenote |
61 | | -Kształt taki nie będzie rysowany w Edytorze. Możesz włączyć [debugowanie fizyki](/manuals/debugging/#debugging-problems-with-physics) podczas działania programu, aby zobaczyć kształt. |
62 | | -::: |
63 | 108 |
|
64 | 109 | # Skalowanie kształtów kolizji |
65 | 110 |
|
66 | | -Obiekt kolizji i jego kształty dziedziczą skalę obiektu gry. Aby wyłączyć to zachowanie, odznacz pole wyboru "[Allow Dynamic Transforms](/manuals/project-settings/#allow-dynamic-transforms)", czyli Zezwalaj na dynamiczne transformacje w sekcji *Physics* pliku *game.project*. Należy pamiętać, że obsługiwane jest tylko skalowanie jednolite (uniform), a jeśli skala nie jest jednolita, zostanie użyta najmniejsza wartość skali. |
| 111 | +Obiekt kolizji i jego kształty dziedziczą skalę obiektu gry. Aby wyłączyć to zachowanie, odznacz pole [Allow Dynamic Transforms](/manuals/project-settings/#allow-dynamic-transforms) w sekcji *Physics* pliku *game.project*. Zwróć uwagę, że obsługiwane jest tylko skalowanie jednolite, a jeśli skala nie jest jednolita, użyta zostanie najmniejsza wartość skali. |
| 112 | + |
| 113 | +# Zmienianie rozmiaru kształtów kolizji |
| 114 | + |
| 115 | +Rozmiar kształtów obiektu kolizji można zmieniać w czasie działania przy użyciu `physics.set_shape()`. Przykład: |
| 116 | + |
| 117 | +```lua |
| 118 | +-- ustaw dane kształtu capsule |
| 119 | +local capsule_data = { |
| 120 | + type = physics.SHAPE_TYPE_CAPSULE, |
| 121 | + diameter = 10, |
| 122 | + height = 20, |
| 123 | +} |
| 124 | +physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data) |
| 125 | + |
| 126 | +-- ustaw dane kształtu sphere |
| 127 | +local sphere_data = { |
| 128 | + type = physics.SHAPE_TYPE_SPHERE, |
| 129 | + diameter = 10, |
| 130 | +} |
| 131 | +physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data) |
| 132 | + |
| 133 | +-- ustaw dane kształtu box |
| 134 | +local box_data = { |
| 135 | + type = physics.SHAPE_TYPE_BOX, |
| 136 | + dimensions = vmath.vector3(10, 10, 5), |
| 137 | +} |
| 138 | +physics.set_shape("#collisionobject", "my_box_shape", box_data) |
| 139 | +``` |
| 140 | + |
| 141 | +::: sidenote |
| 142 | +Na obiekcie kolizji musi już istnieć kształt właściwego typu o podanym id. |
| 143 | +::: |
67 | 144 |
|
68 | 145 | # Obracanie kształtów kolizji |
69 | 146 |
|
70 | 147 | ## Obracanie kształtów kolizji w fizyce 3D |
| 148 | + |
71 | 149 | Kształty kolizji w fizyce 3D można obracać wokół wszystkich osi. |
72 | 150 |
|
| 151 | + |
73 | 152 | ## Obracanie kształtów kolizji w fizyce 2D |
74 | | -Kształty kolizji w fizyce 2D można obracać tylko wokół osi Z. Obrót wokół osi X lub Y spowoduje nieprawidłowe wyniki i powinno się go unikać, nawet przy obracaniu o 180 stopni, aby efektywnie odwrócić kształt wzdłuż osi x lub y. Aby odwrócić kształt fizyczny, zaleca się korzystanie z [`physics.set_hlip(url, flip)`](/ref/stable/physics/?#physics.set_hflip:url-flip) i [`physics.set_vlip(url, flip)`](/ref/stable/physics/?#physics.set_vflip:url-flip). |
| 153 | + |
| 154 | +Kształty kolizji w fizyce 2D można obracać tylko wokół osi Z. Obracanie wokół osi X albo Y daje nieprawidłowe wyniki i należy go unikać, nawet przy obrocie o 180 stopni, który pozornie miałby tylko odwrócić kształt wzdłuż osi X albo Y. Do odwracania kształtu fizyki zaleca się używać [`physics.set_hlip(url, flip)`](/ref/stable/physics/?#physics.set_hflip:url-flip) oraz [`physics.set_vlip(url, flip)`](/ref/stable/physics/?#physics.set_vflip:url-flip). |
| 155 | + |
| 156 | + |
| 157 | +# Debugowanie |
| 158 | + |
| 159 | +Możesz [włączyć debugowanie fizyki](/manuals/debugging/#debugging-problems-with-physics), aby zobaczyć kształty kolizji w czasie działania. |
0 commit comments