Skocz do zawartości

Ograniczone pole celowania


Rekomendowane odpowiedzi

Witam.

 

Przydałaby mi się mała pomoc, mianowicie jak zrobić granice w celowaniu, żeby ręka nie latał wokół postaci. Lepiej załącze obrazek, bo z mojego ględzienia i tak nic pewnie nie wiadomo.

 

http://zapodaj.net/6216e118df206.png.html

 

 

Nie mam pojęcia od czego zacząć, żeby takową granice utworzyć. Oczywiście ręka jest już "przyspawana" do postaci i podąża za kursorem.

 

Step w broni

GML
// Przyspawanie do postaci

x=oKaban.x+36

y=oKaban.y-49

// Obrot w strone pola widzenia bohatera

image_angle = point_direction (x,y,mouse_x,mouse_y)

 

// Strzelanie

if mouse_check_button(mb_left) and ammo>=1

{

if alarm[0] = -1 then alarm[0] = 10;

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

if( image_angle > 60 ) image_angle =60;

if( image_angle < -60 ) image_angle = -60;

Odnośnik do komentarza
Udostępnij na innych stronach

Jak narazie przerobiłem troche skrypt ANtY'iego, mianowicie na taki:

GML
if(image_angle <= 90) image_angle = point_direction (x,y,mouse_x,mouse_y)

 

oraz zmieniłem sprite ręki:

http://zapodaj.net/948f102e906b6.png.html

 

, bo Threef miał racje, co do minusowego "angle", którego nie idzie ustawić, więc stopień 0, musiałem ustawić poprzez sprite. Mniej więcej oto mi chodzi w tym zdaniu:

 

Początkowy sprite:

http://zapodaj.net/65a453b4910fc.png.html

Po zmianie:

http://zapodaj.net/a1679dd5e8215.png.html

 

I tu kolejny błąd, którego nie udało mi się rozwiązać. Kiedy sprite broni wyjedzie poza 90 stopni, skrypt

GML
image_angle = point_direction (x,y,mouse_x,mouse_y)

przestaje działać, co uniemożliwia powrót do miejsca, gdzie wolno celować.

 

Co do "angle_difference()", nie mam pojęcia jak się z tym obchodzić, powpisywałem pare liczb, ale nic się nie działo, z radami pod "F12" też ciężko.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
@ANtY: image_angle nigdy nie będzie na minusie.

no to

 

GML
if( image_angle > 45 and image_angle < 180 ) image_angle =45;

else if( image_angle < 315 and image_angle >=180 ) image_angle = 315;

 

powinno chyba dzialac?

 

albo mam raka mozgu

Odnośnik do komentarza
Udostępnij na innych stronach

No prawie. ;) Problem jest taki że będzie działać tylko dla postaci obróconej w prawo.

 

@SimianVirus8: musisz pamiętać że kąt 0 stopni jest w prawo. 90 to chyba dół, etc. Chyba że znów się pomyliłem i jest odwrotnie.

angle_difference() zwraca różnicę pomiędzy dwoma kątami z uwzględnieniem przeskoku pomiędzy 0 a 359.9999999

GML
angle_difference(180,90)=90

angle_difference(90,180)=90

angle_difference(0,300)=60

 

W razie jakbym znów się pomylił (nie mam teraz otwartej dokumentacji) i angle_difference() zwracał też wartości na minusie to pamiętaj o abs()

GML
abs(-33)=33
Odnośnik do komentarza
Udostępnij na innych stronach

ANtY dobra wiadomość, nie masz raka mózgu, twój skypt działa jak należy, choć nie do końca go jeszcze rozumiem. Próbowałem pokombinować

z każdym skryptem jaki mi napisaliście ale ANtY'iego spisał się rewelacyjnie. Dzięki za pomoc chłopaki, pewnie jeszcze nie raz tu wróce :P.

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ę...