Instancen.move_towards_point()

  • Instancen.move_towards_point()

    Hallo, brauche wieder eure Hilfe:

    Und zwar folgendes:

    Quellcode

    1. anxy=instance_position(x,y,forall);
    2. anxy32=instance_position(x+32,y,forall);
    3. anxy.x=x+32;
    4. anxy32.x=x;

    forall ist ein Object!
    Ich versuche jeweils die ID der Instancen herauszubekommen.
    nun möchte ich die beiden Instancen (Objecte) tauschen.
    anxy32 geht an x position von meinem Object (Name:select).
    und anxy 32 pixel nach rechts von x des select Objects.
    Die anxy und anxy32 (forall) sind 32pixel groß und quadratisch.

    Ich will eine weiche bewegung zu den Punkten:

    Quellcode

    1. anxy=instance_position(x,y,forall);
    2. anxy32=instance_position(x+32,y,forall);
    3. anxy.move_towards_point(x+32,y,2);
    4. anxy32.x=move_towards_point(x+32,y,2);

    Natürlich funtioniert das nicht!
    Aber wie macht man das?
    Die Instancen sollen move_towards_point(x,y,sp) machen.
    Bei x geht es ja! wenn man ganz einfach die var nimmt (anxy) und einen Punkt dahinter setzt.
    anxy.x! Aber wie machen ich das mit move? Es gibt ja auch ein Eventsymbol, aber man kann da nur Other auswählen mit Objecten die es schon gibt.

    Also mein Spiel ist so:
    Es ist ein Puzzle Spiel (wie das von DS).
    Ich habe ein Object das heißt select und ist 64x32 groß. Damit es immer 2 Puzzel einkreist.
    wenn ich nun enter drücke, sollen diese 2 eingekreisten Puzzel ihre Position tauschen.
    Mit dem ersten Code (oben) geht es ja! Aber ich will es mit einer weicheren methode machen.
    Bilder
    • puzzle1.jpg

      12,38 kB, 389×198, 241 mal angesehen
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
  • Gib jedem Objekt die Variable target_x (und eventuell später target_y). Die deklarierst du im CREATE Event:

    GML-Quellcode

    1. target_x = x;

    Im STEP Event machst du folgendes:

    GML-Quellcode

    1. move_towards_point(target_x,y,2);

    Dein Code zum Tauschen sollte dann so aussehen:

    GML-Quellcode

    1. anxy=instance_position(x,y,forall);
    2. anxy32=instance_position(x+32,y,forall);
    3. anxy.target_x=x+32;
    4. anxy32.target_x=x;
  • Ja genau! Danke! Aber:
    1. Zittern die Puzzelteile jetzt, wegen step.
    2. Ich will es nur ausführen wenn ich enter drücke und nicht bei jeden step.
    3. alle Puzzelteite haben ein Parent namens "forall". Aber wenn ich es in Step einbaue und ich viele puzzels im Raum habe, dann zieht das viele fps.

    Aber den rest bekomme ich -voraussichtlich- selber hin. Dass das mir nicht selber eingefallsen ist?
    Um das zittern zu vermeiden sollte man den Code für das Eventsymbol step towards to point nehmen. Aber wie heiß es?

    Am schluss möchte ich dass die Teile sich im Kreis langsam tauschen!
    Das schaffe ich ja nur mit sin und cos oder lengthdir_x(len,dir) und lengthdir_y(len,dir).
    Aber das dürfte kein Problem sein.
    Und es ist ja immer nur ein Object von den beiden höher (depth). Ich möchte aber eine Kreisbewegung einbringen.
    .....
    So das Problem mit dem Zittern habe ich gelöst. Aber halt mir der methode von dir.
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DanielGM61 ()

  • 1. Kannst ja abfragen, ob er schon an der Position steht:

    GML-Quellcode

    1. if (point_distance(x,y,target_x,y)>2) {move_towards_point(target_x,y,2);} else {x = target_x}

    2. Der Code zum tauschen kommt ja nur dann wenn du es willst.
    3. Wenn du nicht mehr als 300 Puzzleteile hast, geht das in Ordnung.

    Und was meinst du mit "langsam im Kreis tauschen"? Ich kenne das DS Spiel nicht.
    EDIT: Jetzt ist mir alles klar, Meister xD

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

  • Im DS Spiel ist es ja nicht so!
    Ich meine im kreis tauschen (siehe Bild im anhand):

    Aber jetzt mal was viel wichtigeres:
    Wie kann ich das so programmieren, dass immer wenn mehr als 3 Teile sich ketten, auflösen.
    So ähnlich wie bei Tetris.
    Es soll erkennen ob nun 3 oder 4,5,.. aneinanderliegen. Und vielleicht noch ein Cambo.
    Bilder
    • ww.jpg

      25,9 kB, 389×198, 221 mal angesehen
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

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

  • Ich wuerde an deiner Stelle darueber nachdenken, dich an dieser Stelle vom Game Maker zu loesen und die Bloecke in einer Matrix abzuspeichern. Dafuer nimmst du entweder ein grid oder einen zweidimensionalen Array.
    Die entsprechenden Werte des Arrays sind grob diese hier:
    0 - kein Block
    1 - roter Block
    2 - blauer Block
    etc

    Dabei bist du allerdings mit zwei Problemen konfrontiert: Naemlich dem Hochfahren der Bloecke und ihren sonstigen Eigenschaften (im Tausch, beim Aufloesen, Blocker, im Runterfallen).
    Wie du das loest - dein Bier, selber schuld, wenn du dir so was schwieriges aussuchst. :D

    Aber welchen Vorteil bietet dir eine Matrix? Du kannst einfach Nachbarn abfragen. dies geht bei Arrays mit z.B. playfield[xx+1,yy]. Mit for Schleifen kannst du dann ueberpruefen, wieviele Bloecke in einer Richtung die gleiche Farbe haben. Grids haben da noch ein paar nette Spielereien, schau dir die Hilfe an.
  • Danke für Eure Antworten!
    Aber für die Frage mit dem Auflösen und Combos werde ich ein neues Thema machen.
    Denn dieses heißt ja "Instancen.move_towards_point()" Da werden diese die mir dabei helfen könnten garnicht angelockt.
    Also mein neues Thema zur der Frage 3er Auflösen heißt:
    "Puzzle - Immer 3 Teile auflösen (Tetris)"

    Wenn ich wieder Probleme in diesen Thema habe, schreib ich wieder. Oder wenn mir jemand noch besser Codes schreibt. zB auch die mit der Kreisbewegung.
    Ich habe es jetzt so, ohne der hori. Kreisbewegung, gemacht. (sBild oben).
    Der alpha und der scale wird nun verändert. Sodass es aussieht, alsob die Teile 3Dim. sind.

    Nicht vergessen: Ich habe GameMaker 6.1!

    Danke!
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

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

  • Benutzer online 1

    1 Besucher