Walczę z tym, jak wdrożyć broń do walki w zwarciu, która może się zamachać po naciśnięciu klawisza.
Wyobrażam sobie dwa różne ataki (dźgnięcie i zamach)
Próbowałem utworzyć dwa urządzenia (postać + broń), dwa różne ciała, dwa różne ciała + złącze obrotowe, ale nie mogę zakodować go tak, aby zachowywał się tak, jak sobie wyobrażam.
ZASZTYLETOWAĆ:
Tak więc po naciśnięciu przycisku ciało / urządzenie (czujnik) wyjdzie na ~ 1 sekundę, a następnie zniknie (alternatywnie ciało / urządzenie może zawsze znajdować się na bohaterze i po naciśnięciu obraca się o 90 stopni wokół wierzchołków, i następnie obróć z powrotem do normy)
HUŚTAWKA:
To samo, ale teraz broń zacznie się od góry i opadnie. Broń będzie również czujnikiem.
Co próbowałem:
Stworzyłem dwa dynamiczne ciała.
Broń musi podążać za bohaterem, więc użyłem obrotowego stawu, żeby je trzymać. Po naciśnięciu klawisza ustawiam prędkość kątową broni na liczbę. Jednak broń nadal będzie się kręcić po zwolnieniu klucza. Próbowałem zaimplementować sprawdzenie if (jeśli kąt jest większy niż ___, ustaw prędkość kątową na zero). Oznacza to jednak, że broń przestanie się obracać, gdy ponownie naciśniesz klawisz.
Odpowiedzi:
Nawiasem mówiąc, zrobiłem dokładnie to, co próbujesz zrobić. Jedynym haczykiem jest to, że używałem Jbox2d, więc kod jest w Javie, ale nadal powinieneś być w stanie go rozgryźć, jeśli używasz C ++
Zasadniczo musisz używać przegubów / silników i wszystkich innych fajnych rzeczy, jeśli chcesz wykonywać ruchy wahadłowe. Oto fragment tego, jak wygląda mój kod w oparciu o kluczowe dane wejściowe:
A jeśli chodzi o budowanie broni i tak dalej, fragment wygląda tak.
Zdaję sobie sprawę, że wiele się tutaj dzieje, ale prawdopodobnie łatwiej jest, jeśli zapytasz mnie, co potrzebujesz jasności, a ja to wyjaśnię. Jeśli jednak nigdy nie używałeś żadnej z tych rzeczy, prawdopodobnie będziesz musiał sporo przeczytać.
EDYCJA >>
Zdaj sobie sprawę, że Box2d ma wszystkie funkcje wykrywania kolizji i fizyki wbudowane w swoje biblioteki. Podejmij wiarę, kiedy mówię, że łatwiej jest odkryć ich system niż próbować robić wszystko od zera. Jeśli chcesz kolizji, używasz urządzeń bodydefs, jeśli chcesz je obracać lub przesuwać, używasz połączeń. Na początku może się to wydawać nieco bardziej skomplikowane, ale ostatecznie oszczędza nieskończenie więcej czasu na korzystanie z ich metod.
W rzeczywistości sugerowałbym, że prawdopodobnie nigdy nie skończysz, jeśli spróbujesz robić rzeczy od zera, zakładając, że tworzysz grę fizyki. Ponieważ obliczenia takie jak tarcie, pływalność i nie wspominając o / wydajnym / wykrywaniu kolizji, zabiorą ci całe życie.
źródło
Znalazłem jakieś obejście tego problemu, ale nie jestem pewien, czy jest to dobry sposób na kodowanie.
Po naciśnięciu klawisza ustawiam prędkość kątową na 10, a następnie przy każdej aktualizacji proszę o sprawdzenie
źródło
if(weapon.getAngle() <= 0)
należy również ręcznie ustawić go pod określonym kątem, w przeciwnym razie nie będzie on precyzyjny iif-else
zamiast tego potrzebujesz instrukcjiif-if
. Wszystko sprowadza się do podstawowego kodowania Java, które nie ma wiele wspólnego z konkretnym problemem związanym z grą.Z tego, co mówisz, wydaje się, że możesz po prostu przesunąć kod, który resetuje prędkość kątową po osiągnięciu określonego kąta. Podejrzewam, że ten kod jest używany tylko po naciśnięciu przycisku, ponieważ mówienie, że naciśnięcie przycisku po raz drugi powoduje zatrzymanie ruchu (a tym samym działa kod testowy).
W takim przypadku można przenieść go do instrukcji „else” po kodzie, który sprawdza, czy klawisz został naciśnięty.
źródło
Jedną rzeczą, którą możesz zrobić, jest polecenie, uruchom metodę, która utworzy ciało względem pozycji głównego ciała za pomocą body.getPosition.set (); ustaw bity filtra tak, aby nie kolidowały, a następnie ustaw prędkość liniową lub zastosuj siłę, cokolwiek chcesz przesunąć do przodu po uruchomieniu timera, aby zniszczyć po x liczbie pętli gry
Lub możesz zrobić to samo, ale zamiast tego utworzyć połączenie dystansowe połączone z pryzmatycznym połączeniem tylko wzdłuż osi x, aby wykonać nagły ruch odepchnięcia ze zderzeniem połączonym z fałszem, aby nie kolidował z głównym korpusem, ta opcja prawdopodobnie działa lepiej,
dla ataku zamachu stwórz podobne ciało obrócone o połowę pi, mając tylko czubek miecza połączony z głównym ciałem, a zderzenie połączone z równym fałszem, oczywiście, wtedy możesz przyłożyć siłę motoryczną do stawu i impuls kątowy na korpus miecza niszczenie go po osiągnięciu ustalonego obrotu ciała lub po upływie określonego czasu,
jeśli potrzebujesz dodatkowej pomocy, po prostu skomentuj poniżej
źródło