Cygnus Opublikowano 5 Lipca 2015 Udostępnij Opublikowano 5 Lipca 2015 Cześć wszystkim,mam wroga,ale obecnie mój wróg tylko chodzi i nic więcej nie robi,chciałbym,żeby trochę zaczął myśleć: np jak zobaczy bohatera,to zacznie go trochę gonić,jak go zobaczy,to zacznie strzelać w jego kierunku, potrafi zatrzymać się na krawędzi jak dalej nie ma platformy losowe zachowanie,ot takie AI wroga (Game Maker Studio) tutaj kod mojego wroga: obj_enemy_bulwa CREATE GML ///Ustawienia event_inherited(); hp = 15; maxHp = 15; hurtClock = 0; skok = 0; image_xscale *= choose(1,-1); STEP GML ///Ruch wroga if !place_meeting(x+sign(image_xscale),y-2,par_solid){ if image_xscale > 0 { hspd = min(hspd+sign(image_xscale),2); } else if image_xscale < 0 { hspd = max(hspd+sign(image_xscale),-2); } } if hspd == 0 { image_xscale *= -1; unstick(8); } //Obrazenia wroga if hurtClock > 0 { visible = !visible; hurtClock -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); with instance_create(x,y,obj_entity_die) { sprite_index = sprWrogGinie; //sprite do poruszania sie wroga image_xscale = other.image_xscale; image_yscale = other.image_yscale; hspd = other.hspd; vspd = other.vspd; } } Collision z obj_player GML ///Zgniecenie if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==0{ skok+=1; hp-=10; other.vspd = -12; with instance_create(x,y,obj_entity_die) { sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy image_xscale = other.image_xscale; hspd = other.hspd; vspd = other.vspd; } } else if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==1{ other.vspd = -12; hp-=10; with instance_create(x,y,obj_entity_die) { sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy image_xscale = other.image_xscale; hspd = other.hspd; vspd = other.vspd; } instance_destroy(); } A tu kod obj_player w kolizji z obj_enemy_bulwa GML ///Obrazenia jakie wrog zadaje Bohaterowi if !vspd > 0 && hurtClock == 0 && other.hurtClock == 0 && sign(x-other.x) == other.image_xscale { hp -= 15; hurtClock = room_speed; vspd = -8; hspd = sign(x-other.x)*16; } ///jakos to rozgryzlem tutaj wrog zabiera mi jedno zycie w momencie kontaktu z nim if( hp <= 0 ) { hp = 100; global.life -= 1; x = start_x; y = start_y; } if( global.life <= 0 ) { room_goto( rm_game_over ); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 5 Lipca 2015 Udostępnij Opublikowano 5 Lipca 2015 No to żeby wróg się zatrzymał to zrób if place free, i podaj o 1 wysokość wroga w dół i o 1 kratkę w prawo/lewo. Kierunek strzelania, to sprawdzanie czy x> czy x< od x bohatera. Łatwo jest też dość zrobienie objektu jak o_attack, i tworzenie go przy ataku przeciwnika, można wsadzić do niego animacje i można go dodać do każdego przeciwnika, zmieniając tylko przy create inny dmg, albo skalować go w zależności od poziomu :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 5 Lipca 2015 Udostępnij Opublikowano 5 Lipca 2015 Z tego co rozumiem to kod który skopiowałeś skądś, więc nie obrażając Cię, pewnie go nie rozumiesz. Sam w sumie go średnio rozumiem. Nic dziwnego, kod w końcu chyba nie Twój. Ponieważ to jest platformówka, to wróg powinien móc iść w lewo, w prawo ew. skakać. No więc. Jeśli napotka gracza, niech sprawdza gdzie jest. Jak na lewo, to idzie w lewo, jak na prawo, to idzie w prawo, jak po drodze przeszkoda, to skacze. To gdzie jest gracz, może sprawdzać po koordynatach, tzn. GML if(obj_gracz.x<x) ruch=-1; //no, że on jest na lewo, czyli -1 if(obj_gracz.x>x ruch=1; //analogicznie, teraz na prawo, czyli 1 x+=ruch; //i dodajemy naszą zmienną ruch po x</span> Jeśli chodzi o skakanie GML if!(place_free(x+ruch, y)) //jeśli nie jest wolne miejsce tam gdzie idziemy kod_na_skakanie(); //to niech podskoczy</span> Co do widzenia postaci musisz się pobawić z collision_line() i sprawdzaniem odległości. Co do zatrzymywania się przy krawędzi. Sprawdzaj place_free(x+ruch, y+5), jeśli jest wolne miejsce w danej pozycji, to widocznie nic tam nie ma, niech zmienia kierunek ruchu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 5 Lipca 2015 Autor Udostępnij Opublikowano 5 Lipca 2015 Kod pisze kolega,ale jest niedostępny przez dłuższy czas,ja zajmuje ja próbuje go trochę wesprzeć...Dobra mniejsza o to... No dobra..jak zrobić,żeby ten wróg widząc mojego bohatera np zatrzymał się i zaczął strzelać do niego w odpowiednim kierunku,jak go zobaczy z lewej strony,to stoi i strzela w lewo,a jak w prawej to stoi i strzela w prawo. w Stepie wroga dodałem to: GML if distance_to_object (obj_player)<80 { instance_create(x,y,obj_pociskArmata) } Ok teraz mnie jak zobaczy w odpowiedniej odległości zaczyna strzelać..ale tak dziwnie,bo jak idę w lewo,to on chodzi strzela nie zatrzymuje się i na odwal strzela raz z prawej raz z lewej nie ważne z której strony ja się znajduje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 5 Lipca 2015 Udostępnij Opublikowano 5 Lipca 2015 Kod pisze kolega,ale jest niedostępny przez dłuższy czas,ja zajmuje ja próbuje go trochę wesprzeć...Dobra mniejsza o to... No dobra..jak zrobić,żeby ten wróg widząc mojego bohatera np zatrzymał się i zaczął strzelać do niego w odpowiednim kierunku,jak go zobaczy z lewej strony,to stoi i strzela w lewo,a jak w prawej to stoi i strzela w prawo. w Stepie wroga dodałem to: GML if distance_to_object (obj_player)<80 { instance_create(x,y,obj_pociskArmata) } Ok teraz mnie jak zobaczy w odpowiedniej odległości zaczyna strzelać..ale tak dziwnie,bo jak idę w lewo,to on chodzi strzela nie zatrzymuje się i na odwal strzela raz z prawej raz z lewej nie ważne z której strony ja się znajduje. Trzeba jeszcze zrozumieć objekt pocisk :) Zobaczyć co on robi... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 5 Lipca 2015 Udostępnij Opublikowano 5 Lipca 2015 W ogóle nie nadajesz prędkości ani kierunku temu pociskowi. Jeśli widzi gracza niech się nie rusza. speed=0; chyba wystarczy, ale w sumie nie wiem, nie rozumiem tego kodu. Ewentualnie hspeed=0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 tutaj kod pocisku on cyklicznie wypuszcza kule,bo to od mojej armaty kod,ale jak teraz ten kod przerobić do wroga,żeby na oślep nie rzucał kulami,tylko np stanął i strzelał w określonym kierunku tak jak wcześniej pisałem jeśli stoję z prawej,to on się obraca w prawo i strzela,a jeśli z lewej,to obraca się w lewo i strzela;)aż z niknę mu z pola widzenia wtedy zaczyna znów sobie spokojnie chodzić. obj_pociskArmata kolizja z graczem GML ///obrazenia od kul armatnich if !vspd > 0 && hurtClock == 0 || place_meeting(x+2,y,obj_pociskArmata) || place_meeting(x,y-2,obj_pociskArmata) || place_meeting(x-2,y,obj_pociskArmata) || place_meeting(x,y-2,obj_pociskArmata) && other.hurtClock == 0 && sign(x-other.x) == other.image_xscale { hp -= 10; hurtClock = room_speed; vspd = -8; hspd = sign(x-other.x)*5; } ///tutaj wrog zabiera mi jedno zycie w momencie kontaktu z nim if( hp <= 0 ) { hp = 100; global.life -= 1; x = start_x; y = start_y; } if( global.life <= 0 ) { room_goto( rm_game_over ); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry } a tu cały kod mojego obj_pociskArmata Create GML ///Ustawienia pociskow armatnich move_towards_point(156,616,8); move_towards_point(156,616,9); event_inherited() owner = noone; strenght = 1; explode = false; explosionRadius = 22; explosionStrength = 10; g = 0; f = 0; Destroy GML if explode == true { with obj_destructible_terrain { surface_set_target(surf); draw_set_blend_mode(bm_subtract); draw_set_colour(c_white); draw_circle(other.x,other.y,other.explosionRadius,false); draw_set_blend_mode(bm_normal); surface_reset_target(); update = true; } with instance_create(x,y,obj_pociskArmata) { owner = other.owner; followOwner = false; strength = other.explosionStrength; sprite_index = spr_pocisk_armatek; image_xscale = 1/16*other.explosionRadius; image_yscale = image_xscale; } part_type_size(pExplosion,explosionRadius/16,explosionRadius/16,-explosionRadius/64,0); part_particles_create(partSystem,x,y,pExplosion,1); } End Step GML ///Particle and stop var hspdP, vspdP; hspdP = hspd; vspdP = vspd; event_inherited(); part_type_sprite(pz,sprite_index,true,false,false); part_particles_create_colour(partSystem,x,y,pz,image_blend,1); if hspd != hspdP || vspd != vspdP+g || bbox_right < -explosionRadius || bbox_left >= room_width+explosionRadius || bbox_bottom < -explosionRadius || bbox_top >= room_height+explosionRadius { with instance_place(x+lengthdir_x(hspdP,0)+lengthdir_x(vspdP,270),y+lengthdir_y(hspdP,0)+lengthdir_y(vspdP,270),all) { event_perform(ev_collision,other.object_index); } instance_destroy(); } To jest akurat kod od moich armat,ale może coś prostszego dla wroga jeśli chodzi o pocisk,którym strzelać będzie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 6 Lipca 2015 Udostępnij Opublikowano 6 Lipca 2015 My nie możemy robić tej gry za Ciebie. Może zrób coś łatwiejszego samemu, a później zobacz co trzeba dodać u niego. Poza tym widząc rozstrzał umiejętności, to jak twój kolega wróci, to się może przerazić, widząc kod który napiszesz :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 Przecież na to nie liczę,że zrobicie grę za mnie;) kolegi nie ma przez ponad miesiąc czasu,a chciałem go trochę odciążyć.. Chodzi mi głównie o prosty kod na strzelanie wroga...armaty są zbyt skomplikowane żeby przerabiać ten kod dla wroga,niech zostanie to w armatach.. Chciałbym tylko,żeby wróg w momencie,kiedy mnie zobaczył zatrzymał się i zaczął cyklicznie strzelać nie na odwal w różnych kierunkach tylko w konkretnym kierunku jak stoję z lewej strony,to strzela w lewo,jak z prawej to w prawo;) o coś takiego mi chodzi;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 6 Lipca 2015 Udostępnij Opublikowano 6 Lipca 2015 Spróbuj zrobić coś takiego: Jeśli chodzi o zatrzymywanie się: if dinstance_to_object( obj_player) <256{ speed=0} A co do kierunku strzelania if x<obj_player.x{ bull=instance_create(x,y,obj_pociskArmata) bull.direction=90} else{ bull=instance_create(x,y,obj_pociskArmata) bull.direction=170} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 No z tym kodem teraz to wróg stoi cały czas nawet nie widząc mnie i strzela z dużą serią pocisku;) nie sposób do niego podejść;) Może w obj_pociskArmata trzeba coś zrobić żeby nadać temu odpowiedni kierunek i szybkość Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 6 Lipca 2015 Udostępnij Opublikowano 6 Lipca 2015 Musisz jeszcze zrobić odwrotność: if dinstance_to_object( obj_player) <256{ speed=0} else{ speed=5} Czy ten przeciwnik wgl. ma jakiś kod chodzenia ? [ dobra popatrzyłem wyżej, i go nie rozumiem :D ] No to dodaj to do pocisku w create speed=5 if x<obj_player.x{ direction=90} else{ direction=170} A tam przy create, dodaj jakiś alarm z odpowiednim czasem... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 obj_wrog STEP GML if distance_to_object( obj_player) <256{ speed=0} else{ speed=5} if x<obj_player.x{ bull=instance_create(x,y,obj_pociskArmata) bull.direction=90} else{ bull=instance_create(x,y,obj_pociskArmata) bull.direction=170} if !place_meeting(x+sign(image_xscale),y-2,par_solid){ if image_xscale > 0 { hspd = min(hspd+sign(image_xscale),2); } else if image_xscale < 0 { hspd = max(hspd+sign(image_xscale),-2); } } if hspd == 0 { image_xscale *= -1; unstick(8); } //Obrazenia wroga if hurtClock > 0 { visible = !visible; hurtClock -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); with instance_create(x,y,obj_entity_die) { sprite_index = sprWrogGinie; //sprite do poruszania sie wroga image_xscale = other.image_xscale; image_yscale = other.image_yscale; hspd = other.hspd; vspd = other.vspd; } } obj_pocisk Create GML speed=5 if x<obj_player.x{ direction=90} else{ direction=170} to zadziała tak? a co w kolizji pocisk z graczem wpisac? i w alarmie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 6 Lipca 2015 Udostępnij Opublikowano 6 Lipca 2015 wywal to z create pocisku GML if x<obj_player.x{ direction=90} else{ direction=170} zostaw tylko speed... Ale ty nie masz nawet wpisanego kierunku chodzenia przeciwnika tak ? przed create pocisku zrób if ready=1{ wewnatrz ready=0 i alarm[0]= (czas) w alarmie ready=1 i w create ready=1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 obj_kularmatnia mam tak Create GML ///tor lotu kul armatnich (punkt do ktorego maja leciec) move_towards_point(19084,616,8); move_towards_point(19084,616,9); event_inherited() owner = noone; strenght = 1; explode1 = false; explosionRadius = 25; explosionStrength = 10; g = 0; f = 0; Destroy GML if explode1 == true { with obj_destructible_terrain { surface_set_target(surf); draw_set_blend_mode(bm_subtract); draw_set_colour(c_white); draw_circle(other.x,other.y,other.explosionRadius,false); draw_set_blend_mode(bm_normal); surface_reset_target(); update = true; } with instance_create(x,y,obj_kularmatnia) { owner = other.owner; followOwner = false; strength = other.explosionStrength; sprite_index = spr_pocisk_armatek; image_xscale = 1/16*other.explosionRadius; image_yscale = image_xscale; } part_type_size(pExplosion,explosionRadius/16,explosionRadius/16,-explosionRadius/64,0); part_particles_create(partSystem,x,y,pExplosion,1); } End step GML var hspdP, vspdP; hspdP = hspd; vspdP = vspd; event_inherited(); part_type_sprite(pz,sprite_index,true,false,false); part_particles_create_colour(partSystem,x,y,pz,image_blend,1); if hspd != hspdP || vspd != vspdP+g || bbox_right < -explosionRadius || bbox_left >= room_width+explosionRadius || bbox_bottom < -explosionRadius || bbox_top >= room_height+explosionRadius { with instance_place(x+lengthdir_x(hspdP,0)+lengthdir_x(vspdP,270),y+lengthdir_y(hspdP,0)+lengthdir_y(vspdP,270),all) { event_perform(ev_collision,other.object_index); } instance_destroy(); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 6 Lipca 2015 Udostępnij Opublikowano 6 Lipca 2015 Przecież na to nie liczę,że zrobicie grę za mnie;) kolegi nie ma przez ponad miesiąc czasu,a chciałem go trochę odciążyć.. Może już pora żeby skończyć z historyjką o wyjeździe kolegi programisty? Jak najbardziej kolega istnieje, ale nie zna Cię i nie ma pojęcia że robisz grę. Oczywiście możemy założyć że twój kolega programista rzeczywiście przygotował to dla Ciebie i wyjechał na wakacje, ale w takim wypadku robisz coś zupełnie odwrotnego od "odciążania go" z dodatkowej pracy. A biorąc pod uwagę że cały twój projekt jest darmowym silnikiem platformówki, i dopiero starasz się coś do niego dodawać, co widać po twoich wszystkich tematach na forum, to możemy uznać że to kłamstwo. I niestety ale robimy tę grę za Ciebie. Więc może pora skończyć z tym zupełnie nieznaczącym kłamstewkiem i oczekiwaniem na to że ktoś poda gotowy do wklejenia kod. GameMaker przestał być prostym narzędziem, i wymaga sporo nauki. To nie jest silnik pozwalający na modułowe dodawanie elementów. Tu wszystko może popsuć grę. Więc wrócę do mojej najstarszej rady dotyczącej tworzenia gier: Zamknąć się w piwnicy (polecam na upał), odłączyć od internetu, pobrać darmowe przykłady, odpalić F1 (aka dokumentację) i próbować zrozumieć jak co działa. I pod żadnym pozorem nie robić z tego gry! Pozdrawiam i życzę upartości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 6 Lipca 2015 Autor Udostępnij Opublikowano 6 Lipca 2015 Po pierwsze silnik tworzy mój kolega,ja staram się cokolwiek pomóc,głównie zajmuje się grafiką 2D i 3D,scenariuszem, oraz sieciami komputerowymi po drugie nikt nikogo tutaj nie oszukuje przykro mi,że tak to odebrałeś...Co do pisania kodów masz rację dużo dostałem pomocy,za co jestem bardzo wdzięczny użytkownikom forum i Tobie też... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę