ProExCurator Opublikowano 18 Stycznia 2017 Udostępnij Opublikowano 18 Stycznia 2017 Więc robię w GM dopiero od tygodnia i napotkałem na pewne problemy. Na początku robiłem grę bez użycia "fizyki" ale dzisiaj pomyślałem że dobrze będzie ją dodać bo ułatwi to później pewne rzeczy. Jednak mam spory problem z pociskami, nie do końca rozumiem jak działa physics_apply_impulse, a chciałbym zrobić pociski szybsze niżeli są teraz i naprawić problem z kolizją, kiedy strzelam w dół. Jak to wygląda teraz, widać na poniższym filmiku. YOUTUBE scr_attack_state GML if (global.Select_Weapon = "Pistol") { if (global.Direction = "Down") { if(aim_key) { image_speed = 0.6; sprite_index = Spr_Player_Attack_Gun_Down if (floor(image_index <= 7)) { image_speed = 0.6; } else if(aim_key) { image_speed = 0; if (attack_key) && (global.Shooting == false) { if (global.Shooting == false) image_index = 6 audio_play_sound(snd_gun_fire, 0, false) global.Shooting = true; var bullet = instance_create(x-1, y, Obj_Bullet); var xforce = lengthdir_x(200, 270) var yforce = lengthdir_y(200, 270) with(bullet) { physics_apply_impulse(x, y, xforce, yforce); } } } } else { image_speed = 0.6; } } if (global.Direction = "Up") { if(aim_key) { image_speed = 0.6; sprite_index = Spr_Player_Attack_Gun_Up if (floor(image_index <= 7)) { image_speed = 0.6; } else if(aim_key) { image_speed = 0; if (attack_key) && (global.Shooting == false) { if (global.Shooting == false) image_index = 6; audio_play_sound(snd_gun_fire, 0, false) global.Shooting = true; bullet = instance_create(x-1, y, Obj_Bullet2); var xforce = lengthdir_x(200, 90) var yforce = lengthdir_y(200, 90) with(bullet) { physics_apply_impulse(x, y, xforce, yforce); } } } } else { image_speed = 0.6; } } if (global.Direction = "Left") { if(aim_key) { image_speed = 0.6; sprite_index = Spr_Player_Attack_Gun_Left if (floor(image_index <= 7)) { image_speed = 0.6; } else if(aim_key) { image_speed = 0; if (attack_key) && (global.Shooting == false) { if (global.Shooting == false) image_index = 6 audio_play_sound(snd_gun_fire, 0, false) global.Shooting = true; bullet = instance_create(x-33, y-22, Obj_Bullet2); var xforce = lengthdir_x(200, 180) var yforce = lengthdir_y(200, 180) with(bullet) { physics_apply_impulse(x, y, xforce, yforce); } } } } else { image_speed = 0.6; } } if (global.Direction = "Right") { if(aim_key) { image_speed = 0.6; sprite_index = Spr_Player_Attack_Gun_Right if (floor(image_index <= 7)) { image_speed = 0.6; } else if(aim_key) { image_speed = 0; if (attack_key) && (global.Shooting == false) { if (global.Shooting == false) image_index = 6 audio_play_sound(snd_gun_fire, 0, false) global.Shooting = true; bullet = instance_create(Obj_Player.x+33, Obj_Player.y-23, Obj_Bullet2); var xforce = lengthdir_x(200, 0) var yforce = lengthdir_y(200, 0) with(bullet) { physics_apply_impulse(x, y, xforce, yforce); } } } } else { image_speed = 0.6; } } } Obj_Bullet: Obj_Bullet - Create Event GML phy_bullet=true Obj_Bullet - Collide with - Obj_Collision GML instance_destroy(); instance_create(x,y,Obj_Bullet_Explosion); audio_play_sound(snd_bullet_impact, 0, false); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 18 Stycznia 2017 Udostępnij Opublikowano 18 Stycznia 2017 Po prostu fizyka wyłapuje kolizję, a silnik GMowy nie. Zamiast eventu collision, spróbuj użyć w stepie. physics_test_overlap Z równie przydatnych rzeczy do debugowania GML flag = phy_debug_render_aabb | phy_debug_render_collision_pairs | phy_debug_render_obb; physics_world_draw_debug(flag); więcej w dokumentacji :bye1: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 18 Stycznia 2017 Autor Udostępnij Opublikowano 18 Stycznia 2017 Po prostu fizyka wyłapuje kolizję, a silnik GMowy nie. Zamiast eventu collision, spróbuj użyć w stepie. physics_test_overlap Z równie przydatnych rzeczy do debugowania GML flag = phy_debug_render_aabb | phy_debug_render_collision_pairs | phy_debug_render_obb; physics_world_draw_debug(flag); więcej w dokumentacji :bye1: Zrobiłem tak jak napisałeś, różnica jest jedynie taka że wykrywa tą kolizje jakby później, ale dalej jak strzelam w dół to w ogóle jej nie wykrywa. YOUTUBE Step Event: GML if physics_test_overlap(x, y, image_angle, Obj_Collision) { instance_destroy(); instance_create(x,y,Obj_Bullet_Explosion); audio_play_sound(snd_bullet_impact, 0, false); } EDIT: I jeszcze jak przyśpieszyć te pociski? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 18 Stycznia 2017 Udostępnij Opublikowano 18 Stycznia 2017 Trochę słabe rozwiązanie, ale powinno pomóc. Zwiększ maskę kolizji bulleta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 18 Stycznia 2017 Autor Udostępnij Opublikowano 18 Stycznia 2017 Trochę słabe rozwiązanie, ale powinno pomóc. Zwiększ maskę kolizji bulleta. Bardzo dziwne, zwiększyłem dla testu ją mocno i dalej jest to samo. Widać że jest zwiększona ale jak strzela w góre, lewo lub prawo... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 18 Stycznia 2017 Udostępnij Opublikowano 18 Stycznia 2017 Ej. Pod przyciskiem down generujesz instancje Obj_Bullet a w reszcie Obj_Bullet2 :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 18 Stycznia 2017 Autor Udostępnij Opublikowano 18 Stycznia 2017 Ej. Pod przyciskiem down generujesz instancje Obj_Bullet a w reszcie Obj_Bullet2 :D Ja pie... Ja tu się głowie co jest nie tak z kodem przez tyle czasu a tu literówka... Dzięki mistrzu, nie znalazłbym jej bez twojej pomocy :D Przynajmniej w międzyczasie usprawniłem kod. ale jednak dalej nie wiem jak przyśpieszyć pocisk? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 19 Stycznia 2017 Udostępnij Opublikowano 19 Stycznia 2017 Aby zwiększać szybkość pocisku, musisz zwiększać dystans nadany w physics_apply_impulse. Siłę ustawiasz tutaj: var xforce = lengthdir_x(200, 270) var yforce = lengthdir_y(200, 270) Zwiększając wartość 200, będziesz zwiększał szybkość pocisku. Jeżeli twój pocisk ma być naprawdę szybki to polecam dodać mu jeszcze parametr: phy_bullet = true; o którym więcej oczywiście w dokumentacji :) https://docs.yoyogames.com/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 19 Stycznia 2017 Udostępnij Opublikowano 19 Stycznia 2017 Nie było czegoś od limitowania prędkości w globalnych ustawieniach fizyki? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 20 Stycznia 2017 Autor Udostępnij Opublikowano 20 Stycznia 2017 Nie było czegoś od limitowania prędkości w globalnych ustawieniach fizyki? Właśnie chyba tak, ponieważ cokolwiek nie wprowadzę w ten lub inny sposób jak napisał Uzjel to i tak prędkość jest ta sama. Tyle że ja używałem default'owych ustawień, w sensie nic nie wprowadzałem własnego w globalnych ustawieniach fizyki, bo nawet nie wiem gdzie. To co trzeba zmienić w takim razie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 20 Stycznia 2017 Udostępnij Opublikowano 20 Stycznia 2017 Podeślij projekt na PW jak chcesz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 20 Stycznia 2017 Udostępnij Opublikowano 20 Stycznia 2017 Projekt dostałem, sprawdziłem, debugowałem. Serio nie wiem o co chodzi, nigdy takie coś mi się nie przytrafiło (bo może nie było potrzebne). Na tym etapie nie mam czasu Ci pomóc, mogę wrócić do tego za 3-4 tygodnie 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ę