Výstrel mimo centru objektu

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Post Reply
Fallen
Posts: 2
Joined: March 7, 2021, 6:16 pm
Facebook: http://facebook.com/

Výstrel mimo centru objektu

Post by Fallen »

Ahojte,

potrebujem poradiť s problémom výstrelu z iného miesta ako je vycentrovanie ruky. Pre upresnenie prikladám obrázok
picture.png
picture.png (3.56 KiB) Viewed 119 times
Mám vytvoreného hráča obj_player a zvlášť vytvorenú ruku, ktorá sa otáča v rozmedzí ohraničenom na obrázku. Akonáhle ruka prekročí danú hranicu obj_player sa otočí. Aby sa ruka pohybovala správne je vycentrovaná v mieste uvedenom na obrázku. Problém však nastáva nakoľko hráč drží v ruke zbraň a akonáhle vystrelí projektil vychádza z miesta kde je vycentrovaná ruka. Toto miesto však nemôžem zmeniť nakoľko by sa ruka nepohybovala správne. Viete mi niekto poradiť ? Pre upresnenie prikladám aj kód. Ďakujem za radu ako tento problém vyriešiť :)

Code: Select all

dir=point_direction(Player.x,Player.y, mouse_x, mouse_y)
image_angle = dir

if Player.x < mouse_x{
    image_yscale=+1
    x=Player.x+1
    y=Player.y+1
    }
else{
    image_yscale=-1
    x=Player.x-1
    y=Player.y+1
    }

firingdelay = firingdelay - 1;
if (mouse_check_button_pressed(mb_left)) && (firingdelay < 0)
{
    firingdelay = 5;
    with instance_create(x,y,o_pbullet)
    {
        speed = 25;
        direction = other.image_angle;
        image_angle = direction;
    }
}
User avatar
D-Sheep
Posts: 770
Joined: September 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Location: Praha, CZE
Contact:

Re: Výstrel mimo centru objektu

Post by D-Sheep »

Ahoj, potřebuješ změnit pozici vytvoření projektilu, která závisí na délce ruky a jejím otočení.

Code: Select all

var gun_offset_x = <doplnit>;
var gun_offset_y = <doplnit>;

var gun_offset_direction = point_direction(0, 0, gun_offset_x, gun_offset_y);
var gun_offset_distance = point_distance(0, 0, gun_offset_x, gun_offset_y);
var gun_combined_direction = dir + gun_offset_direction * image_yscale;
var projectile_x = Player.x + lengthdir_x(gun_offset_distance, gun_combined_direction);
var projectile_y = Player.y + lengthdir_y(gun_offset_distance,  gun_combined_direction);

with instance_create(projectile_x, projectile_y, o_pbullet) {
  ...
}
Proměnné gun_offset_x a gun_offset_y musíš nastavit podle svého spritu ruky. Spočítej si, kolik pixelů vodorovně resp. svisle je mezi originem spritu a koncem hlavně zbraně. Například kdybych vzal doslova tvůj sprite v nákresu, tak by to mohly být hodnoty zhruba 60 a -5.
Fallen
Posts: 2
Joined: March 7, 2021, 6:16 pm
Facebook: http://facebook.com/

Re: Výstrel mimo centru objektu

Post by Fallen »

Ďakujem veľmi pekne :) šlape to ako hodinky. Najskôr som sa to snažil riešiť cez sin, cos ale nefungovalo to. Toto riešenie je brilantné ;) ešte raz vďaka :bounce:
User avatar
D-Sheep
Posts: 770
Joined: September 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Location: Praha, CZE
Contact:

Re: Výstrel mimo centru objektu

Post by D-Sheep »

Sin a cos jdou taky použít, což je i přesně to, co interně používají funkce, který jsem si vybral já. Ale tyhle jsou pro účely návodu lepší a intuitivnější ;)
Pokud bys chtěl různý typy zbraní, můžeš z těch dvou proměnných udělat instanční proměnné a definovat je v Create, pro každou zbraň svoje hodnoty. Pak to při správném zapojení hierarchie objektů bude fungovat skoro samo.
Post Reply