1x klicken = 1/5 Balken, 2x klicken = 2/5 Balken ...

  • GM 8
  • 1x klicken = 1/5 Balken, 2x klicken = 2/5 Balken ...

    Hi

    Ich hab mal ein Button gemacht, der, je nachdem wieoft er geklickt wird einen Balken auffüllen soll:

    GML-Quellcode

    1. eins = true
    2. zwei = false
    3. drei = false
    4. vier = false
    5. fuenf = false
    6. sechs = false
    7. if eins = true
    8. instance_create(x -192, y, obj_upgrades_2);
    9. instance_destroy=(obj_upgrades_1)
    10. eins = false
    11. zwei = true
    12. if zwei = true
    13. instance_create(x -192, y, obj_upgrades_3);
    14. instance_destroy=(obj_upgrades_2)
    15. zwei = false
    16. drei = true
    17. if drei = true
    18. instance_create(x -192, y, obj_upgrades_4);
    19. instance_destroy=(obj_upgrades_3)
    20. drei = false
    21. vier = true
    22. if vier = true
    23. instance_create(x -192, y, obj_upgrades_5);
    24. instance_destroy=(obj_upgrades_4)
    25. vier = false
    26. fuenf = true
    27. if fuenf = true
    28. instance_create(x -192, y, obj_upgrades_6);
    29. instance_destroy=(obj_upgrades_5)
    30. fuenf = false
    31. sechs = true
    32. if sechs = true
    33. exit
    Alles anzeigen


    Jetzt ist es natürlich so, und das ist mir auch völlig klar wieso, dass wenn "zwei" auf "true" geschaltet wird, das Programm gleich bei "if zwei = true" weitermacht,
    aber wie kann ich da einen Stopper einbauen, dass pro klick nur ein Teil des Balkens aufgefüllt wird?

    Gruss

    Goldendragon
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%
  • Da ist so einiges falsch an deinem Button.

    1. Das ganze über 6 Variablen zu lösen ist sehr umständlich
    2. Deine if Abfragen beziehen sich immer nur auf die nächste Zeile. Du müsstest also um alle Zeilen geschweifte Klammern machen.
    3. Deine if Abfragen werden nacheinander alle automatisch erfüllt, da du vorher die Bedingung erfüllst. Eine Zeile bevor if zwei = true abgefragt wird, wird zwei = true gestellt. Selbst wenn du Klammern richtig setzen würdest, werden nacheinander im selben Skript alle Bedingungen erfüllt. Lösung: else if (wird nur ausgeführt wenn die vorherige Bedingung NICHT erfüllt wurde.
    4. instance_destroy wird anders benutzt: with (obj_upgrades_1) instance_destroy();
    Einige meiner Spiele:
  • Mouse Klick:

    GML-Quellcode

    1. if upgrade<5
    2. {
    3. upgrade += 1
    4. }
    5. else
    6. {
    7. upgrade = 1
    8. }
    9. //wenn ichs richtig verstanden habe, willst du einen Balken drawen:
    10. draw_rectangle(x,y+20,x+(upgrade*10),y,true)
    Alles anzeigen

    Dein Code ist extrem umständlich,
    aber das sollte hinhauen.


    lg
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Eigentlich hab ich gemeint dass ich 6 verschiedene Objects mache:

    1 Balken leer,
    1 Balken 1/5 voll
    1 Balken 2/5 voll
    usw.

    aber mit draw ist es natürlich viel einfacher
    aber es geht immer noch nicht:

    1. Das Rechteck wird gleich zum anfang des Spieles angezeigt (auch in einem anderen Raum)
    2. Das rechteck wird oben links angezeigt, dh es ist nicht "relative". Wie mache ich es denn "relative" (mit GML)?

    zudem musste ich es ein bisschen umformen, dass es überhaupt was anzeigte:

    GML-Quellcode

    1. upgrade = 0
    2. if upgrade<5
    3. {
    4. draw_rectangle(x,y+20,x+(upgrade*10),y,true)
    5. upgrade += 1
    6. }
    7. else
    8. {
    9. upgrade = 1
    10. }
    Alles anzeigen


    Gruss
    Goldendragon
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%
  • Ich denke, das rechteck was du siehst wird von nem anderen object gedrawt.

    Denn das upgrade = 0 am anfang bewirkt , dass die länge des rechtecks immer 0 pixel ist. upgrade = 0 also ins create event.
    draw_rectangle muss ins draw event, wäherend der rest ins mouse-click event kommt. wenn alles im mouse-click oder im draw event ist bringt es nichts.
    wenn du schreibst draw_rectangle(x,y+20,x+(upgrade*10),y,true) wird es von der x/y position aus gezeichnet, also ist es relative.

    ich würde es so lösen:
    create:

    GML-Quellcode

    1. upgrade = 0


    right mouse pressed(oder so ähnlich):

    GML-Quellcode

    1. if(upgrade < 5)
    2. upgrade += 1


    draw event:

    GML-Quellcode

    1. draw_sprite(sprite_index,image_index,x,y)//button-sprite zeichnen(ich nehme an, dass der button ein eigenes object mit sprite ist)
    2. draw_rectangle(xx,yy,xx+(upgrade*10),yy+10,false)//ersetze xx und yy durch die gewünschte position der linken oberen ecke des balkens