switch-problem

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

  • switch-problem

    In diesem Code ist ein Fehler. Man wählt vorher aus welches Objekt man erstellen will und wie viele. In diesem Code soll das Objekt erstellt, und eine Variable verringert werden, aber es passiert nichts. Woran kann das liegen ?(

    GML-Quellcode

    1. if (global.anzahl1 > 0)
    2. {switch(global.Spieler1base)
    3. {
    4. case 1:
    5. instance_create(mouse_x,mouse_y,s1base1);
    6. global.anzahl1 -= 1;
    7. break;
    8. case 2:
    9. instance_create(mouse_x,mouse_y,s1base2);
    10. global.anzahl1 -= 1;
    11. break;
    12. case 3:
    13. instance_create(mouse_x,mouse_y,s1base3);
    14. global.anzahl1 -= 1;
    15. break;
    16. case 4:
    17. instance_create(mouse_x,mouse_y,s1base4);
    18. global.anzahl1 -= 1;
    19. break;
    20. case 5:
    21. instance_create(mouse_x,mouse_y,s1base5);
    22. global.anzahl1 -= 1;
    23. break;
    24. }}
    25. else
    26. {if (global.anzahl2 > 0)
    27. {switch(global.Spieler2base)
    28. {
    29. case 1:
    30. instance_create(mouse_x,mouse_y,s2base1);
    31. global.anzahl2 -= 1;
    32. break;
    33. case 2:
    34. instance_create(mouse_x,mouse_y,s2base2);
    35. global.anzahl2 -= 1;
    36. break;
    37. case 3:
    38. instance_create(mouse_x,mouse_y,s2base3);
    39. global.anzahl2 -= 1;
    40. break;
    41. case 4:
    42. instance_create(mouse_x,mouse_y,s2base4);
    43. global.anzahl2 -= 1;
    44. break;
    45. case 5:
    46. instance_create(mouse_x,mouse_y,s2base5);
    47. global.anzahl2 -= 1;
    48. break;
    49. }}
    50. else
    51. instance_change(schlacht,1);
    52. }
    Alles anzeigen

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...

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

  • Mach die geschweiften Klammern ({) weg! Dann müsste es funktionieren!

    Edit: Also die, zwischen case: und break;
    Dies ist eine kreative Signatur: Stell dir genau JETZT etwas lustigs vor, das hier stehen könnte...

    Meine Homepage

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

  • mach mal aus dem

    GML-Quellcode

    1. else
    2. {if (global.anzahl2 > 0)
    3. {


    ein

    GML-Quellcode

    1. else if (global.anzahl2 > 0)
    2. {
    Dies ist eine kreative Signatur: Stell dir genau JETZT etwas lustigs vor, das hier stehen könnte...

    Meine Homepage
  • Nachdem ich dieses Konstrukt mal etwas formatiert habe

    GML-Quellcode

    1. if (global.anzahl1 > 0)
    2. {
    3. switch(global.Spieler1base)
    4. {
    5. case 1: instance_create(mouse_x,mouse_y,s1base1);
    6. global.anzahl1 -= 1;
    7. break;
    8. case 2: instance_create(mouse_x,mouse_y,s1base2);
    9. global.anzahl1 -= 1;
    10. break;
    11. case 3: instance_create(mouse_x,mouse_y,s1base3);
    12. global.anzahl1 -= 1;
    13. break;
    14. case 4: instance_create(mouse_x,mouse_y,s1base4);
    15. global.anzahl1 -= 1;
    16. break;
    17. case 5: instance_create(mouse_x,mouse_y,s1base5);
    18. global.anzahl1 -= 1;
    19. break;
    20. }
    21. }
    22. else
    23. if (global.anzahl2 > 0)
    24. {
    25. switch(global.Spieler2base)
    26. {
    27. case 1: instance_create(mouse_x,mouse_y,s2base1);
    28. global.anzahl2 -= 1;
    29. break;
    30. case 2: instance_create(mouse_x,mouse_y,s2base2);
    31. global.anzahl2 -= 1;
    32. break;
    33. case 3: instance_create(mouse_x,mouse_y,s2base3);
    34. global.anzahl2 -= 1;
    35. break;
    36. case 4: instance_create(mouse_x,mouse_y,s2base4);
    37. global.anzahl2 -= 1;
    38. break;
    39. case 5: instance_create(mouse_x,mouse_y,s2base5);
    40. global.anzahl2 -= 1;
    41. break;
    42. }
    43. }
    44. else
    45. instance_change(schlacht,1);
    Alles anzeigen


    komme ich mal zum Schluss, das es keine offensichtlichen Syntax oder Logik Fehler gibt. Wahrscheinlich liegt der Fehler in den Globalen Variablen, welche du für diese Funktion her nimmst. Lass dir diese mal per "show_message(string(global.anzahl1))" am Anfang der Funktion ausgeben. Wenn gar keine Meldung kommt, weißt zu zumindest, das die Funktion überhaupt nicht aufgerufen wird. So sollte der Fehler relativ schnell zu finden sein. Übrigens, noch eine Anmerkung zur Sourcecode Optimierung. Wenn ein und die selbe Zeile oft hintereinander auftaucht, ist das leicht weg zu optimieren:

    GML-Quellcode

    1. if (global.anzahl1 > 0)
    2. {
    3. switch(global.Spieler1base)
    4. {
    5. case 1: instance_create(mouse_x,mouse_y,s1base1);
    6. break;
    7. case 2: instance_create(mouse_x,mouse_y,s1base2);
    8. break;
    9. case 3: instance_create(mouse_x,mouse_y,s1base3);
    10. break;
    11. case 4: instance_create(mouse_x,mouse_y,s1base4);
    12. break;
    13. case 5: instance_create(mouse_x,mouse_y,s1base5);
    14. break;
    15. }
    16. global.anzahl1 -= 1;
    17. }
    18. else
    19. if (global.anzahl2 > 0)
    20. {
    21. switch(global.Spieler2base)
    22. {
    23. case 1: instance_create(mouse_x,mouse_y,s2base1);
    24. break;
    25. case 2: instance_create(mouse_x,mouse_y,s2base2);
    26. break;
    27. case 3: instance_create(mouse_x,mouse_y,s2base3);
    28. break;
    29. case 4: instance_create(mouse_x,mouse_y,s2base4);
    30. break;
    31. case 5: instance_create(mouse_x,mouse_y,s2base5);
    32. break;
    33. }
    34. global.anzahl2 -= 1;
    35. }
    36. else
    37. instance_change(schlacht,1);
    Alles anzeigen


    Noch wesentlich optimierter währe in diesem Fall aber die Verwendung von Arrays. Wenn du folgenden Code am Anfang deines Programms ausführst:

    GML-Quellcode

    1. global.sBase1[0] = s1base1;
    2. global.sBase1[1] = s1base2;
    3. global.sBase1[2] = s1base3;
    4. global.sBase1[3] = s1base4;
    5. global.sBase1[4] = s1base5;
    6. global.sBase2[0] = s2base1;
    7. global.sBase2[1] = s2base2;
    8. global.sBase2[2] = s2base3;
    9. global.sBase2[3] = s2base4;
    10. global.sBase2[4] = s2base5;
    Alles anzeigen


    Vergesst niemals, Arrays sind eure Freunde und dienen euch gerne, um Daten zu speichern :3.
    Damit kannst du die gesamte Funktion auf folgendes zurück reduzieren:

    GML-Quellcode

    1. if (global.anzahl1 > 0)
    2. {
    3. instance_create(mouse_x,mouse_y,global.sBase1[global.Spieler1base-1];
    4. global.anzahl1 -= 1;
    5. }
    6. else
    7. if (global.anzahl2 > 0)
    8. {
    9. instance_create(mouse_x,mouse_y,global.sBase2[global.Spieler2base-1];
    10. global.anzahl2 -= 1;
    11. }
    12. else
    13. instance_change(schlacht,1);
    Alles anzeigen


    bei sBase1[global.Spieler1base-1] ist das -1 deswegen drinnen, weil Arrays immer bei 0 Beginnen. Theoretisch könnte man auch bei 1 Anfangen, das währe aber verschwendeter Speicherplatz.
    ...

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

  • Klappt auch nicht. Ich lad mal die .gmk hoch
    edit: danke Shoba, ich probier es mal.
    edit2: Es klappt, aber es lag an etwas anderem. Trotzdem danke für die Vereinfachung! :top:

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...

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

  • Benutzer online 1

    1 Besucher