Skocz do zawartości

Jeśli obj patrzy na drugi object.


ZyperPL

Rekomendowane odpowiedzi

możesz rysować linie w kierunku direction na daną odległość korzystając z lengthdir' ów i gdy linia koliduje z graczem(collision_line) wykonuje się akcja

 

Przepis na rysowanie linii:

GML
draw_line(x,y,lengthdir_x('długość linii',direction),lengthdir_y('długość linii',direction))
Odnośnik do komentarza
Udostępnij na innych stronach

Zmieniłem na 90 i mam jeszcze w warunku distance_to_object(najblizszywrog), a gdy chcę czasem zaatakować wroga, nic się nie dzieje, tak jakby postać nie patrzała prosto na wroga :/ Bez tego patrzenia wszystko jest ok, z samym distance_to...

 

Nie wiem w czym problem, ale może jeszcze po kombinuje i samo się naprawi :D

Odnośnik do komentarza
Udostępnij na innych stronach

Ale mozna i tak (zrób sobie nowy skrypt):

GML
dir=point_direction(x,y,argument0.x,argument0.y);

if (di==90 or dir==180 or dir==270 or dir==0)

{

return true;

}

else

{

return false;

}

 

I teraz sobie dajesz gdzies w stepie:

GML
if (mojskrypt(wrog)==true){Patrzy na niego w lini prostej :)}
Odnośnik do komentarza
Udostępnij na innych stronach

Dawka, sory ale co Ty pierdzielisz :/ ? Nie dość że podałeś kod _potencjalnie_ działający tylko po liniach prostych, to NAWET NIE UWZGLĘDNIŁEŚ W TYM KIERUNKU, W KTÓRYM PATRZY GRACZ, więc powiedz mi jakim cudem by to miało działać.

 

Już nie będę się też czepiał, że łatwiej by to było zrobić resztą z dzielenia, ale już kod

GML
if(warunek)

{

return true;

}

else

{

return false;

}

tak wali po oczach, że aż się nie da nie poprawić:
GML
return warunek;

I nie używaj == true, bo w przypadku warunku to to dosłownie nic nie robi.

 

Jak nie wiecie to się nie udzielajcie, plax. Bo tylko w błąd wprowadzacie.

 

Ed: Skupiłem się na jechaniu po Dawce i zapomniałem o temacie : D

Zmieniłem na 90 i mam jeszcze w warunku distance_to_object(najblizszywrog), a gdy chcę czasem zaatakować wroga, nic się nie dzieje, tak jakby postać nie patrzała prosto na wroga :/ Bez tego patrzenia wszystko jest ok, z samym distance_to...
Nie wiem dokładnie co jest, ale spróbuj dopisać do stepa gdzieś kod
GML
global.test = abs(angdiff(direction, point_direction(x, y, najblizszywrog.x, najblizszywrog.y)))
, odpal grę w Debug Mode (czerwona strzałka), i dodaj do listy monitorowanych zmiennych (zielona ikonka plusika) "global.test" - będziesz widział na żywo, jaka jest ta różnica kątów, jak daleko od przeciwnika gracz patrzy.

 

Łatwiej będzie stwierdzić, w czym problem - jeśli kąty w tym debug modzie będą się zgadzały z tym co widzisz "na oko" to problem tkwi gdzieś w tych twoich kodach na ataki itd., jeśli kąty nie będą działały (muszą działać, ale co tam) to napisz, zajmiemy się tym głębiej : D

Odnośnik do komentarza
Udostępnij na innych stronach

O fakin szit faktycznie popiernczyło mi się już zupełnie! Mój kod który sprawdza czy gracz znajduje sie w lini prostej do obiektu.

 

Edit: Czuje się zjechany. W sumie to chyba by się to przerobić na kod który sprawdza czy gracz patrzy ale gracz musiał by się poruszać w 4 kierunkach :P

Edit2: Sory Dawidds ale nie wiem o co ci ku### chodzi z tym true chyb po to jest aby go używać!! Jestem po prostu przyzwyczajony do innego języka programistycznego to pisze tak jak pamiętam więc nie rozumiem o co się czepiasz?!

Odnośnik do komentarza
Udostępnij na innych stronach

2. W GMie, jeśli coś ma być większe niż 0 (albo większe równe 1, nie pamiętam) to wystarczy if <warunek> - nie trzeba =true. Tak to już jest, natomiast jeśli napiszesz to =true, to nic się nie stanie
No, dokładnie o to chodzi, że nic się nie stanie : D

Równie dobrze mógłby zamiast if(instance_nearest(...)) pisać if(!!instance_nearest(...) >= 0.5 && pi==pi), ale... po co??

 

Jak już napisałem posta to aby był bardziej "wartościowy" dodałem ten drugi element który był niepotrzebny. Tyle. Koniec.

 

I dla ścisłości - w gmie true to >=0.5. Nie pytajcie dlaczego, gm lubi być inny.

Podobnie jak istnienie instance_exists() nie ma najmniejszego sensu, bo

GML
if(instance_exists(...))
oznacza dokładnie to samo, co
GML
if(instance_count(...))
Odnośnik do komentarza
Udostępnij na innych stronach

Podobnie jak istnienie instance_exists() nie ma najmniejszego sensu, bo
GML
if(instance_exists(...))
oznacza dokładnie to samo, co
GML
if(instance_count(...))
instance_number, chyba, że chciałeś napisać instance_exists( all ).
Odnośnik do komentarza
Udostępnij na innych stronach

A powiedz może, po co Ci dokładnie potrzebne to sprawdzanie tego kąta, jaki efekt chcesz uzyskać. Łatwiej będzie ;)

 

Bo wygląda na to, że najblizszywróg wbrew pozorom nie oznacza instancji wroga o najmniejszym dystansie do gracza, tylko po prostu tak nazwałeś obiekt : D

 

Chcesz ze wszystkich przeciwników wybrać tych, na których patrzysz i wykonać dla nich jakieś akcje?

GML
with(przeciwnik)

{

kierunekodgraczadoprzeciwnika = point_direction(player.x, player.y, x, y);

if(abs(angdiff(player.dir, kierunekodgraczadoprzeciwnika)) <= 45)

{

akcja tylko dla tych przeciwników, na których patrzysz prosto.

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

nic się nie stanie w sensie, że nie zrobi to różnicy, a pomiędzy instance_exists i instance_number/count jest różnica. Exists zwraca true lub false, a number zwraca ilość tych instancji. Nie maja one żadnej różnicy, gdy stawiasz warunek typu:

GML
if instance_exists()

 

ponadto, jak twierdzi dokumentacja ósemki - instance_exists może mieć w argumencie słowo all, nazwe obiektu bądź ID, a instance_count/number może mieć all lub nazwe. Wszystko dlatego, że każda instancja ma swoje ID, ale czasami trzeba je policzyć.

Odnośnik do komentarza
Udostępnij na innych stronach

-"exists zwraca true lub false" driobna uwaga - w gmie nie ma czegoś takiego jak "true" (jest, ale nie w takim sensie) - jest to najzwyczajniejsza w świecie stała, która oznacza 1. Technicznie taka sama, jak pi. False to oczywiście 0.

-

jak twierdzi dokumentacja ósemki - instance_exists może mieć w argumencie słowo all, nazwe obiektu bądź ID, a instance_count/number może mieć all lub nazwe. Wszystko dlatego, że każda instancja ma swoje ID, ale czasami trzeba je policzyć.
To ktoś tu chyba angielski słabo zna (albo korzystasz z polskiej dokumentcji ;p ) ;) - właśnie sprawdziłem i do obydwu tych funkcji można wsadzić zarówno all, id obiektu jak i id instancji.

 

Jeśli będziesz odpowiadał na ten post to rozwiń to:

Wszystko dlatego, że każda instancja ma swoje ID, ale czasami trzeba je policzyć.
Bo nie mam pojęcia, co według Ciebie trzeba "liczyć" aby dostać id instancji - ale lepiej nie ciągnijmy tego tematu już, ok? :)

 

I na dodatek nie wymieniłeś chyba największej różnicy, dla której JEST sens istnienia instance_exists() (właśnie mnie oświeciło, pisząc poprzedniego posta na to nie wpadłem : D) - wydajnosć. Może i na poziomie gmla nie ma żadnego sensu istnienia owego instance_exists() - NIE ISTNIEJE praktyczna sytuacja, w której ktoś potrzebował by funkcji instance_exists() i nie mógł by zamiast niej użyć instance_number() - jednak z poziomu wydajności jest, i to raczej spora.

A mianowicie instance_exists lecąc po kolekcji z instancjami przerywa wywołanie od razu po pierwszym wystąpieniu poszukiwanego obiektu - natomiast _number() siłą rzeczy musi dolecieć do końca, aby sprawdzić całą ilość. Więc gdyby zapisać te dwie funkcje pseudokodem to różniły by się one tylko tym jednym BREAK. Ale to tylko na poziomie runnera gma - z punktu widzenia kodera gmla nie ma żadnej.

Odnośnik do komentarza
Udostępnij na innych stronach

@Dawidss, najblizszywrog = instance_nearest(x,y,potwor);

 

Chcę zrobić, że gdy moja postać stoi to może zaatakować tylko potwora, który znajduje się na przeciw niej. I tak się dzieje, ale jeśli za graczem stoi DRUGI potwór wszystko się komplikuje... :/

 

Mój kod:

GML
najblizszy_potwor=instance_nearest(x,y,potwor)

if distance_to_object(najblizszy_potwor)<=5 && keyboard_check_pressed(ord('F')) && czas_do_ataku=0 && (abs(angdiff(direction, point_direction(x, y, najblizszy_potwor.x, najblizszy_potwor.y))) <= 90)

{

najblizszy_potwor.hp-=sila

sound_play(FistPunch)

alarm[0]=czas_atak*room_speed

}

global.test=(abs(angdiff(direction, point_direction(x, y, najblizszy_potwor.x, najblizszy_potwor.y))) <= 90)

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