Skocz do zawartości

wiekszy zamach wieksze demedż


Rekomendowane odpowiedzi

  • Administratorzy

Jeśli chcesz to zrobić na podstawie odległości od przeciwnika (im bliżej, tym miecz wchodzi w sumie głębiej), to wystarzczy np.

 

GML
//w kolizji

var dist,taken;

dist = point_distance(x,y,other.x,other.y);

 

taken = 20 - dist; //im dalej, tym mniej hp odbierze, np. 12 pixeli od (o ile jest tak duży miecz), będzie to raptem 8 hp)</span>

Odnośnik do komentarza
Udostępnij na innych stronach

jesli dobrze rozumuje wystarczyłoby zamienic x, y miecza z jego rekojesci na jego ostrze i juz by dzialalo lepiej prawie perfekcyjnie mozna rzec :P wlasnie zamierzam to sprawdzic tymczasem czekam na kolejne pomysly

 

@Edit

ehh nie dziala tak perfekcyjnie jak myslalem, aczkolwiek jest to kolejny krok do perfekcji :P

Odnośnik do komentarza
Udostępnij na innych stronach

Mój trochę bardziej skomplikowany pomysł ale i też bardziej realistyczny.

Taki rysunek poglądowy co gdzie i jak :D

uderzenie_miecza.png

O co mi chodzi, można by było wyliczać prędkość uderzenia wybranych punktów na mieczu z jaką trafiło w ciało przeciwnika i na tej podstawie obliczyć zadany dmg.

 

I teraz jak by miało się już tych 8 zmiennych wyliczone ( 2 punkty na mieczu w poprzednim stepie i obecnym ) to prędkość tych punktów wyliczyli byśmy o tak:

GML
speed1 = sqrt( sqr(x-xprevious) + sqr(y-yprevious) );

speed2 = sqrt( sqr(x2-x2previous) + sqr(y2-y2previous) );

 

No i zadany dmg przy kolizji tych punktów

GML
potworekID1 = collision_point(x,y, potworek, 0, 1 );

potworekID2 = collision_point(x2,y2, potworek, 0, 1 );

 

if ( potworekID1 != noone ) potworekID1.HP -= speed1 * (STRbohatera + atrybutAtakuMiecza )

if ( potworekID2 != noone ) potworekID2.HP -= speed2 * (STRbohatera + atrybutAtakuMiecza )

 

oczwiście to tylko teoria, którą teraz na szybko wymyśliłem i da się to ulepszyć oraz zoptymaliować pozatym nie wiem czy jest w 100% poprawna + jest jeden bug - za szybkie machnięcie może spowodować niewykrycie kolizji przez collision_pointy więc trzeba byłoby znaleźć jeszcze na to jakiś sposób ale na chwilę obecną nic nie wymyślę :P

Odnośnik do komentarza
Udostępnij na innych stronach

DUŻO prościej jest obliczać różnicę poprzedniego i aktualnego kątu miecza.

GML
silauderzenia = abs(kąt_miecza-poprzedni_kąt_miecza) //trzeba dodać korekcję dla wartości bliskich 360

poprzedni_kąt_miecza = kąt_miecza

 

Choć w sumie jakim by to sposobem nie zrobić, to jest to bez sensu - jeśli będziesz trzymał myszkę blisko miecza, to zamachy będą bardzo silne.

Odnośnik do komentarza
Udostępnij na innych stronach

@up W Die By The Sword był zrobiony taki system podobny do mojego, tyle że w 3D, bardziej precyzyjny i bardziej skomplikowany, tam prędkość machania mieczem była zależna nie tylko od szybkości ruchu myszką ale także od masy miecza i siły bohatera.

Nazwali ten system Vsim i do orginału tej gry dołączali specjalną myszkę którą dało się wykonywać ruchy 3D :D ( szybko to wycofali )

 

Edit: Myszka oczywiście się nie przyjęła a o grze słyszało mało ludzi. Bardzo fajne uczucie jak się skrzyżują miecze, ta gra to jest bardziej symulator walki mieczem i się bardzo fajnie w to grało.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...