sprite1 "klebt" an sprite2

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • sprite1 "klebt" an sprite2

    moin :)
    mal ne frage zu sprites:

    wie löst man es am geschicktesten, dass ein sprite an einem anderem "klebt"?

    situation: ein raumschiff hat bei heath < 25 einen "red alert", der sich durch alert-sound und rotem blinklicht im cockpit-fenster bemerkbar macht. zusätzlich hätte ich gernen einen rauchnebel aussem am ship, wo die antriebsdüse ist. das ganze funktioniert bis jetzt gut, aber entspricht nicht meiner vorstellung, da der rauch nicht am ship "kleben" bleibt, wenn ich mich bewege.

    mein code soweit (step-event)

    GML-Quellcode

    1. if sprite_index = spr_playership_lowhealth
    2. {
    3. if image_index > 14 and image_index < 15
    4. {
    5. audio_play_sound(lowhealth_alarm,1,false);
    6. }
    7. if image_index > 1 and image_index < 2
    8. {
    9. smoke = instance_create(x,y,obj_shipsmoke);
    10. smoke.image_angle = image_angle;
    11. smoke.direction = point_direction(x,y,obj_playership.x-room_width,obj_playership.y);
    12. smoke.speed = 2;
    13. }
    14. }
    Alles anzeigen


    die rauchanimation sollte also hinten am ship kleben bleiben, bis health > 25.
    das würde einfach besser aussehen als jetzt, wo die rauchanimation dort stehenbleibt, wo sie entstanden ist...

    als eine animation wäre es natürlich einfacher, möchte es aber auf diesem wege lösen, um mir andere dinge offen zu halten.


    hat jemand ideen? :)
  • ich weis nicht wie gut dein rauch gemacht ist aber

    im gamemaker gibts im letzten tab einen effekt button mit dem effekt smoke und farbe grau, zieht der sogar schön nach wenn sich das Schiff bewegt, diese kann man entsprechend x,y im step event dem sprite folgen lassen
  • meinen rauch habe ich mit particle illusion gemacht und würde ihn auch gerne benutzen. die build-in-effekte sind mir bekannt, gefallen aber nicht soooo :)

    allgemein? anders gedacht... eine spielefigur trägt eine pistole. spielerfigur ein sprite, pistole ein sprite. lösung? :)
    #pattex

    und ​wie kann man im step-event den smoke-effect dem ship folgen? obj_playership.x/y?? :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von herr_martinelli ()

  • mhhm habe ich bisher nie gemacht weil von dem sprite 2 versionen existierten mit und ohne Pistole und mit sprite_index wurden die einfach rasch getauscht


    ja der ingame rauch folgt dem objekt wenn du bei x und y entsprechend ein objekt angibst
  • Hmm anstatt für den Rauch ein extra Objekt zu verwenden (wenns nur ein Sprite ist) las den Rauch doch einfach im Draw Event vom Raumschiff zeichnen.

    Dafür den Befehl draw_sprite_ext nutzen. Dann kannst du auch den Winkel etc beeinflussen. Und bei der position einfach die x,y werte des Players übernehmen.

    Zusätzlich kannst du dort auch mit dem alpha wert zb spielen um das sprite etwas durchsichtiger zu machen zb. Oder mit Scale um ihn zu verkleinern / vergrößern.
  • ok?
    wenn du das etwas genauer erklären könntest?

    in meinem game läuft das folgendermaßen ab:
    health 100
    du spielst, wirst getroffen
    health -=10

    obj_player hat eine abfrage:
    if health =<25 dann wechsel per sprite_index vom regulären ship-sprite zum lowhealth-ship-sprite

    genau bei diesem lowhealth-ship-sprite wird ein sound zusätzlich gespielt und der smoke-effekt soll anstelle der flammen des antriebes sein. und dann IMMER an dieser stelle...
    und das solange, bis health += oder tot ;)

    es sieht einfach dämlich aus, wenn der smokeeffekt nach erscheinen in der luft steht...
    sieht aus wie "malen nach zahlen" :D
  • na ja du kannst ja dann ne Zustand machen

    Zustand = 0 alles heile
    Zustand = 1 im step event den rauch auf xy vom schiffsteil folgen lassen

    sollte doch gehen?

    EDIT

    Blödsinn du hast ja health als Indicator


  • Wenn du deinen Code weiter verwenden willst, dann geh ins "End Step" Event von deinem Rauch.

    Dort einfach den Code einfügen:

    GML-Quellcode

    1. if instance_exist(DeinPlayerSchiff)
    2. {
    3. x = DeinPlayerSchiff.x
    4. y = DeinPlayerSchiff.y
    5. }
    6. else {instance_destroy()}


    Dann sollte der Rauch immer deinem Raumschiff folgt (Solange es existiert). Wenn das Schiff zerstört wird, wird auch der Rauch zerstört.
    Du kannst dort ggf. auch den Winkel etc an den des Schiffes anpassen.
  • hmm...
    das funktioniert ja alles wunderbar hier. wenn ich ein health-powerup einsammel, wird health erhöht und der player per image_index auf das reguläre ship zurückgesetzt. gleiches beim respawn. da liegt nicht das problem. das problem liegt daran, dass mein smoke nicht am schiff "kleben" bleibt, sondern bei den flammen erstellt wird, animiert wird, aber dort stehen bleibt, wenn ich "weiterfliege"...
    der smoke soll immer dort bleiben, wo die flammen am schiff sind... auch beim rumfliegen, bis health wieder über 25 ist.

    smoke wird zerstört, wenn health des players wieder über 25 ist. per image_index... (if health > 25 image_index=reguläres ship)

    weisste wie ich mein?

    am code muss ich jetzt nix ändern. nur, dass der smoke am schiff animiert bleibt und nicht beim wegfliegen dort stehen bleibt. ich dachte schon über move_toward nach. mit nen großen speed, damit er dem schiff quasi hinterherfliegt... und das so schnell, dass es den anschein hat, dass der smoke am schiff klebt...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von herr_martinelli ()

  • im End Step event des obj_ship :

    GML-Quellcode

    1. with (obj_smoke) {
    2. x = other.x;
    3. y = other.y;
    4. image_angle = other.image_angle;
    5. }


    Das klappt natürlich nur wenn die Origins der beiden Spries übereinstimmen. Ansonsten kannst du auch im draw des obj_ship direkt malen und das obj_smoke objekt ganz weglassen.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • so...

    ich habe mich nun für eine für mich gut funktionierende lösung entschieden.
    falls jemand das gleiche problem hatte oder hat, hier mein code:

    im obj_playership

    create event:

    GML-Quellcode

    1. smokeCooldown = choose(10, 20, 30, 40, 50);


    step event:

    GML-Quellcode

    1. ///red alert & smoke
    2. if sprite_index = spr_playership_lowhealth
    3. {
    4. if image_index > 0 and image_index < 1 //alert-sound bei image 0
    5. {
    6. audio_play_sound(lowhealth_alarm,1,false);
    7. }
    8. //verzögerung smoke, create smoke
    9. smokeCooldown -= 1;
    10. if smokeCooldown < 0
    11. {
    12. smokeCooldown = choose(10, 20, 30, 40, 50);
    13. smoke = instance_create(x,y,obj_shipsmoke);
    14. image_angle -= 7;
    15. smoke.direction = point_direction(obj_playership.x,obj_playership.y,obj_playership.x-3,obj_playership.y-5);
    16. smoke.speed = 1;
    17. smoke.image_speed = 0.33;
    18. }
    19. }
    Alles anzeigen


    die rauchanimation lasse ich im obj_smoke in einem step event per image_angle leicht drehen und ändere alpha

    GML-Quellcode

    1. ///smoke rotation, alpha
    2. image_angle -= choose(0.5,1,1.5,2);
    3. image_xscale += 0.01;
    4. image_yscale += 0.01;
    5. if image_alpha > 0 image_alpha -= 0.01;
    6. if image_alpha = 0 instance_destroy();




    vielen dank für eure unterstützung :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von herr_martinelli ()