linienabfrage & Decativirungsproblem

  • linienabfrage & Decativirungsproblem

    Hallo,
    2 kleinere Sachen bei denen ich mich gerade aufhänge:

    1.)
    folgender Code:

    GML-Quellcode

    1. if ( x > obj_sheet.x && x < obj_sheet.x+obj_sheet.xsize && y < obj_sheet.y && y > obj_sheet.y-obj_sheet.ysize ) {
    2. for ( i=1; i<ds_list_size(obj_sheet.xkontur); i+=1 ) {
    3. if !( scr_on_line(ds_list_find_value(obj_sheet.xkontur,i-1),ds_list_find_value(obj_sheet.ykontur,i-1),ds_list_find_value(obj_sheet.xkontur,i),ds_list_find_value(obj_sheet.ykontur,i)) ) {
    4. if ( !instance_position(x+1,y,obj_infel) ) {
    5. instance_create(x+1,y,obj_infel);
    6. }
    7. if ( !instance_position(x-1,y,obj_infel) ) {
    8. instance_create(x-1,y,obj_infel);
    9. }
    10. if ( !instance_position(x,y+1,obj_infel) ) {
    11. instance_create(x,y+1,obj_infel);
    12. }
    13. if ( !instance_position(x,y-1,obj_infel) ) {
    14. instance_create(x,y-1,obj_infel);
    15. }
    16. }
    17. }
    18. }
    Alles anzeigen
    Irgendwas scheint mit der Übermittlung der Linien den Listen obj_sheet.xkontur bzw. ykontur gespeichert sind, nicht zu klappen.Es wird nur der Punkt an der Stelle i=1 festgestellt. (scr_on_line() funktioniert, ich habe das separat getestet, und es liefert genau dann wen es soll true, oder false. Es kann nicht am Script liegen, nur an der Übermittlung der Koordinaten.)

    2.) wie kann ich eine einzige Instance deaktivieren? ich habe es mit

    GML-Quellcode

    1. instance_deactivate_region(x,y,x,y,true,true);
    versucht, leider werden anliegende Instancen auch deaktiviert. (die betreffende Instance ist nur 1x1 Pixel groß, und direkt nebenan liegen andere 1pixel Instancen.)
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Wenn ich das richtig sehe liegt das Problem an der for-schleife
    Verwende folgenden Teil:

    GML-Quellcode

    1. for ( i=1; i<=ds_list_size(obj_sheet.xkontur); i+=1)
    oder (Dann müsstest du das Auslesen der Liste aber noch ändern!)

    GML-Quellcode

    1. for ( i=0; i<ds_list_size(obj_sheet.xkontur); i+=1)

    Unter Umständen musst du vielleicht i+=2 schreiben, je nach dem ob es Punktepaare oder eine Punkteliste ist ;)

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • also, ich habe mir die for schleife nochmal genauer angesehen, sie ist wirklich korrekt. Dann habe ich follgendes ausprobiert:

    GML-Quellcode

    1. if ( x > obj_sheet.x && x < obj_sheet.x+obj_sheet.xsize && y < obj_sheet.y && y > obj_sheet.y-obj_sheet.ysize ) {
    2. create = true
    3. for ( i=0; i<ds_list_size(obj_sheet.xkontur); i+=1 ) {
    4. if ( i > 0 ) {
    5. if ( scr_on_line(ds_list_find_value(obj_sheet.xkontur,i-1),ds_list_find_value(obj_sheet.ykontur,i-1),ds_list_find_value(obj_sheet.xkontur,i),ds_list_find_value(obj_sheet.ykontur,i))
    6. || scr_on_line(ds_list_find_value(obj_sheet.xkontur,i),ds_list_find_value(obj_sheet.ykontur,i),ds_list_find_value(obj_sheet.xkontur,0),ds_list_find_value(obj_sheet.ykontur,0)) ) {
    7. create = false;
    8. }
    9. }
    10. }
    11. }
    12. if ( create ) {
    13. if ( !instance_position(x+1,y,obj_infel) ) {
    14. instance_create(x+1,y,obj_infel);
    15. }
    16. if ( !instance_position(x-1,y,obj_infel) ) {
    17. instance_create(x-1,y,obj_infel);
    18. }
    19. if ( !instance_position(x,y+1,obj_infel) ) {
    20. instance_create(x,y+1,obj_infel);
    21. }
    22. if ( !instance_position(x,y-1,obj_infel) ) {
    23. instance_create(x,y-1,obj_infel);
    24. }
    25. }
    Alles anzeigen
    seltsamerweise läuft es jetzt, obwohl ja nur die instance Erstellung außerhalb der schleife aufgerufen wird.
    naja, die Hauptsache ist das es jetzt funktioniert.

    solve()
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl