Objekt nicht für immer "killen"!

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

  • Objekt nicht für immer "killen"!

    Hallo alle zusammen!

    Erneut habe ich eine Frage, auf die ich weder mit der Suchfunktion (kann noch nicht so geschickt mit der suchen), noch mit dem Suchen im Google und in der Hilfe keine Hilfe gefunden habe. Drum' frage ich hier nach.

    Ich habe ein Objekt, dass alle paar Sekunden erscheint und wieder verschwindet - ok, das hab' ich. Doch wenn man das Objekt anklickt, explodiert es, und verschwindet. Dazu benutze ich das Event "Left button" (also von der Maus) und darin befindet sich die Aktion "Destroy" (oder sowas -> der Papierkorb). Danach ist das Objekt aber die ganze Zeit weg!!! Hmmm... Kann mir jemand helfen? Ich denke schon. Danke schon mal im Vorraus! :D

    Hier noch der Link, damit ihr euch in der Praxis ein Bild über mein Problem machen könnt. Ihr ladet in diesem fall nicht "Brad", sondern "Triff den..." herunter. Passwort ist: 12345

    Link zum Download

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

  • Ist doch logisch:
    Wenn du eine Instance zerstörst ist sie weg und kann nicht mehr wiedergehohlt werden.
    Du könntest ja ein zweites Objekt machen, das erstellt wird, wenn dein erstes Objekt zerstört wird, ihm ein Alarm Event zuteilen und wenn dieser ausgeführt wird eine neue Instance des ersten Objekts erstellt.
  • Die Lösung für sowas ist eigentlich ganz leicht.
    Man muss das Objekt ja nicht wirklich 'killen', es braucht ja nur so auszusehen (im Film sterben die Schauspieler ja auch nicht wirklich).

    Öhm ja, wie macht man sowas jetzt in der Praxis.

    Entweder du setzt vor alle Events in dem Objekt einfach eine zusätzliche Abfrage (z.B. "if alive=true") so dass alles nur ausgeführt wird, wenn das Objekt 'offiziell' noch lebt. Beim 'killen' setzt du dann einfach 'alive' auf false, und startest einen Alarm.
    Jetzt brauchst du in dem Alarm Event (welches natürlich auch dann ausgeführt wird, wenn 'alive' auf false steht) nur 'alive' wieder auf true zu setzen, das Objekt also quasi wiederzubeleben.

    Die 2. Möglichkeit wäre, das objekt vermittels "instance_object" in ein Anderes Objekt umzuwandeln, was einfach so lange 'wartet' und nach ablauf eines Alarms seierseits wieder in das 'lebende' Objekt umgewandelt wird (ebenfalls mit "instance_change") und das ganze beginnt von vorne.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Danke für die Antworten!

    Zitat:
    Die 2. Möglichkeit wäre, das objekt vermittels "instance_object" in ein Anderes Objekt umzuwandeln, was einfach so lange 'wartet' und nach ablauf eines Alarms seierseits wieder in das 'lebende' Objekt umgewandelt wird (ebenfalls mit "instance_change") und das ganze beginnt von vorne.


    An das habe ich auch schon gedacht und versuchte es umzusetzen. Doch irgendwie klappt das nicht. Ich nimm's gelassen. Also ich versuche beide Vorschläge (den einten nochmals) und melde mich dann wieder. Was ich aber auch noch wissen möchte:

    1. Wie erstelle ich einen Countdown? Wer mein Spiel gespielt hat, bemerkte bestimmt die Zahlen von 180 bis zu minus unendlich. Das sollte im Sekundentakt auf null gehen. Ich habe für das ein Step Event erstellt, somit macht es "Zeit relative to -1" jeden Step! Damit das Spiel bei null dann stoppt, muss ich einfach abfragen, wann der Wert null erreicht ist. Nur hier das nächste Problem. Müsste ich dann diese Abfrage in ein Step Event einfügen??? Oder in "User defined" (keine Ahnung was das ist, hat bei mir nie ne Aktion ausgeführt!)?

    2. Kann man den Fenstertitel "Top Ten Players" ändern?

    Ich danke euch jetzt schon für hilfreiche Antworten und hoffe, ihr habt meinen Text verstanden.

    EDIT
    *****

    HA! Hab' meine aller erste Frage durch eine dritte Variante gelöst! Nachdem das Objekt angeklickt wurde macht es "Jump to a given Position x = -1000". Und dann "Set Alarm 1 relative to -1". Das bewirkt, dass der Alarm für das Wiederauftauchen von Klick zu Klick das Objekt weniger lange auf dem Bildschirm lässt. Das macht die Sache umso schwieriger. Dennoch sind meine anderen beiden Fragen ungelöst! Rat?

    EDIT
    *****

    Das mit dem "Objekt wird bei Klick schneller" habe ich geändert. Und zwar wird durch ein Step Event der Timer relativ geändert!

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

  • Countdown ist leicht.
    Du machst in dein Create-Evemt:

    GML-Quellcode

    1. alarm[0] = room_speed


    Am Ende von "room_speed"s steps, wird das Alarm-0 Event ausgeführt.

    Also in Alarm-0

    GML-Quellcode

    1. Zeit -= 1 // Eine Sekunde wird abgezogen
    2. if Zeit >= 1
    3. alarm[0] = room_speed // wenn über eine Sekunde Zeit bleibt, wird das ganze in einer Sekunde nochmals ausgeführt.

    Anmerkung: Die Variable room_speed kann im Room selbst umgestellt werden. Sie steht dafür, wieviele Steps in einer Sekunde ausgeführt werden.

    Der Fenstertitel ist doch einfach mit

    GML-Quellcode

    1. room_caption = "hier steht dein neuer Text, Anführungszeichen nicht vergessen"

    zu verändern.

    woku

    P.S. User defined ist einfach etwas, dass man nur mit einer bestimmten Aktion durchführen kann. Ist sozusagen ein Platzhalter :D
    P.P.S.: Wenn du noch etwas bestimmtes bei Zeit 0 ausführen willst, dann füge das hier einfach dem Alarm[0] Event zu:

    GML-Quellcode

    1. if Zeit = 0
    2. {
    3. game_end() //Das hier würde zum Beispiel das Spiel beenden.
    4. }

  • Jo, danke! Allerdings musste ich alles für "Alarm 2" ausrichten, da Alarm 0 und 1 schon vergeben sind.
    room_caption = "hier steht dein neuer Text, Anführungszeichen nicht vergessen"

    Das stimmt schon, aber das ändert nicht den Fenstertitel vom "TopTenPlayers", welches die Highscore bezeichnet. Das was du da schreibst ist die Bezeichnung des Raumes, was nicht das Gewünschte ist. Aber für die anderen Codes danke ich dir!!! :)

    EDIT
    *****

    Kann man das auch irgendwie in Drag&Drop umsetzen? Ich möchte erst "Experte" im Zusammenklicken sein, bevor ich mit GML beginne. ;)

    EDIT
    *****
    Tja, leider funktioniert dein Code irgendwie nicht. Folgende Fehlermeldung erscheint im Spiel:
    ERROR in
    action number 1
    of Alarm Event for alarm 2
    for object Adolf:

    Error in code at line 1:
    Zeit -= 1 // Eine Sekunde wird abgezogen

    at position 1: Unknown variable Zeit

    Hmmm... ?( Wie schon gesagt: Gibt es eine Möglichkeit das ganze Vorhaben mit Drag&Drop zu erstellen??? Ich hoffe schon. Danke schon im Vorraus! :)

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

  • Also, ich habe die Variable Zeit verwendet, weil du das in deinem gesagten Beispiel(
    "Zeit relative to -1"
    hattest. Ich habe deine Demo noch nicht runtergeladen, also weiß ich nicht, wie die Variable die die Zeit zählt wirklich heißt.

    Drag 'n' Drop- Variante

    Original von woku
    Create-Event:

    GML-Quellcode

    1. alarm[2] = room_speed

    Alternativ:
    Number of Steps = room_speed
    in Alarm no: Alarm 2


    Also in Alarm-0

    GML-Quellcode

    1. Zeit -= 1 // Eine Sekunde wird abgezogen
    2. if Zeit >= 1
    3. alarm[0] = room_speed // wenn über eine Sekunde Zeit bleibt, wird das ganze in einer Sekunde nochmals ausgeführt.

    Alternativ:
    variable = deine mir unbekannte Zeitvariable
    value = -1
    Haken bei relativ


    variable = deine mir unbekannte Zeitvariable
    value = 0
    operation = larger than


    Number of Steps = room_speed
    in Alarm no: Alarm 2


    woku

    P.P.S.: Wenn du noch etwas bestimmtes bei Zeit 0 ausführen willst, dann füge das hier einfach dem Alarm[2] Event zu:

    GML-Quellcode

    1. if Zeit = 0
    2. {
    3. game_end() //Das hier würde zum Beispiel das Spiel beenden.
    4. }



    variable = Deine mir unbekannte Zeitvariable
    value = 0
    operation = equal to



    woku

    P.S.: Mit Highscores kenne ich mich nicht aus, sorry.

  • Danke. Hab's jetzt aber doch auf ne andere Art gemacht. Sogar selbst rausgefunden, was mich sehr überrascht hat und ich deswegen jetzt ein echt gutes Gefühl habe!!! ;)

    Also ich mache im Objekt "_Spieloptionen" ein Create Event. Da drinnen mache ich ein "Set Timer 0 to 30" und ein "Set Variable 'zeit' to 180". Dann ein Event "Timer 0". Da drinnen steckt die Variable "Set Variable 'zeit' relative to -1". Da der Raumspeed 30 ist, bedeutet das ja nichts anderes als 30 steps = 1 sekunde. Da ich im Timer 30 steps angegeben habe, wird der ausgeführt und zieht somit der Variable den Wert relative to -1 ab. Dann geht das so runter bis auf null, im Sekundentakt! Toll, oder? :D