Münzen am oberen Rand machen, geht nicht...

  • GM 8

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

  • Münzen am oberen Rand machen, geht nicht...

    Hi leute, ich programmiere grad ein Jump "n" Run. Das Spiel ist fast so ähnlich wie mein erstes Spiel
    Spoiler anzeigen
    http://www.gm-d.de/wbb/index.php/Thread/20708/

    Nun habe ich schon Münzen hinzugefügt, ich will es jetzt so machen das die Münzenanzahl oben links in jedem Level steht. Doch irgendwie wird die nicht angezeigt. Es kommt auch keine Fehlermeldung.

    Code:
    Objekt > steuer (extra für die Münzen)
    :event_create: :action_code:

    Quellcode

    1. global.muenzen = 0


    :event_draw: :action_code:

    Quellcode

    1. draw_set_color(c_white) draw_set_font(font0) draw_text(x, y, "Muenzen: " + string(global.muenzen))




    Objekt > Münze
    :event_step: :action_code:

    Quellcode

    1. if place_meeting(x, y, player) == true { global.muenzen += 1 instance_destroy() }




    Die Münzen werden zwar schon eingesammelt, aber man kann immer noch nicht sehen wie viele man hat.


    EDIT: Wenn man eine Münze einsammelt, kommt jetzt auf einmal eine Fehlermedlung:


    ___________________________________________
    ERROR in
    action number 1
    of Step Event
    for object muenze:


    Error in code at line 3:
    global.muenzen += 1
    ^
    at position 6: Unknown variable muenzen
  • draw_text(x, y, "Muenzen: " + string(global.muenzen))
    Bei den ersten beiden Parametern musst du die x und y Koordinaten angeben, bei denen der Text (3. Parameter) gezeichnet geworden soll. Wenn du jetzt nur x und y als Parameter angibst, bedeutet das, dass der Text bei den eigenen x/y Koordinaten von dem Objekt, das diesen Code ausführt, gezeichnet wird.
    Wenn du es also oben links haben willst musst du z.B. schreiben:
    draw_text(32,32,"Muenzen: " + string(global.muenzen))

    Des Weiteren solltest du die depth des Objekts so sein, dass es ganz oben ist, damit der Text nicht überlagert wird.


    Zu dem Error:
    Bist du dir sicher, dass zu dem gleichen Zeitpunkt auch das Objekt im Raum ist, dass global.muenzen deklariert?
  • @ Marvin: Der Code war richtig, das einzige was ich vergessen habe ist, dass ich dass Objekt in den Raum nicht hatte. Dadurch hat sich der Fehler auch automatisch behoben.

    Ich weis aber jetzt nicht wie ich es machen soll, das wenn man ins nächste Level kommt, die Münzen behält. Denn im Moment ist es so das wenn man ins nächste Level kommt werden die Münzen wieder auf 0 gesetzt. Das will ich aber nicht. Weis aber auch nicht wie ich das beheben soll....
  • Schreib anstatt

    GML-Quellcode

    1. global.muenzen=0


    das hier:

    GML-Quellcode

    1. if(room==nameVomErstenLevel)
    2. {
    3. global.muenzen=0
    4. }

    Bei nameVomErstenLevel musst du natürlich den Name von dem entsprechenden Raum eintragen.
    Der Code bewirkt, dass er zuerst prüft, ob er im ersten Level ist. Wenn ja, dann wird die globale Variable "muenzen" deklariert und der Wert auf 0 gesetzt. Wenn man nicht im ersten Level ist, bedeutet das ja, dass die Variable sowieso schon existiert, weil sie ja im 1.Level schon deklariert wurde (globale Variablen bleiben nach der Deklaration immer erhalten, auch bei einem Raumwechsel). Der Wert wird dadurch auch nicht nochmal auf 0 gesetzt, sondern bleibt so wie er ist.

    Die Variable "room" gibt den aktuellen Raum zurück.
  • Ok danke. Es geht jetzt. Und schon kommt das nächste Problem (langsam reicht es mir!!!):

    Ich habe inzwischen die Leben gemacht. Am Anfang hat man 5 Leben. Immer wenn man ein Gegner berührt, startet das Level neu und es wird ein Leben abgezogen. Sobald man keine Leben mehr hat, soll man zurück zum ersten Level gehen. Das klappt auch alles. ABER der Spieler ist unsichtbar. Sonst (wie gesagt) funktioniert alles. Ich habe die Leben diesmal ausnahmsweise per Drag & Drop Aktion gemacht, da es damit um einiges leichter und schneller geht.
  • Spielerevent :event_step:

    Quellcode

    1. hspeed = 0
    2. // Steuerungif keyboard_check(vk_left) hspeed -= 5if keyboard_check(vk_right) hspeed += 5if keyboard_check_pressed(vk_space)if place_free(x, y+10) == false vspeed -= 10if keyboard_check_released(vk_space)if vspeed < 0 vspeed /= 2 // Kollision mit Wandif place_free(x+hspeed, y) == false{ if hspeed > 0 move_contact_solid(0, -1) if hspeed < 0 move_contact_solid(180, -1) hspeed = 0}
    3. vspeed += 0.5
    4. // Schwerkraft für Spielerif place_free(x, y+vspeed) == false{ if vspeed > 0 move_contact_solid(270, -1) if vspeed < 0 move_contact_solid(90, -1) vspeed = 0}
    5. // Bugfix: Spieler bleibt in der Kante stecken if place_free(x+hspeed, y+vspeed) == false hspeed = 0



    Münzenevent :event_step:

    Quellcode

    1. if place_meeting(x, y, player) == true{ global.muenzen += 1 instance_destroy()}



    Steuerevent :event_create:

    Quellcode

    1. if(room==room1){global.muenzen=0}

    Steuerevent :event_draw:

    Quellcode

    1. draw_set_color(c_white)draw_set_font(font0)draw_text(x, y, "Muenzen: " + string(global.muenzen))





    Das ist der ganze Code vom ganzen Spiel. Den Rest habe ich mit der Drag & Drop Aktion gemacht
  • Ich hab es jetzt wenigstens geschafft es so zu machen das man die Leben sieht. Aber man verliert keine Leben. Wieso?

    Spieler > :event_create: > :action_lives: 5 Leben
    Spieler > :event_collision: Gegner > Restartet Level und :action_drawlives: Set Lives to -1 Realative
    Steuer > :event_draw: > :action_drawlives: Leben: ...


    Das ist das wo ich jetzt hinzugefügt habe. Jedoch (wie schon gesagt) wenn der Spieler den Gegner berührt wird zwar das Level neugestartet aber die Leben werden nicht abgezogen. Kannst du mir helfen?
  • Da du im Create Event des Spieler Leben = 5 geschrieben hast, wird wenn das Level neugestartet wird Leben wieder auf 5 gesetzt.

    Du brauchst ein Controll Objekt dass nur ein mal "created " wird und Leben einmal auf 5 stellt und dann nichts mehr damit macht (bzw andere variablen ebenso verarbeitet)

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • Das liegt daran, dass du im Create Event vom Spieler die Leben immer auf 5 setzt. Wenn der Raum neugestartet wird, wird auch der Spieler neuerstellt, wodurch wieder dessen Create Event aufgerufen wird, was zur Folge hat, dass auch wieder die Leben auf 5 gesetzt werden.
    Am besten du schreibst das in das "Game start" Event (im Other Menü). Dieses Event wird gleich zu Spielbeginn ausgeführt.
    Hier könntest du eigentlich auch gleich noch global.muenzen deklarieren, anstatt immer im Create Event. Ist aber deine Entscheidung.

    Und du solltest lieber die Edit-Funktion verwenden, anstatt hier einen Triple-Post zu machen.
  • Ok danke vielmals. Entschuldigt mich für meine "Noob" Fragen. Ich hab grad eben den Ingame Menü gemacht. Es gibt einen "zurück", "speichern", "shop", "beenden", "steuerung" knopf. Alle Knöpfe funktionieren, doch beim Knopf "zurück" komm ich nicht weiter. Ich möchte das wenn man auf "zurück" klickt, wieder zurück zum Spiel kommt. Jedoch weiß ich es nicht wie ich es machen soll...ich hab es jetzt so gemacht das dass Level neugestartet wird. Aber wie gesagt, das Spiel soll pausiert werden man man ins Ingame Menü kommt.
  • Ich mach doch keinen Shop, sondern man kann im ersten Level die Waffe einsammeln und Munition in allen Levels. Hab auch schon zwei Sprites (Pistole und Kugel) erstellt. Ich will es so machen dass der Spieler nur schießen kann (mit linker Maustaste) wenn der Spieler:
    1. Die Waffe hat
    2. Über 1 Munition hat

    Ich habs auch schon versucht es kommt auch keine Fehlermeldung jedoch kann ich nicht schießen. Ich will das die Kugeln in Richtung Mauszeiger gehen. Könnt ihr mir helfen?

    PS: Hab es mit folgendem Code versucht:

    steuer > create event:

    GML-Quellcode

    1. if(room==room1){global.muenzen= 0global.ammo = 0global.weapon = 0}



    player > left button mouse: if weapon is equal to 1 and if ammo is larger than 1 > create moving instance in direction: point_direction(x,y,mouse_x,mouse_y) (Das hab ich per Drag & Drop gemacht)


    waffe > step event:

    GML-Quellcode

    1. if place_meeting(x, y, player) == true{ global.ammo += 10 global.weapon += 1 instance_destroy()}