Sprite Animation wird anscheinend "verdeckt"

  • GM 8

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

  • Sprite Animation wird anscheinend "verdeckt"

    Moin,

    leider Gottes muss ich schon wieder nach Hilfe fragen. :(

    Ich habe ein komisches Problem mit meinem Sprite.

    Kurz erklärt:

    Quadrate fliegen über den Bildschirm. Wenn ich die Maustaste drücke, stoppen diese und lassen eine Spriteanimation abluafen. Der Hintergrund ändert sich.

    Problem:

    die Spriteanimation wird auf dem neuen Hintergrund nicht mehr angezeigt .. nur wenn ich wieder die Maustaste drücke und sich diese wieder bewegen läuft die Animation in einem Loop ab. Das sollen sie aber nicht! Sie sollen sich 1x nachdem man die Maustaste gedrückt hat abspielen und dann wieder auf den Ausgang zurück gehen wenn sie sich wieder bewegen.

    Zum besseren Verständnis habe ich mal schnell eine kleine .gif gemacht:

    directupload.net/file/d/3646/egdpdu6u_gif.htm

    Am Anfang kommt ein weißes Quadrat angeflogen.
    Ich drücke die Maustaste und der Hintergrund ändert sich. HIER SOLL DIE ANIMATION 1x ABLAUFEN!
    Ich drücke wieder die Maustaste und die Sprite Animation bewegt sich im Loop und bewegt sich auch über den Bildschirm. Das soll nicht passieren! Da soll das normale weiße Quadrat wieder vorhanden sein und keine Animation!





    Zum Code:

    die Kugel hat einen normalen Sprite mit einem Bild angewählt unter den Einstellungen für das Objekt bei "sprite"

    GML-Quellcode

    1. if (global.kweiss == 1 ) { // wenn das auf 1 steht bewegt sich die Kugel
    2. vspeed = 8;
    3. visible = true //sichtbar // die Kugel ( das 1 Bild ist sichtbar)
    4. }
    5. else
    6. {
    7. if (global.kweiss == 0) // wenn das auf 0 steht bewegt sich die Kugel nicht und das einzelne Bild der Kugel ist nicht sichtbar.
    8. {
    9. /// Hier wird die Animation eingeleitet! Das ist eine extra Animation unter "spr_animation_fade_out" Sie soll sich 1x abspielen und sichtbar sein!
    10. sprite_index=spr_animation_fade_out;
    11. image_speed =0.2;
    12. image_index=image_number-1
    13. vspeed = 0;
    14. visible = false // es soll weiterhin der Standartsprite unsichtbar sein. Wenn ich das auf true stelle, ändert das auch nichts an meinem Problem.
    15. }
    16. }
    Alles anzeigen


    und dann noch der Code zum wechseln von dem Hintergrund:

    GML-Quellcode

    1. if device_mouse_check_button_pressed (0, mb_left) {
    2. if background_color = c_black {
    3. background_color = c_white
    4. }
    5. else {
    6. background_color = c_black
    7. }
    Alles anzeigen


    Wäre sehr nett wenn ihr mir nochmals helfen könntet.. :)

  • leider Gottes muss ich schon wieder nach Hilfe fragen. :(

    ach was das ist doch nicht schlimm!

    das visible=false ist warscheinlich der fehler.
    wenn das nämlich false ist, dann ist das gesamte object unsichtbar...
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • McGamemake schrieb:

    Im Gamemaker gibt es Add Event -> Other -> ?Animation End? und dort kannst du image_speed auf 0 setzen, aber nochmal eine frage, wo veränderst du global.kweiss ?


    Larsi schrieb:


    ach was das ist doch nicht schlimm!

    das visible=false ist warscheinlich der fehler.
    wenn das nämlich false ist, dann ist das gesamte object unsichtbar...



    Hey, vielen Dank für eure Antworten.

    @McGamemake .. das würde zumindest das Problem mit dem Loop beheben. Allerdings würde die Animation beim wechsel & wenn das Objekt stehen bleibt noch immer nicht angezeigt werden. global.kweiss änder ich ebenfalls dort wo ich die Hintergrundfarbe änder


    GML-Quellcode

    1. // wechsel der Farbe von den "Projektilen" Weiß
    2. if (global.kweiss = 0)
    3. {
    4. global.kweiss = 1;
    5. }
    6. else {
    7. global.kweiss = 0;
    8. }
    Alles anzeigen



    @Larsi

    Ne.. leider ist das nicht der Fehler. Hab das alles schon auf true gemacht etc. funktioniert nicht. Hab den Sprite auch extra schon farbig gemacht d.h. nicht schwarz/weiß um Fehler beim "erkennen" auszuschließen. Er spielt den Sprite nicht ab wenn das Objekt steht.
  • 1. du könntest das kweiss abkürzen mit:

    GML-Quellcode

    1. global.kweiss != global.kweiss


    2. mach vllt mal das
    image_index=image_number-1

    und benutz mal das animation end event.

    p.s. ich improvisiere nur ^^

    EDIT: Wenn global.kweiss = 1 ist, musst du ihn auch wieder den richtigen sprite index und image_speed und image_index geben.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von McGamemake ()

  • McGamemake schrieb:

    1. du könntest das kweiss abkürzen mit:

    GML-Quellcode

    1. global.kweiss != global.kweiss


    2. mach vllt mal das
    image_index=image_number-1

    und benutz mal das animation end event.

    p.s. ich improvisiere nur ^^

    EDIT: Wenn global.kweiss = 1 ist, musst du ihn auch wieder den richtigen sprite index und image_speed und image_index geben.



    das: image_index=image_number-1
    ist doch schon image_index=image_number-1
    ? :O

    und was soll ich genau in das animation end event reinschreiben und was in das stepevent ? stehe da gerade ein wenig auf dem schlauch. :D
  • ich habe meinen oberen post editiert, also :

    EDIT: Wenn global.kweiss = 1 ist, musst du ihn auch wieder den richtigen sprite index und image_speed und image_index geben.

    vergiss das Animation end event, außer du möchtest, das kweiss 0 zu 1 geändert wird, wenn die animation endet.
  • McGamemake schrieb:

    ich habe meinen oberen post editiert, also :

    EDIT: Wenn global.kweiss = 1 ist, musst du ihn auch wieder den richtigen sprite index und image_speed und image_index geben.

    vergiss das Animation end event, außer du möchtest, das kweiss 0 zu 1 geändert wird, wenn die animation endet.


    Dankeschön! Das funktioniert schon mal.. nur habe ich weiterhin das Problem, dass der animierte Sprite gar nicht sichtbar ist wenn das Spielfeld schwarz wird. :/
  • obj.weisse_kugel.step


    GML-Quellcode

    1. if (global.kweiss == 1 ) {
    2. vspeed = 8;
    3. //visible = true //sichtbar
    4. sprite_index=spr_weisse_kugel;
    5. image_speed = 0;
    6. image_index = 0;
    7. }
    8. else
    9. {
    10. if (global.kweiss == 0)
    11. {
    12. sprite_index=spr_animation_fade_out;
    13. image_speed =0.2;
    14. image_index=image_number-1
    15. vspeed = 0;
    16. //visible = false //unsichtbar
    17. }
    18. }
    Alles anzeigen



    obj.steuerrung2.step


    GML-Quellcode

    1. if device_mouse_check_button_pressed (0, mb_left) {
    2. if background_color = c_black {
    3. background_color = c_white
    4. }
    5. else {
    6. background_color = c_black
    7. }
    8. // wechsel der Farbe von den "Projektilen" Weiß
    9. if (global.kweiss = 0)
    10. {
    11. global.kweiss = 1;
    12. }
    13. else {
    14. global.kweiss = 0;
    15. }
    16. // wechsel der Farbe von den "Projektilen" Schwarz
    17. if (global.kschwarz = 0)
    18. {
    19. global.kschwarz = 1;
    20. }
    21. else {
    22. global.kschwarz = 0;
    23. }
    24. }
    Alles anzeigen


    Hab ich das else falsch benutzt? Wollte damit nur sicher gehen wenn global.kweiss nicht 1 ist das es 0 ist.


    Aber ich glaube auch das ist nicht das Problem... denn die Kugeln bleiben WIRKLICH stehen wenn kweiss = 0 ist. D.h. die Animation müsste sich auch eig. abspielen... kann es sein, dass die Animation von der schwarzen Ebene irgendwie verdeckt wird?

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

  • mach mal das

    GML-Quellcode

    1. else
    2. {

    und die untere } klammer weg und schreibe dann bei

    GML-Quellcode

    1. else if (global.kweiss == 0)


    EDIT: wie schon gesagt, ich improvisiere und wenns nicht funktioniert, dann bin ich jetzt leider am ende :/ Ich will das Forum nicht weiter zu spamen
  • McGamemake schrieb:

    mach mal das

    GML-Quellcode

    1. else
    2. {

    und die untere } klammer weg und schreibe dann bei

    GML-Quellcode

    1. else if (global.kweiss == 0)


    EDIT: wie schon gesagt, ich improvisiere und wenns nicht funktioniert, dann bin ich jetzt leider am ende :/ Ich will das Forum nicht weiter zu spamen



    Ahhh.. hab in der Steuerrung am ende noch eine } vergessen.

    Wo soll ich das dann ändern? Bei obj.weißekugel.step?
  • Funktioniert leider auch nicht. :( Ändert sich rein gar nichts .. hat den selben Effekt.
    Hab es jetzt so gemacht:


    GML-Quellcode

    1. //Switch wird in obj_Steuerrung beeinflusst / regelt die Geschwindigkeit + Sichtbarkeit bei Mausklick.
    2. if (global.kweiss == 1 ) {
    3. vspeed = 8;
    4. //visible = true //sichtbar
    5. sprite_index=spr_weisse_kugel;
    6. image_speed = 0;
    7. image_index = 0;
    8. }
    9. //else
    10. //{
    11. else if (global.kweiss == 0) {
    12. //if (global.kweiss == 0)
    13. //{
    14. sprite_index=spr_animation_fade_out;
    15. image_speed =0.2;
    16. image_index=image_number-1
    17. vspeed = 0;
    18. }
    19. //visible = false //unsichtbar
    20. //}
    21. //}
    Alles anzeigen



    Mh...
    kann es vllt. etwas damit zu tun haben, dass ich 1 Objekt für globale Variabeln habe?

    Da steht drinne:

    GML-Quellcode

    1. globalvar kweiss;
    2. kweiss = 1;
    3. globalvar kschwarz;
    4. kschwarz = 0;


    und daran orientieren sich alle weißen bzw. schwarzen Kugeln im Spiel.. diese Werte werden natürlich immer wieder geändert.


    Vielen Dank für deine Mühen! :)
  • McGamemake schrieb:

    schreib doch:
    in diesen einem Objekt:

    global.kweiss = 1
    global.kschwarz = 1

    statt globalvar



    Okay mache ich. :) Ändert aber nichts an der Funktion, oder?

    Problem besteht weiterhin.. falls wer einen Rat hat immer her damit! Wäre sehr dankbar dafür :)





    €:


    Uhm!
    Ich glaube ich hab den Lösungsansatz .. weiss nur nicht wie ich das lösen kann.
    Das Problem ist nicht, dass der Sprite verdeckt wird o.ä. sondern, dass die Animation nicht abspielt.


    GML-Quellcode

    1. else if (global.kweiss == 0) {
    2. sprite_index=spr_animation_fade_out;
    3. image_speed =0.2;
    4. image_index=image_number-1
    5. vspeed = 0;
    6. }


    das else if wird immer erfüllt.. d.h., dass es immer auf
    image_index=image_number-1
    bleibt und sich deswegen nicht animieren lässt. wenn ich die image_number auf z.b. 0 setze dann sehe ich auch einen Sprite von der Animation aber es wird nichts animiert... wie löse ich das Problem denn nun?


    €22:


    Mein Lösungsansatz der nicht funktioniert:


    GML-Quellcode

    1. //Switch wird in obj_Steuerrung beeinflusst / regelt die Geschwindigkeit + Sichtbarkeit bei Mausklick.
    2. if device_mouse_check_button_pressed (0, mb_left) || global.kweiss == 0 {
    3. sprite_index=spr_animation_fade_out
    4. image_index=image_number-1
    5. image_speed =0.2
    6. }
    7. if (global.kweiss == 1 ) {
    8. vspeed = 8;
    9. //visible = true //sichtbar
    10. sprite_index=spr_weisse_kugel;
    11. image_speed = 0;
    12. image_index = 0;
    13. }
    14. else if (global.kweiss == 0) {
    15. /*sprite_index=spr_animation_fade_out
    16. image_index=image_number-1
    17. image_speed =0.2*/
    18. vspeed = 0;
    19. }
    20. //visible = false //unsichtbar
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Ice21 ()