Niedrigere ID's zuerst?!

  • GM 8

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

  • Niedrigere ID's zuerst?!

    N'abend,
    ich muss schon wieder eine Frage stellen.
    Und zwar hab ich folgendes Problem beim Zerstören einer Block-Reihe:
    Und zwar werden die zuerst erstellen Blöcke (also die mit der kleineren ID) bevorzugt, bzw die neueren Blöcke schlichtweg ignoriert.
    Hier dazu noch ein kleines Bildchen:


    Die Zahlen sollen in dem Falle die ID's darstellen. Wenn der 5er-Block nun runterfällt sollen alle Blöcke dort zerstört werden (da sie sich in einer Reihe mit mehr als 3 Blöcken befinden). Zerstört werden allerdings nur Block 1,2 und 5.

    Hier ist der Code den ich benutze:
    Create Event:
    var links1, links2, rechts1, rechts2, oben1, oben2, unten1, unten2;

    Step-Event:

    GML-Quellcode

    1. if place_free(x,y+1)
    2. {
    3. vspeed = 2;
    4. }
    5. else
    6. {
    7. vspeed = 0;
    8. links1 = instance_position(x-1,y,obj_red); // gibt die ID der Instanz wieder
    9. links2 = instance_position(x-1,y+31,obj_red);
    10. rechts1 = instance_position(x+32,y,obj_red);
    11. rechts2 = instance_position(x+32,y+31,obj_red);
    12. oben1 = instance_position(x,y-1,obj_red);
    13. oben2 = instance_position(x+31,y-1,obj_red);
    14. unten1 = instance_position(x,y+32,obj_red);
    15. unten2 = instance_position(x+31,y+32,obj_red);
    16. }
    17. if speed=0
    18. {
    19. if ((instance_exists(rechts1) && instance_exists(rechts2)) && (instance_exists(links1) && instance_exists(links2)))
    20. {
    21. with rechts1 instance_destroy();
    22. with links1 instance_destroy();
    23. instance_destroy();
    24. }
    25. if((instance_exists(rechts1) && instance_exists(rechts2)) && (instance_exists(unten1) && instance_exists(unten2)))
    26. {
    27. with rechts1 instance_destroy();
    28. with unten1 instance_destroy();
    29. instance_destroy();
    30. }
    31. if((instance_exists(rechts1) && instance_exists(rechts2)) && (instance_exists(oben1) && instance_exists(oben2)))
    32. {
    33. with rechts1 instance_destroy();
    34. with oben1 instance_destroy();
    35. instance_destroy();
    36. }
    37. if((instance_exists(links1) && instance_exists(links2)) && (instance_exists(unten1) && instance_exists(unten2)))
    38. {
    39. with links1 instance_destroy();
    40. with unten1 instance_destroy();
    41. instance_destroy();
    42. }
    43. if((instance_exists(links1) && instance_exists(links2)) && (instance_exists(oben1) && instance_exists(oben2)))
    44. {
    45. with links1 instance_destroy();
    46. with oben1 instance_destroy();
    47. instance_destroy();
    48. }
    49. if((instance_exists(unten1) && instance_exists(unten2)) && (instance_exists(oben1) && instance_exists(oben2)))
    50. {
    51. with oben1 instance_destroy();
    52. with unten1 instance_destroy();
    53. instance_destroy();
    54. }
    55. }
    Alles anzeigen


    Nun ist die Frage: Wie bekomme ich es hin, dass erstmal alle Instanzen betrachtet werden und erst dann geschaut wird, was zerstört wird; oder liegt das Problem am Code an sich und hat gar nichts mit den ID's zutun?

    Gruß
    DasTier
    :) :( ;) :P 8) :D ;( :rolleyes: :huh: :S X( 8| ?( :| :thumbdown: :thumbsup: :thumbup: 8o :pinch: :sleeping: :wacko: :whistling: :evil: ^^ :heul: :para:
  • Sorry für den Doppelpost, aber meine Frage hat sich doch noch nicht hundertprozentig erledigt und einen neuen Thread wollte ich dafür jetzt nicht extra eröffnen.

    Der Code aus meinem vorletzten Post mit der Ergänzung von J@kob funktionierte, allerdings hatte ich damit das Problem, dass ein Block, der beispielsweise genau in eine Lücke aus 2 aufeinander stehenden Blöcken fiel, sofort die Zerstörung der Reihe verursachte. Allerdings sollte der Block ja erstmal ganz auf den Boden fallen, bevor irgendeine Aktion passieren soll. Also wollte ich den Speed der Blöcke abfragen, und nur wenn dieser 0 ist, bei allen, soll etwas passieren. Dazu habe ich viel probiert, nichts hat funktioniert. Das hier ist aktuell mein letzter Versuch, die ganzen anderen Codes habe ich bereits gelöscht:

    GML-Quellcode

    1. links1 = instance_position(x-1,y,obj_red); // gibt die ID der Instanz wieder
    2. links2 = instance_position(x-1,y+31,obj_red);
    3. rechts1 = instance_position(x+32,y,obj_red);
    4. rechts2 = instance_position(x+32,y+31,obj_red);
    5. oben1 = instance_position(x,y-1,obj_red);
    6. oben2 = instance_position(x+31,y-1,obj_red);
    7. unten1 = instance_position(x,y+32,obj_red);
    8. unten2 = instance_position(x+31,y+32,obj_red);
    9. if place_free(x,y+1)
    10. {
    11. vspeed = 2;
    12. }
    13. else
    14. {
    15. vspeed = 0;
    16. }
    17. if vspeed == 0
    18. {
    19. if (instance_exists(rechts1) && instance_exists(links1)) // rechts links
    20. {
    21. if rechts1 == rechts2 && links1 == links2
    22. {
    23. if rechts1.speed == 0 && links1.speed == 0
    24. {
    25. with rechts1 destroy=true;
    26. with links1 destroy=true;
    27. destroy =true;
    28. }
    29. }
    30. }
    31. if (instance_exists(rechts1) && instance_exists(oben1)) // rechts oben
    32. {
    33. if rechts1 == rechts2 && oben1 == oben2
    34. {
    35. if rechts1.speed == 0 && oben1.speed == 0
    36. {
    37. with rechts1 destroy=true;
    38. with oben1 destroy=true;
    39. destroy =true;
    40. }
    41. }
    42. }
    43. if (instance_exists(rechts1) && instance_exists(unten1)) //rechts unten
    44. {
    45. if rechts1 == rechts2 && unten1 == unten2
    46. {
    47. if rechts1.speed == 0 && unten1.speed == 0
    48. {
    49. with rechts1 destroy=true;
    50. with unten1 destroy=true;
    51. destroy =true;
    52. }
    53. }
    54. }
    55. if (instance_exists(oben1) && instance_exists(links1)) // oben links
    56. {
    57. if oben1 == oben2 && links1 == links2
    58. {
    59. if oben1.speed == 0 && links1.speed == 0
    60. {
    61. with oben1 destroy=true;
    62. with links1 destroy=true;
    63. destroy =true;
    64. }
    65. }
    66. }
    67. if (instance_exists(oben1) && instance_exists(unten1)) // oben unten
    68. {
    69. if oben1 == oben2 && unten1 == unten2
    70. {
    71. if oben1.speed == 0 && unten1.speed == 0
    72. {
    73. with oben1 destroy=true;
    74. with unten1 destroy=true;
    75. destroy =true;
    76. }
    77. }
    78. }
    79. if (instance_exists(unten1) && instance_exists(links1)) // unten links
    80. {
    81. if unten1 == unten2 && links1 == links2
    82. {
    83. if unten1.speed == 0 && links1.speed == 0
    84. {
    85. with unten1 destroy=true;
    86. with links1 destroy=true;
    87. destroy =true;
    88. }
    89. }
    90. }
    91. }
    Alles anzeigen


    Hierbei werden aber schon wieder nicht die Blöcke über Eck zerstört.

    Ich weiß, dass ich irgendwo einen Denkfehler habe, wäre schön, wenn einer mal ganz kurz Korrektur lesen würde (man kennt das ja: seine eigenen Fehler überliest man gerne ;))

    Schönen Gruß
    DasTier
    :) :( ;) :P 8) :D ;( :rolleyes: :huh: :S X( 8| ?( :| :thumbdown: :thumbsup: :thumbup: 8o :pinch: :sleeping: :wacko: :whistling: :evil: ^^ :heul: :para: