Chcę stworzyć serię rozszerzających się wzorów pocisków, które tworzą kształty, takie jak kwadraty, trójkąty itp. Przykład tego, czego szukam, można zobaczyć w poniższym filmie, w którym po zebraniu gwiazd pociski eksplodują w kształcie rozszerzająca się gwiazda:
12
Odpowiedzi:
Najłatwiejszym sposobem jest zaprojektowanie kształtu, a następnie obliczenie ruchu cząstek. W tej odpowiedzi będę budował kwadrat, ale dotyczy to dowolnego kształtu.
Zacznij od zaprojektowania kształtu jako pozycji względnych wokół jakiegoś punktu początkowego.
Teraz musisz obliczyć, jak kształt się rozszerzy. Aby to zrobić, po prostu obliczamy wektor wskazujący od
origin
do każdegopoint
, odejmującorigin
pozycję od naszejpoint
pozycji, a następnie normalizując wektor.vector = normalize(point.x - origin.x, point.y - origin.y)
.Teraz możemy obliczyć położenie punktów w dowolnym momencie za pomocą tego wektora. Kolejną pozycję punktów obliczasz wykonując
point.position += point.vector * point.velocity
. Przykład pseudokodu z wykorzystaniem naszego poprzedniego punktu:W ten sposób wszystkie punkty zostaną przesunięte na zewnątrz o 3 jednostki.
Notatki
źródło
Istnieje więc projekt o nazwie BulletML, który jest językiem znaczników do tworzenia złożonych wzorców cząstek / pocisków. Prawie na pewno będziesz musiał przenieść kod na swój własny język, ale może on zrobić naprawdę niesamowite rzeczy.
Na przykład ten szef został zrobiony w (mocno zmodyfikowanym) rozszerzeniu BulletML dla Unity3D (autor tego wzorca przesłał ten film, a nieszczęście jest szalone, a także dobre 1 ). To najtrudniejsza odmiana tego wroga i pokazuje całkiem dobrze, co potrafi BulletML (i sprawdź innych bossów Misery, takich jak Wallmaster ).
Albo mogę pokazać ten przykład, który jest wzorcem, który napisałem podczas pracy nad rozszerzeniem dla The Last Federation , przy użyciu starszej wersji systemu, który jest mniej przyjazny dla modów i używa tylko pojedynczych zmiennych AZ:
Zielone pociski, które tworzą te pierścienie, powstają z pocisku macierzystego, który obraca się z dużą prędkością, ale same się nie poruszają. Zadają ogromne obrażenia, utrzymując gracza na większym dystansie, ograniczając go do broni o niższych obrażeniach i pozwalając mobilnym obrońcom na nękanie gracza (gracz wygrał, jeśli zniszczona została nieruchoma struktura na środku).
Oto część składni XML, która tworzy te bąbelki:
Na obrazku widać niektóre fioletowe ujęcia „fali grawitacyjnej”, które niemal natychmiast przemieszczają się od źródła (które się obraca) do krawędzi bańki, po czym odradza się zielony strzał „zakrzywiony pasek”, który stoi tam przez 12 sekund przed znikanie. Niebieskie i żółte ujęcia, które pominąłem, ponieważ są znacznie bardziej skomplikowane.
Jeden z pozostałych wzorów ( pocisk artyleryjski ) w dodatku został napisany przez Misery'ego, chociaż dokonałem pewnych modyfikacji. Początkowo jest to penetrujący strzał o niskim poziomie obrażeń, który leci na duże odległości, a następnie eksploduje w ogromny pokaz sztucznych ogni, zadając mnóstwo obrażeń. Jego maksymalny zasięg był znacznie wyższy, niż gracz mógł osiągnąć, co zasadniczo zmusiło gracza do walki na krótkim dystansie, co było korzystne dla innych typów jednostek NPC ze względu na efekt strzelby (więcej pocisków skupionych w małej strefie).
BulletML jest ogólnie łatwy w obsłudze i może robić niesamowite rzeczy. Pociski mogą zmieniać kierunek, zmieniać prędkość, odradzać inne wzorce, umrzeć wcześnie, powtarzać kolekcję poleceń w pętli, używać opóźnień, zmieniać obraz duszka pocisku, podążać za ich rodzicem (lub nie) ... I wszystko, czego nie obsługuje napisz do tego.
Zdecydowanie polecam, jeśli grasz w poważną strzelankę. Nadal będziesz musiał opracować matematykę współrzędnych, aby uzyskać pożądane kształty, o czym mówi Charanor w swojej odpowiedzi, ale silnik pocisku, taki jak BulletML, zapewni ci o wiele większą elastyczność, że poświęcisz więcej czasu na projektowanie nowych wzorów, niż wymyślanie jak je kodować.
źródło
Jak wskazał Charanor, możesz użyć szeregu punktów, aby zdefiniować swój kształt, a następnie zaktualizować ich pozycję w czasie. Poniżej znajduje się przykładowy przykład implementacji kształtu gwiazdy lub kształtu niestandardowego za pomocą punktów:
źródło