in versch. Richtungen schießen

  • GM 7
  • in versch. Richtungen schießen

    Hi, hab schon in der Hilfe und im Archiv und so nachgeschaut und bin auch fündig geworden, aber das was da stand, hat bei mir nicht funktioniert, weiß nicht was ich falsch gemacht hab.
    Ich möchte ein Objekt erstellen, dass nach oben, unten, rechts und links laufen kann, das bekomm ich noch hin
    und dann möchte ich aber, dass wenn er nach links schaut und ich leertaste drücke, dass er dann nach links schiesst, wenn ich nach oben schaue, dann nach oben schießt, usw.
    Das soll eine Top-Ansicht sein und ich verwende dann auch 5 versch. Sprites einen stehend, rechts laufend, links laufend, nach oben laufend und nach unten laufend.
    Das weiß ich alles, blos ich weiß nicht wie man in versch. Richtungen schießt.
    Geht das ganze mit D&D?

    Und noch ne Frage: Wie funktioniert das bei den Aktionen mit dem Abfragen, z.b. Test Score oder so.
    Also ich versteh das so, dass wenn das Ereignis true ist, dass es dann die anderen Aktionen in diesem Event "abspielt" und wenn das Ereignis dann false ist, dass es dann die anderen Aktionen im selben Event eben nicht abspielt, stimmt das so oder funktioniert das anders?

    Danke schonmal für eure Hilfe.

    Gruß
    Gruß Gamer
  • Zuerst die Antwort auf deine zweite Frage:
    Wenn das Ergebnis der Frage false ist, dann wird die NÄCHSTE Anweisung übersprungen.
    Die auf die Frage folgende Anweisung wird nur ausgeführt, wenn das Ergebnis true ist.
    Nun kannst du auch mehrere Anweisungen an die Frage koppeln, wenn du sie mit den zwei Dreiecken (start/end of block) zu einem Block zusammenfasst.

    Und mit dieser Methode kannst du auch dein erstes Problem lösen.

    Du machst eine Variablenabfrage ("VAR" im achteckigen Symbol) und gibst als Variable direction ein.
    Direction kann 0 (=Figur schaut nach rechts) über 90 (=Figur schaut nach oben), 180 (=Figur schaut nach links) und 270 (=Figur schaut nach unten) bis zu 360 sein (=Figur schaut wieder nach rechts). Falls du 4 Richtungen hast, erstellst du die Abfrage für jede dieser Werte und erstellst nach jeder dieser Abfragen mit einer "create instance of an object" Action ein passendes Objekt (obj_schuss_links, obj_schuss_rechts etc.).
    Damit du nicht für jeden Schuss eigene Kollisionsevents erstellen musst, kannst du den verschiedenen Schussobjekten ein gemeinsames parent-Objekt geben (in den object properties). Du musst dann nur Kollisionsevents mit dem parent-Object und den Gegnern einbauen (für Gegner bietet sich auch ein parent-Objekt an).

    Zusatz:
    Mit GML würde das ganze noch etwas einfacher gehen (man kommt zB mit nur einem Schussobjekt aus):

    GML-Quellcode

    1. // Keyboard pressed Event <space>
    2. schuss=instance_create(x,y,obj_schuss);
    3. schuss.direction=self.direction;


    Zusatz 2: copyboy hat die Sache noch etwas schöner erklärt (vor allem hatte ich vergessen, dass es in drag&drop ein "create instance of an object with a motion" gibt... (drag&drop ist bei mir einfach schon zu lange her):S
    Einige meiner Spiele:
  • Deine zweite Frage beantworte ich am besten als erstes:
    In GML würde das ganze so aussehen:

    GML-Quellcode

    1. if (score >= 100) // Wenn Punkte größer gleich 100:
    2. { // Anfang eines Blocks.
    3. // Hier kommen die Aktionen rein, die du ausführen willst.
    4. } // Ende eines Blocks.
    Das selbe in D&D:
    If score is larger than 99 (larger or equal gibts in D&D nicht)
    Start of a Block
    ~ Hier kommen die Aktionen rein, die du ausführen willst.
    End of a Block

    Wenn du den Block weglässt, wird nur die nächste Aktion ausgeführt, oder auch nicht:
    If score is larger than 99
    Go to next room // Wird ausgeführt, wenn score größer als 99
    Jump to a given position // Wird immer ausgeführt

    Das ganze mit else, in diesem Fall wird gefragt, ob man noch weiterspielen will oder nicht.
    If the user answeres yes to a question
    Restart the game
    Else
    End the game


    Nun zu deinem Problem:
    Es wäre eine Möglichkeit, wenn du eine Variable erstellt, die die Richtung speichert
    und wenn du die Richtung änderst, änderst du gleich auch die Variable.
    Richtungen im Game Maker fangen bei 0 (rechts) an und gehen dann gegen den Uhrzeigersinn weiter,
    bei 360 ist sie wieder rechts. Also: 0 = rechts, 90 = oben, 180 = links, 270 = unten.

    Wenn du nun nach oben schaust, machst du im selben Event Set variable richtung to 90.
    Und statt nimmst du dann und trägst bei speed deine gewünschte Geschwindigkeit
    und bei direction deine Variable, also richtung ein.
    Vergiss nicht, auch im Create Event die Variable zu setzten, in die Startrichtung!

    Ich hoffe, das hilft ...
    Gruß, dein kopierjunge ;)

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

  • interceptor schrieb:

    Zuerst die Antwort auf deine zweite Frage:
    Wenn das Ergebnis der Frage false ist, dann wird die NÄCHSTE Anweisung übersprungen.
    Die auf die Frage folgende Anweisung wird nur ausgeführt, wenn das Ergebnis true ist.
    Nun kannst du auch mehrere Anweisungen an die Frage koppeln, wenn du sie mit den zwei Dreiecken (start/end of block) zu einem Block zusammenfasst.

    Und mit dieser Methode kannst du auch dein erstes Problem lösen.

    Du machst eine Variablenabfrage ("VAR" im achteckigen Symbol) und gibst als Variable direction ein.
    Direction kann 0 (=Figur schaut nach rechts) über 90 (=Figur schaut nach oben), 180 (=Figur schaut nach links) und 270 (=Figur schaut nach unten) bis zu 360 sein (=Figur schaut wieder nach rechts). Falls du 4 Richtungen hast, erstellst du die Abfrage für jede dieser Werte und erstellst nach jeder dieser Abfragen mit einer "create instance of an object" Action ein passendes Objekt (obj_schuss_links, obj_schuss_rechts etc.).
    Damit du nicht für jeden Schuss eigene Kollisionsevents erstellen musst, kannst du den verschiedenen Schussobjekten ein gemeinsames parent-Objekt geben (in den object properties). Du musst dann nur Kollisionsevents mit dem parent-Object und den Gegnern einbauen (für Gegner bietet sich auch ein parent-Objekt an).
    Oder du machst einfach ein Objekt obj_bullet (Name egal), und machst im Pressed Space-Event die Aktion Create Moving (Aktionsset main1) und das Ganze so:

    object: obj_bullet
    x: self.x
    y: self.y
    speed: 6 (Oder irgendwas halt)
    direction: direction
    Wenn du bei direction einfach direction reinschreibst bewirkt das, dass er immer in die richtung schießt, in die er gerade guckt.

    NitroGame entertainment

    €dit: Zu spät :para:
  • Hey, danke für die zahlreichen, ausführlichen Antworten, hab beides jetzt verstanden und werde es sofort ausprobieren.

    edit: ok es funktioniert, aber geht es auch, dass wenn ich jetzt nach links laufe und dann stehen bleib und dann schiesse, dass er nach links schiesst, weil er schiesst wenn ich stehen bleibe nach rechts, hab die Methode von NitroGame entertainment genommen.

    edit2: achja noch was, hab das ja mit den views verstanden, aber wie macht man ein splitscreen, möchte nämlich ein zweispieler game machen, hab jetzt 2 views aktiviert und bei dem 2. das andere objekt folgen lassen, aber es folgt jetzt nur noch dem zweiten
    Gruß Gamer

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

  • The Gamer schrieb:

    edit: ok es funktioniert, aber geht es auch, dass wenn ich jetzt nach links laufe und dann stehen bleib und dann schiesse, dass er nach links schiesst, weil er schiesst wenn ich stehen bleibe nach rechts, hab die Methode von NitroGame entertainment genommen.
    Hab nicht umsonst meine Methode so ausführlich erklärt :P

    Zu den Views: Benutzt du Parents? Sicher, dass es du die richtigen Objekte eingestellt hast?
    Wenn die Antworten Nein und Ja lauten wird es mal Zeit, die Datei anzuhängen :D
  • Bei den views war nur was falsch eingestellt, das geht jetzt doch und dann werd ich mal deine methode probieren.

    edit:

    Bei deiner methode funktioniert das auch nicht, habs so gemacht wies dran stand und bei den views, wie macht man da einen Balken in die mitte, zwischen den screens, weil sonst sieht man das fast nicht.

    edit2:

    juhu es funktioniert, aber fragt mich net was ich alles umgestellt hab, hab tausende dinge ausprobiert.
    Gruß Gamer

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