Skocz do zawartości

dym trujący-particle


kriso99

Rekomendowane odpowiedzi

Particle nie mają opcji sprawdzania kolizji, więc nie zrobisz tego tak jak byś chciał. Dla tego będziesz musiał to zrobić na około.

Zacznij od stworzenia sobie tego efektu particli. Potem sprawdź na jaki obszar ten gaz ma oddziaływać, na przykład sprawdzając dystans do obiektów.

 

Rozumiem że masz jakiś obiekt typu granat który rozprzestrzenia ten gaz. W nim wykonujesz iterację by sprawdzić wszystkie obiekty w zasięgu działania gazu.

GML
for (i=0; i<instance_number(obj); i+=1)

{

if(point_distance(x,y,i.x,i.y)<128)//128 to zasięg dymu

{i.HP-=1}

}

obj to instancja na którą ma oddziaływać gaz. Powinieneś użyć tu parenta dla wszystkich przeciwników/graczy. Gdybyś był na prelekcji Gnyska wiedział byś że przy pomocy parentów można doskonale grupować obiekty. BTW Gnysek powinien tę swoją prezentację udostępnić :P

Odnośnik do komentarza
Udostępnij na innych stronach

1. Pierdzielisz particle i robisz to na obiektach - wtedy sobie dasz radę i będzie bardzo dokładnie

2. Dajesz obiektowi emitera jakąś okrągłą maskę i wtedy każdemu obiektowi możesz dać event "Collision with o_dym_emitter"

3. W każdym obiekcie sprawdzasz dystans do obiektu emitera (albo obiektów) i jeśli jest mniejszy niż x to ktoś jest zakażony

 

Spróbuj sobie wersji 2., jeśli uznasz że jest za mało precyzyjna odwzoruj sobie particle na obiektach i będziesz miał normalne kolizje.

 

Threef, co to za magiczne odwołanie "i.x, i.y"? : D

Odnośnik do komentarza
Udostępnij na innych stronach

Racja, zapomniałem o tym :)

 

Teraz napiszę to o co napisał Muuuuczek567 tak aby kriso99 zrozumiał.

W step (alarm?):

GML
if(instance_exist(granat))

if(collision_circle(x,y,128,granat,1,0))

{

//akcja

}

 

Dopiero wstałem i jestem pewien że to nie działa :D

Ale i tak uważam że moja koncepcja będzie lepiej działała, bo tylko obiekt granatu będzie sprawdzał warunki, i to tylko gdy będzie istniał. Wg @up każdy obiekt sprawdza czy jest w zasięgu gazu i robi to ciągle.

Odnośnik do komentarza
Udostępnij na innych stronach

@Threef:

każdy obiekt sprawdza czy jest w zasięgu gazu

Tak jest najszybciej i najprościej. Twoje rozwiązanie jest wolniejsze.

No i zamieniłbym ten kod na:

GML
a = instance_nearest(granat)

if(a)

if(collision_circle(x,y,128,a,1,0))

{

//akcja

}

Odnośnik do komentarza
Udostępnij na innych stronach

No tak, granatów może być wiele, i dalej uważam że mój sposób działał by lepiej bo wykonywał by się tylko gdy istnieje granat. Twój pomysł w każdym stepie sprawdza czy istnieje granat. Trzeba było by to sprawdzić tak jak Switch/If :)

Odnośnik do komentarza
Udostępnij na innych stronach

Temat fail! I to nasz fail!

 

Co do particle'i, gdzieś widziałem program który pozwalał na generowanie i losowanie systemów particle, i exportowanie ich do GM-a, poszukaj w necie, wiele takich jest.

Odnośnik do komentarza
Udostępnij na innych stronach

dym.png

zrobiłem takie coś na particlach jak zrobicie lepsze do prosze o podanie gml

 

kod jakby ktoś z początkujących szukał

Create

GML
[/b]Sname = part_system_create()

particle1 = part_type_create()

part_type_shape(particle1,pt_shape_smoke)

part_type_size(particle1,0.1,0.5,0.05,0)

part_type_scale(particle1,1,1)

part_type_color1(particle1,c_green)

part_type_alpha3(particle1,0.7,0.40,0.10)

part_type_speed(particle1,0.5,1,-0.01,0)

part_type_direction(particle1,0,359,0,0)

part_type_gravity(particle1,0,270)

part_type_orientation(particle1,0,0,0,0,1)

part_type_blend(particle1,-1)

part_type_life(particle1,40,80)

part_system_depth(Sname,-20)

emitter1 = part_emitter_create(Sname)

Step

GML
part_emitter_region(Sname,emitter1,x-20,x-20,y+20,y+20,0,0)

part_emitter_stream(Sname,emitter1,particle1,-4)

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