Niestandardowe kształty obiektów w grach
Oprócz prostokątnego oraz kolistego możemy przypisać obrazkowi bardziej złożony kształt stosując parametr shape. Oczywiście wcześniej musimy uruchomić zmienną z wymiarami obrazku.
Załadujmy do naszego przykładu dodatkowy obiekt - trójkąt. Bezpośrednie dodanie do silnika tego obiektu następuje nieprawidłowe interpretowanie trójkąta jako prostokąt. By temu zaradzić wystarczy przypisać zmiennej shape punkty obrazku. Zobaczmy jak tego dokonać.
Dodajemy rysunek do projektu a następnie przeciągamy obiekt do kodu, ustalamy pozycję y na 650 pikseli i następnie uruchommy naszą aplikację.
Warto zauważyć, że w ten sposób tworzymy obiekt o prostokątnych kształtach, co nie odzwierciedla taktycznego kształtu przedmiotu. |
Aby uzyskać prawdziwy trójkąt trzeba uwzględnić faktyczne wymiary naszego trójkąta a dokonać tego możemy z pomocą współrzędnych, które musimy sami wyznaczyć.
Aby to zadziałało musimy do kodu dodać:
local trojkat = display.newImage("trojkat.png")
trojkat.y=650
local ksztalt_trojkata={0, 300, 150, 0, 300, 300}
physics.addBody(trojkat, {density=0, friction=1, bounce=0.3, shape=ksztalt_trojkata})
Czyli wstawiamy obrazek "trojkat.png" (polecam ściągnąć na dysk, dodać do projektu i przetestować u siebie) i przesuwamy go na sam dół w punkt y=650.
Następnie tworzymy nową zmienną, tablicę o nazwie ksztalt_trojkata z kolejno punktami x,y, x1,y1, x2,y2 wyznaczającymi kolejne wierzchołki naszego trójkąta.
W klejnym kroku dodajemy objekt do silnika fizyki za pomocą polecenia addBody z dodatkowym parametrem shape=ksztalt_trojkata czyli z naszą tablicą wyznaczającą współrzędne tegoż obiektu.
Problem jednak jest w tym, że ciało fizyczne nie pokrywa się z faktycznym obiektem, zatem piłki będą reagowały na niewidoczny (jeśli włączymy tryb normalny a nie uruchomieniowy) obiekt a nie na ten właściwy. Co należy zatem zrobić, by te figury się pokrywały? Oczywiście wyznaczyć właściwe punkty dla x,y, x1,y1, x2,y2.
Ale przecież nie jest to łatwe, bo z edytora będzie ciężko, gdyby to był prostokąt to może nie byłoby to takie trudne ale przy trójkącie nie mówiąc już o nieregularnych kształtach to probem staje się poważny. Co zatem zrobić?
Jedno z rozwiązań przedstawiam w kolejnym artykule zapraszam do lektury.
Czytaj dalej: Fizyka w grach 2d - Android
Warning: include_once(includes/rss_fetch.php) [function.include-once]: failed to open stream: No such file or directory in /home/ekoinst/domains/pcwiedza.pl/public_html/tworzenie-gier/includes/funkcje.php on line 548
Warning: include_once() [function.include]: Failed opening 'includes/rss_fetch.php' for inclusion (include_path='.:/opt/alt/php52/usr/share/pear:/opt/alt/php52/usr/share/php') in /home/ekoinst/domains/pcwiedza.pl/public_html/tworzenie-gier/includes/funkcje.php on line 548