Problem mit der for-Schleife und Gridfragen

  • GM 6

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

  • Problem mit der for-Schleife und Gridfragen

    Hallo zusammen,

    ich bastel gerade an einem Maze-Tower Defense Spiel. Nun hab ich ein paar kleine Schwierigkeiten.

    Problem for-Schleife:

    Wenn ich Tower platziere, will ich checken ob sich ein anderes Objekt unter der Maus befindet, um nicht Auf dem Rand oder auf schon bestehende Tower oder gar Gegner bauen will. Weil ich aber nich für jedes Objekt eine if-Abfrage machen will, hab ich mir gedacht ich machs mit nem Array und ner for-Schleife.

    Wenn ich das Bausymbol drücke hänge ich an die Maus ein Halbtranspartes Object(obj_tower_place).

    Das sieht so aus:

    create event:

    Quellcode

    1. image_alpha = 0.5;
    2. blockiert = false;

    step event:

    Quellcode

    1. //folge der mouse
    2. x = mouse_x
    3. y = mouse_y
    4. //abfrage von objekten - Problem!!!
    5. sol_no = 2;
    6. sol[0] = obj_enemy1
    7. sol[1] = obj_socket
    8. sol[2] = obj_gun1
    9. for (i=0;i<sol_no;i+=1)
    10. {
    11. if (position_meeting(mouse_x,mouse_y,sol[i]))
    12. {
    13. blockiert = true
    14. }
    15. else
    16. {
    17. blockiert = false
    18. }
    19. }
    Alles anzeigen


    left pressed event:

    Quellcode

    1. // Am Grid ausrichten (32px):
    2. xg = round((x+16)/32)*32-16;
    3. yg = round((y+16)/32)*32-16;
    4. // wenn position nich blockiert baue gun
    5. if blockiert = false
    6. {
    7. instance_create(xg,yg,obj_gun1)
    8. global.gold -= 5
    9. instance_destroy()
    10. }
    11. else
    12. {
    13. instance_destroy()
    14. }
    Alles anzeigen


    Die for-schleife funktioniert irgendwie nicht und ich wüsste gern warum. Sie bleibt immer in der Mitte stehen, heist ich kann überall hin bauen, außer auf obj_socket.

    Nun zum Grid. Ich baue mein Grid voll mit Tower und die Gegner suchen sich ihren Weg von A nach B via:

    Quellcode

    1. mp_grid_path(global.Netz,Pfad,x,y,obj_away.x,obj_away.y,1);


    Wenn ich nun aber den Pfad, komplett dicht mache mit Towern fahren sie irgendwohin nur nicht zum Ziel, was verständlich ist.

    Nun meine Frage: Wie könnte ich es lösen, das ich den Pfad nicht zubauen kann, sodass also immernoch eine offene Zelle im Grid pro Spalte ist?

    Ich hoffe ihr könnt mir helfen. Schonmal danke im vorraus. :)
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Zu nr.1
    Ich denke eine Lösung mit parent wär viel praktischer.
    Gib allen hindernissen einen Parent, z.b. hinderniss,
    dann schreib einfach statt der ganzen for schleife:

    if position_meeting(mouse_x,mouse_y,hinderniss) > 0
    blockiert = 1 else blockiert = 0;

    Zu nr 2:

    Lies dir etwas besser das kapitel in der hilfe über path-motion durch, es ist kein leichtes Theme aber man kann rausfinden wies geht.

    Zum checken ob noch ein Pfad verfügbar ist versuchs mal so:

    var a, b;

    for(a = 0; a < horizontal_cells; a+=1)
    {
    for(b = 0; b < vertical_cells; b += 1)
    {
    if position_meeting(16+a*32,16+b*32,hinderniss) > 0 then kein_pfad_möglich = true;
    }
    }

    Das sollte funktionieren wenn deine Zellen 32 Pixel breit und hoch sind.
    horizontal_cells ist die Anzahl der horizontalen Zellen.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Danke schonmal für die Antwort. Das mit den Parents hab ich ja total vergessen gehabt, somit hat sich das mit der for-schleife erledigt. :thumbsup:

    Allerdings macht mir das Grid echt schwer zu schaffen. Ich bin deiner Idee mal nachgegangen und hab versucht dies umzusetzen, und lasse mir nen Text anzeigen der mir ausgibt ob Pfad frei ist oder nicht, aber irgendwie klappt das nicht.

    Vielleicht hab ich das auch im falschen objekt oder aber ich muss umstrukturieren. Im Moment ist es ja so, dass jeder gegner sich nen Pfad erstellt und versucht zum ziel zu gelangen. Vielleicht muss ich den Spawn Punkt den Pfad generieren lassen? Hmm ... weiß grade nicht weiter. ?(
    Naja ich versuchs mal weiter.

    Edit: Dein Codeschnipsel gibt mir leider immer nur zurück wenn sich ein beliebiges Feld füllt mit der Instanz.

    Das Problem was ich hab scheint wohl echt nicht einfach zu sein, denn wenn ich nämlich den Pfad blockiere, sucht das objekt sich den nächst kürzeren, und lässt alles andere außer acht. Kann man das unterdücken?


    Edit[07.02.2010 - 21:56]:
    Ich denke ich bin kurz vor der Lösung meines Problems mit dem Grid. Aber ich bräuchte nen Denkanstoß bzw. jemanden der mir mein File ändern könnte so das es passt.

    Status derzeit: Wird der Pfad blockiert bekomm ich ne Meldung. Pfad wird gestoppt.
    Ziel: Zubauen nicht möglich.

    Edit[09.02.2010 - 20:51]
    Ich hab das Problem gelöst!
    Ich habe einfach ein zweites Grid erstellt, einen weiteren Pfad erstellt der von Anfang zum Ziel geht und für diesen eine zusätzliche Grid-Instanz(einen Dummy)erstellt. Somit konnte ich dann Globale Variablen setzen, die ich beim bauen abfrage.

    Wenn interesse besteht lad ich das Sample hoch.

    Gruß BM
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.

    Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von Black-Mask ()