Skocz do zawartości

Problem z pociskami


ProExCurator

Rekomendowane odpowiedzi

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:

ObjBullet_aewnhqx.png

 

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

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

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

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

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

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

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