Zeitlich begrenzt Zeichnen / Drawen

  • GM 8
  • Zeitlich begrenzt Zeichnen / Drawen

    Hallo zusammen.

    Ich habe in meinem Spiel Powerups eingebaut. Diese funktionieren soweit auch ganz toll. Nur würde ich gerne wenn man ein Powerup einsammelt
    eine kurze Meldung - 2 Sek - auf den Bildschirm "zeichnen" / Drawen, das man das Item eingesammelt hat.

    Wie kann ich das bewerkstelligen? Soweit ich das bisher mitbekommen habe kann man ja nur im "Draw" Event Bilder und Text auf den Bildschirm zeichnen lassen.
    Geht das auch Zeitlich begrenzt?

    Danke für Antworten :D
  • Zeitlich begrenzt?: Ja, geht schon, ist aber nicht ganz einfach...
    Du brauchst eine variable, die angibt, ob man das item hat.
    Während du das item einsammelest setzt du die Variable auf true und startest ein Alarm.
    Im Alarm setzt du dann die Variable wieder auf false.
    im draw event prüfst du dann ob die variable true ist und wenn ja lässt du die Sprite zeichnen.
    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
  • Danke schonmal für die Antwort. Nur hab ich wohl iwo einen für euch wohl sehr simplen Fehler drin ^^
    Weil es funktioniert so nicht wie ich es gelöst habe. Sobald ich nun das spiel starte ist das Item schon weg ohne das ich es eingesammelt hab
    und die Meldung wird andauernd angezeigt. Hier mal der Code zu meinem Item:



    execute code:

    GML-Quellcode

    1. ItemEingesammelt = false




    Alarm Event for alarm 0:
    execute code:

    GML-Quellcode

    1. ItemEingesammelt = false




    Collision Event with object obj_Player1:
    execute code:

    GML-Quellcode

    1. ItemEingesammelt = true
    2. global.Player_EXP = global.Player_EXP + 100
    3. set Alarm 0 to 60destroy the instance



    Draw Event:
    execute code:

    GML-Quellcode

    1. draw_sprite(sprite_index,-1,x,y);






    Draw GUI Event:
    execute code:

    GML-Quellcode

    1. x = view_xview[1]
    2. y= view_yview[1]
    3. if ItemEingesammelt = true
    4. draw_sprite(gui_Back, 0, x, y + 96);
    5. draw_set_color(c_white);
    6. draw_set_font(Interface_font);
    7. draw_text(x, y + 96, "100ExP erhalten!");
  • Hallo Atomicmaster,

    ich hoffe ich hab dein Problem richtig verstanden. Ich löse das ganze immer mit einem zusätzlichen Objekt. Ich nenne es z.B: obj_showcollect oder was auch immer.
    -Step-event-

    GML-Quellcode

    1. vspeed=-2 //damit es sich nach oben bewegt
    2. if (alpha<1) //Selbsterkärend
    3. {
    4. alpha+=0.1;
    5. }
    6. else
    7. {
    8. instance_destroy()
    9. }

    -Draw-event-

    GML-Quellcode

    1. draw_set_alpha(alpha)
    2. draw_text(x,y,string(text))
    3. draw_set_alpha(1)


    Wenn nun dein Objekt ein Item berührt
    -Collisions-event-

    GML-Quellcode

    1. with instance_create(x,y,obj_showcollect) {text="+2"; } //Das Objekt wird mit der angegebenen Variable erstellt


    LG Afroman
  • nur als kleiner tipp :
    global.Player_EXP = global.Player_EXP + 100

    würde da nicht einfach das hier gehen?

    Quellcode

    1. global.Player_EXP += 100
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Nein, den wenn man nun annimt das global.Player_EXP = 44 ist(oder irgent einen anderen Zahlenwert hat).

    Dann ist es ja wohl nen unterschied ob man:

    44 = 44 + 100;
    oder
    44 + 100

    rechnet.


    Okay doch nicht, kleiner denkfehler :D

    Sinnvoller wäre es:
    global.Player_EXP += global.Player_EXP + 100
    zu schreiben, da der Wert dann einfach addiert statt zugewiesen wird.

    Außerdem wäre bei:
    global.Player_EXP += 100
    ja immer der selbe Wert addiert, ich denke er will immer einen neuen Wert (je nach lvl) addieren.
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.

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

  • Danke Afroman für diese Idee... leider hat sie bei mir bisher nich geklappt... sondern nur Fehler verursacht.
    Aber die Idee klingt gut :)

    Hab es nun aber anders gelöst. Einfach ein Objekt mit nem Sprite erstellt wo "+100 EXP" drinsteht.
    Diese Srollt dann einfach nach oben und löst sich nach paar Steps auf.

    DragonXZ:

    DragonXZ schrieb:

    Sinnvoller wäre es:
    global.Player_EXP += global.Player_EXP + 100
    zu schreiben, da der Wert dann einfach addiert statt zugewiesen wird.


    Wo genau ist den da der Unterschied zu:

    GML-Quellcode

    1. global.Player_EXP = global.Player_EXP + 100


    Wie du sagtest "...da der Wert dann einfach addiert statt zugewiesen wird". Beim Addieren wird doch auch zugewiesen?
  • so wie ich das sehe hat

    Quellcode

    1. global.Player_EXP = global.Player_EXP + 100

    und

    Quellcode

    1. global.Player_EXP += 100

    die gleiche bedeutung

    Quellcode

    1. global.Player_EXP += global.Player_EXP + 100

    hat die funktion den wert die global.Player_EXP hat zu verdoppeln und 100 hinzufügt
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • += i

    Atomicmaster schrieb:

    Wo genau ist den da der Unterschied zu:


    GML

    1



    global.Player_EXP = global.Player_EXP + 100



    Wie du sagtest "...da der Wert dann einfach addiert statt zugewiesen wird". Beim Addieren wird doch auch zugewiesen?

    += ist die bequemere, abgekürzte Variante für v = v + t => v += t
    So einfach ist das. Das geht auch mit -= uvm.
  • Benutzer online 1

    1 Besucher