2D Array Problem?

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

  • 2D Array Problem?

    Nach langer zeit muss ich doch mal wieder eine Frage hier stellen, komme echt nicht weiter :D
    ich habe einen 2D Array global.weaponArray für alle meine Waffen, und x - zwischen 0 und 3 momentan - gibt die Waffe an, und y - 0 bis 9 momentan - gibt Werte für die Waffe an. global.weapon ist die aktuelle ausgewählte Waffe (zwischen 0 und 3) und global.weapons steht für die maximale anzahl an Waffen (3). Wenn ich nun scrolle, will ich zur nächsten Waffe switchen. Das hatte ich zunächst mit weapon++ und weapon-- was auch perfekt geklappt hat (Hatte natürlich auch den Sprung von 0 zu 3 und umgekehrt programmiert). Nun wollte ich aber das wenn der y Wert 9 der aktuellen Waffe = false ist der Spieler diese Waffe nicht hat, und sie beim scrollen mit weapon++ oder weapon-- "übersprungen" wird. Hatte zwar an so etwas (Code) gedacht, klappt aber nicht :/ Hat jemand bessere Ideen?

    Spieler Mouse Wheel Up:

    GML-Quellcode

    1. if (global.weapon < global.weapons)
    2. {
    3. if (global.weaponArray[global.weapon, 9] = false)
    4. {
    5. scAddWeapon();
    6. } else
    7. {
    8. exit;
    9. }
    10. } else
    11. {
    12. global.weapon = 0;
    13. if (global.weaponArray[global.weapon, 9] = false)
    14. {
    15. scAddWeapon();
    16. } else
    17. {
    18. exit;
    19. }
    20. }
    Alles anzeigen


    scAddWeapon:

    GML-Quellcode

    1. global.weapon++;



    Spieler Mouse Wheel Up:

    GML-Quellcode

    1. if (global.weapon > 0)
    2. {
    3. if (global.weaponArray[global.weapon, 9] = false)
    4. {
    5. scSubtractWeapon();
    6. } else
    7. {
    8. exit;
    9. }
    10. } else
    11. {
    12. global.weapon = global.weapons;
    13. if (global.weaponArray[global.weapon, 9] = false)
    14. {
    15. scSubtractWeapon();
    16. } else
    17. {
    18. exit;
    19. }
    20. }
    Alles anzeigen


    scSubtractWeapon:

    GML-Quellcode

    1. global.weapon--;


    Mit den Scripts wollte ich eigentlich bezwecken dass die Zeile sozusagen geloopt wird, aber ich glaube das klappt so nicht, es werden auch die Waffen ausgerüstet die eigentlich ein false haben und manchmal gibt es auch out of range Fehler ?(

    Freue mich echt über Hilfe :)
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^

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

  • Hab mal was zusammengestellt. Vielleicht funktioniert das sogar
    Spieler Mouse Wheel Up:

    GML-Quellcode

    1. var counter = 1;
    2. while (global.weaponArray[(global.weapon + counter) mod global.weapons, 9] == false && counter < global.weapons)
    3. {
    4. counter++;
    5. }
    6. global.weapon = (global.weapon + counter) mod global.weapons;


    Spieler Mouse Wheel Down:

    GML-Quellcode

    1. var counter = 1;
    2. while (global.weaponArray[(global.weapon - counter) mod global.weapons, 9] == false && counter < global.weapons)
    3. {
    4. counter++;
    5. }
    6. global.weapon = (global.weapon - counter) mod global.weapons;


    Prinzp:
    Die ganze Logik bei dir hab ich bei mir mit Mathematik ersetzt, Beispiel:
    Besitz -> 0111001000 // 0 = false, 1 = true
    Waffe -> 0123456789
    Anzahl der Waffen: 9 // letzte waffe im array
    Ausgewählte Waffe: 6
    Beim Raufscrollen

    GML-Quellcode

    1. Start
    2. counter = 1,
    3. weapon (6 + 1) mod 9 == false?
    4. Ja,
    5. counter = 2,
    6. weapon (6 + 2) mod 9 == false?
    7. Ja,
    8. counter = 3,
    9. weapon (6 + 3) mod 9 == false?
    10. Ja,
    11. counter = 4,
    12. weapon (6 + 4) mod 9 == false?
    13. Ja,
    14. counter = 5,
    15. weapon (6 + 5) mod 9 == false?
    16. Nein,
    17. weapon = (6 + 5) mod 9; // weapon = 2
    18. End
    Alles anzeigen
  • Habe deinen Code jetzt mal durch meinen ersetzt, bekomme jetzt beim runterscrollen diesen Fehler:
    ___________________________________________
    ############################################################################################
    FATAL ERROR in
    action number 1
    of Mouse Event for Mouse Wheel Down
    for object oPlayer:

    Array index must be +'ve
    at gml_Object_oPlayer_MouseWheelDown_1 (line 2) - while (global.weaponArray[(global.weapon - counter) mod global.weapons, 9] == false && counter < global.weapons)
    ############################################################################################

    Beim hochscrollen funktioniert alles, danke schonmal dafür, aber was hat es mit dem runterscrollen auf sich? ?(

    Falls es hilft, hier mein global.WeaponArray :

    GML-Quellcode

    1. // Set Up Empty Array
    2. for (i = 0; i < global.weapons; i++)
    3. {
    4. for (j = 0; j < 9; j++)
    5. {
    6. global.weaponArray[i, j] = 0;
    7. }
    8. }
    9. // [0] Knife
    10. global.weaponArray[0, 9] = true; // Carrying
    11. // [1] Pistol
    12. global.weaponArray[1, 9] = false; // Carrying
    13. // [2] Machine Gun
    14. global.weaponArray[2, 9] = true; // Carrying
    15. // [3] Shotgun
    16. global.weaponArray[3, 9] = true; // Carrying
    Alles anzeigen


    Habe mal die Array Y Werte von 0 bis 8 ausgelassen, da diese nicht relevant sind.

    Ach und übrigens, deinen dritten Quellcode habe ich nicht verwendet, da ich nicht glaube dass dieser einen Nutzen hat aufgrund von "Ja," und "Nein," falls ich mich täusche, sag mir bitte wo ich ihn einfügen soll ^^
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^

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

  • Da hab ich ein Fehler gemacht, was sich auch nicht mit simpler Mathematik lösen lässt da Arrays einfach nicht negativ sein dürfen.
    Spieler Mouse Wheel Down:

    GML-Quellcode

    1. var counter = 1;
    2. while (global.weaponArray[global.weapon - counter, 9] == false && counter < global.weapons)
    3. {
    4. if (global.weapon - counter <= 0)
    5. {
    6. counter = -(global.weapons - global.weapon);
    7. }
    8. else counter++;
    9. }
    10. global.weapon = global.weapon - counter;

    Ach ja, der dritte code den ich schrieb ist nicht richtiger code sondern nur ein Funktionsablauf. Dachte man sieht es leichter mit den Code Klammern.
  • Das runterscrollen klappt jetzt auch viel besser, danke dafür! Allerdings kriege ich immer noch den selbern Fehler, wenn global.weapon = 0 ist und ich nach unten scrolle :/

    Weißt du wie man das beheben kann? ^^
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^