Array bringt eigenartige Werte

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

  • Array bringt eigenartige Werte

    Hallo zusammen, ich habe ein Problem mit meinen Array.
    Ich versuche das jetzt mal so gut wie möglich zu erklären.
    Man kann im room Symbole erstellen, diese Symbole kann man auch verschieben etc...
    Jetzt habe ich eine Funktion eingebaut um mehrere Symbole zu makieren.
    Das klappt soweit wunderbar.
    Damit ich dann die Symbole weiter bearbeiten kann, speichere ich die makierten in einen Array.
    Jetzt sind aber immer Nuller mit drin.
    Interessant ist, wenn 3 Symbole erstelle und makiere schaut das Array so aus.

    GML-Quellcode

    1. { { 100242,100243,100244 }, }

    Also ganz normal.
    Wenn ich jetzt das erste Symbole das ich erstellt habe makiere schaut es auch ganz normal aus.

    GML-Quellcode

    1. { { 100242 }, }

    Wenn ich jetzt das dritte erstelte Symbole makiere sind Nuller drin.

    GML-Quellcode

    1. { { 0,0,100244 }, }

    Genau das selbe macht er wenn ich das zweite erstellte Symbol makiere.

    GML-Quellcode

    1. { { 0,100244 }, }


    Das ganze ist für mich wirklich ein Rätsel.
    Könnt ihr euch mal den Code anschauen ob ich was übersehe?
    Könnte das auch ein Bug sein?

    GML-Quellcode

    1. if (mouse_not_over_symbol) {
    2. var instanceNumber = instance_number(obj_zeichen);
    3. global.makierte_symbole_array = 0;
    4. if (instanceNumber >= 1){
    5. for(var i = 0;i<instanceNumber;i++){
    6. var symbol = instance_find(obj_zeichen,i);
    7. if (startpunkt_x < makierpunkt_x) {
    8. if (point_in_rectangle(symbol.x, symbol.y, startpunkt_x, startpunkt_y, makierpunkt_x, makierpunkt_y)){
    9. show_debug_message("symbol1 " + string(symbol))
    10. symbol.makiert = true;
    11. if(symbol.makiert == true){
    12. global.makierte_symbole_array[i] = symbol;
    13. }
    14. }else{
    15. symbol.makiert = false;
    16. }
    17. }else{
    18. if (point_in_rectangle(symbol.x, symbol.y, makierpunkt_x, makierpunkt_y, startpunkt_x, startpunkt_y)){
    19. show_debug_message("symbol2 " + string(symbol))
    20. symbol.makiert = true;
    21. if(symbol.makiert == true){
    22. global.makierte_symbole_array[i] = symbol;
    23. }
    24. }else{
    25. symbol.makiert = false;
    26. }
    27. }
    28. }
    29. }
    30. show_debug_message(global.makierte_symbole_array);
    31. if (array_length_1d(global.makierte_symbole_array) > 0){
    32. instance_activate_object(obj_makiert_copy);
    33. instance_activate_object(obj_makiert_delete);
    34. }else{
    35. instance_deactivate_object(obj_makiert_copy);
    36. instance_deactivate_object(obj_makiert_delete);
    37. }
    38. makieren = false;
    39. mouse_not_over_symbol = false;
    40. }
    41. if (global.makierte_ziehen) {
    42. global.makierte_ziehen = false;
    43. }
    Alles anzeigen
  • Hi, nach kurzem Überfliegen würde ich sagen, das liegt am Folgenden Problem: wenn i bspw. 2 ist und nur das markiert ist. Dann setzt du ja die dritte Stelle im Arrays auf die Id. Die restlichen Felder 0 und 1 werden mit nullen aufgefüllt.
    Ich empfehle dir ds_list damit kannst du das relativ angenehm lösen.

    Grüße :)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Das ist es, da hast du vollkommen recht.
    Mit ds_list hatte ich mir dann auch schon überlegt aber trotzdem hätte ich das nicht aus den Kopf bekommen.
    Ich bin da echt schlimm, ist ja auch nichts was jetzt sonderlich schwer ist und gleich geschrieben ist. Das hätte mich dann einfach aufgeregt das ich den Fehler nicht finde.
    Sieht man mal wieder wie schnell man einen kleinen Denkfehler reinschreiben kann.
    Ich danke dir.

    Ich poste noch das wie ich es umgeschrieben habe falls mal jemand das selbe Problem hat ;)

    GML-Quellcode

    1. if (mouse_not_over_symbol) {
    2. instanceNumber = instance_number(obj_zeichen);
    3. if is_array(global.makierte_symbole_array){
    4. global.makierte_symbole_array = 0;
    5. }
    6. array_zahl = 0;
    7. if (instanceNumber >= 1){
    8. for(var i = 0;i<instanceNumber;i++){
    9. symbol = instance_find(obj_zeichen,i);
    10. if (startpunkt_x < makierpunkt_x) {
    11. if (point_in_rectangle(symbol.x, symbol.y, startpunkt_x, startpunkt_y, makierpunkt_x, makierpunkt_y)){
    12. symbol.makiert = true;
    13. global.makierte_symbole_array[array_zahl] = symbol;
    14. array_zahl ++;
    15. }else{
    16. symbol.makiert = false;
    17. }
    18. }else{
    19. if (point_in_rectangle(symbol.x, symbol.y, makierpunkt_x, makierpunkt_y, startpunkt_x, startpunkt_y)){
    20. symbol.makiert = true;
    21. global.makierte_symbole_array[array_zahl] = symbol;
    22. array_zahl ++;
    23. }else{
    24. symbol.makiert = false;
    25. }
    26. }
    27. }
    28. }
    29. if (array_length_1d(global.makierte_symbole_array) > 0){
    30. instance_activate_object(obj_makiert_copy);
    31. instance_activate_object(obj_makiert_delete);
    32. }else{
    33. instance_deactivate_object(obj_makiert_copy);
    34. instance_deactivate_object(obj_makiert_delete);
    35. }
    36. makieren = false;
    37. mouse_not_over_symbol = false;
    38. }
    39. if (global.makierte_ziehen) {
    40. global.makierte_ziehen = false;
    41. }
    Alles anzeigen