Ein paar Noob-Fragen

  • GM 8

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

  • Ein paar Noob-Fragen

    1. Wie kann man dafür sorgen, dass Objekt1, sobald es erstellt wird an einem Objekt2 kleben bleibt, wobei das andere Objekt sich im Zentrum von Objekt 1 befindet (In meinem Game wird bei jedem Step von Objekt 2 ein Objekt 1 erstellt, das sozusagen die Reichweite von Objekt 2 darstelt. Daher soll sich Objekt 2 im Zentrum von Objekt 2 befinden, am desten glech dort spwanen und dann auch dort bleiben. Ich hab schon ewig herumprobiert aber ni hat funktioniert, und die meisten Tutori<als hier im Forum ham irgendwie auch nciht funktioniert)?

    2. Ich habe jetzt den Sprite für ein Objekt "Feuerball erstellt", der in regelmäßigen Abständen von einem stationären Gegner abgefeuert werden soll. Ich habe keinerlei Erfahrung im GML, daher:

    2a) Wie kann ich die Länge der Pausen zwischen den Schüssen von Feuerball-Schüssen bestimmen?

    2b) Wie kann ich es so arrangieren, dass der Feuerball-Sprite sich so neigt, dass ein Punkt von ihm immer Richtung Ziel zeigt, also
    dass er eben einen realistischen Winkel annimmt?

    Das wars fürs erste. Es wird sicher noch was hinzukommen, wenn sich mir neue Fragen eröffnen und weder Probieren, noch die SuFu eine Lösung offenbaren, wie es bei diesen Fragen der Fall ist.
  • Kalgalath schrieb:

    1. Wie kann man dafür sorgen, dass Objekt1, sobald es erstellt wird an einem Objekt2 kleben bleibt, wobei das andere Objekt sich im Zentrum von Objekt 1 befindet (In meinem Game wird bei jedem Step von Objekt 2 ein Objekt 1 erstellt, das sozusagen die Reichweite von Objekt 2 darstelt. Daher soll sich Objekt 2 im Zentrum von Objekt 2 befinden, am desten glech dort spwanen und dann auch dort bleiben. Ich hab schon ewig herumprobiert aber ni hat funktioniert, und die meisten Tutori
    2. Ich habe jetzt den Sprite für ein Objekt "Feuerball erstellt", der in regelmäßigen Abständen von einem stationären Gegner abgefeuert werden soll. Ich habe keinerlei Erfahrung im GML, daher:

    2a) Wie kann ich die Länge der Pausen zwischen den Schüssen von Feuerball-Schüssen bestimmen?

    2b) Wie kann ich es so arrangieren, dass der Feuerball-Sprite sich so neigt, dass ein Punkt von ihm immer Richtung Ziel zeigt, also
    dass er eben einen realistischen Winkel annimmt?

    Das wars fürs erste. Es wird sicher noch was hinzukommen, wenn sich mir neue Fragen eröffnen und weder Probieren, noch die SuFu eine Lösung offenbaren, wie es bei diesen Fragen der Fall ist.
    zum ersten kann ich nix sagen... ich glaub das hab ich nicht ganz kapiert was da genau passieren soll ^^

    aber der 2. Punkt ist ganz einfach, auch ohne GML.

    2a)
    :event_create: ins Create event machst du nen alarm... sagen wir mal Alarm 0 :action_alarm: und setzt ihn auf die gewünschte verzögerung... Dein Roomspeed ist der wert für 1ne sekunde
    :event_timer: im alarm 0 event lässt du dann den Feuerball erstellen :action_create: und setzt du da wieer die selbe alarm 0 :action_alarm: aktion rein.

    ich hoffe ich hab das einigermaßen gut erklärt... bin nicht gut bei sowas xD

    2b) dafür brauchst du dann GML
    ins :event_create: Create Event setzt du folgenden Code

    GML-Quellcode

    1. image_angle = point_direction(x,y,ZIEL.x,ZIEL.y);

    das "ZIEL" ersetzt du dann natürlich gegen den namen des gewünschten ziels.



  • Hey,

    (Hoffentlich interpretiere ich Punkt 1 richtig.)

    Du möchtest ein Objekt erstellen, was also ständig dem anderen Objekt folgt bzw. an einer
    bestimmten Position dran 'klebt'.

    Wie zum Beispiel ein Objekt 'Pistole', das ständig am Objekt 'Spieler' klebt – und zwar direkt an der Position der Hand.

    Ich habe das bei mir wie folgt gelöst:

    Das Objekt, das am anderen kleben soll (folgend nurnoch Objekt1) bekommt ins Step-Event:
    :action_jumpposition: Jump to Position mit den Werten:

    x: Objekt2.x
    y: Objekt2.y
    und kein Haken bei 'Relative'.

    Sollte das Objekt1 nun noch nicht an gewünschter Stelle stehen, schreibst du einfach hinter die Werte
    bei x und y oben zum Beispiel +50 oder -30 um die Position vom Objekt1 noch weiter zu beeinträchtigen.
    Also x: Objekt2.x +50 y: Objekt2.y -30

    Beim X: Plus = weiter nach rechts , Minus = weiter nach links
    Beim Y: Plus = weiter nach unten, Minus = weiter nach oben
  • Gut Punkt 1 is jetzt gelöst, dank dir Dark Viper, aber2a kann nicht gehen, denn dann würde er ja Feuerbälle schleudern, sobald er kreirt wird. Das soll er aber erst tun sobald das Objekt "Spieler" mit dem Objekt1 kollidiert, das daraufhin, eine Variable ändert, dies führt dazu dass Objekt 2 eine Variable ändert und erst dann anfängt mit dem Feuerbälle schleudern. Außerdem hätt ich es gern ohne :action_alarm: gelöst, aber das hatte ich vergessen zu erwähnen wie mir grad auffällt.
  • Kalgalath schrieb:

    Gut Punkt 1 is jetzt gelöst, dank dir Dark Viper, aber2a kann nicht gehen, denn dann würde er ja Feuerbälle schleudern, sobald er kreirt wird. Das soll er aber erst tun sobald das Objekt "Spieler" mit dem Objekt1 kollidiert, das daraufhin, eine Variable ändert, dies führt dazu dass Objekt 2 eine Variable ändert und erst dann anfängt mit dem Feuerbälle schleudern. Außerdem hätt ich es gern ohne :action_alarm: gelöst, aber das hatte ich vergessen zu erwähnen wie mir grad auffällt.
    Das würde ich wie folgt lösen:

    Objekt 1:

    Im Objekt1 erstellst du im Create-Event zunächst:
    :action_variable: Set Variable "collision_with_player" mit dem Wert "0".

    Dann erstellst du ein Collision-Event zu "Spieler": :event_collision:

    Dort schreibst du wieder :action_variable: Set Variable "collision_with_player" nur diesmal mit dem Wert "1" rein.

    Darunter kommt dann noch eine Abfrage, :action_ifnumber: ob Objekt 2 überhaupt existiert.
    (Test Instance Count mit den Werten object: "Objekt2" number: "0" operation: "larger than")

    Und darunter wiederum:
    :action_begin:
    :action_variable: Set Variable (für Objekt2 auswählen) "open_fire" mit dem Wert "1"
    :action_end:

    Objekt 2:

    Nun erstellst du im Create-Event von Objekt2 noch die Variable:
    :action_variable: Set Variable "open_fire" mit dem Wert 0.
    (Schließlich kann Objekt1 nur die Variable "open_fire" im Objekt2 ändern, wenn es diese schon gibt.)

    Anschließend kommt in das Step-Event von Objekt2:
    :action_ifvariable: Test Variable: variable: "open_fire" value: "1" operation: "equal to"
    und darunter dann :action_begin: "Hier gehts gleich weiter" :action_end:

    Bis hierhin haben wir schonmal erreicht:

    Objekt1 erhält beim Erstellen eine Variable (collision_with_player) mit dem Wert "0", die zur Abfrage dient, ob das Objekt1 mit dem Spieler kollidiert ist. Kollidiert das Objekt1 mit dem Spieler, wird der Wert dieser Variable auf "1" gesetzt. Anschließend wird geprüft, ob es ein Objekt2 gibt. Von diesem wird dann die Variable "open_fire", anhand welcher bestimmt wird, ob Objekt2 Feuerbälle abfeuert, ebenfalls auf "1" gesetzt.

    Objekt 2 erhält beim Erstellen eine Variable (open_fire) mit dem Wert "0", die dazu dienen soll, festzulegen, ob Objekt2 das Feuer eröffnen soll. Objekt2 prüft während seines Step-Events kontinuierlich, ob seine Variable "open_fire" den Wert "1" hat. Ist das der Fall, wird gefeuert.

    Soho.

    Zu guter letzt musst du nurnoch wissen, wie dein Objekt2 Feuerbälle werfen soll.

    Wenn du willst, dass die Feuerbälle zufällig generiert werden, (was aber auch zur Folge haben kann, dass gleich 2 direkt hintereinander geworfen werden) schreibst du in den leeren Bereich oben wo ich lediglich "Hier gehts gleich weiter" reingeschrieben habe, folgendes:

    :action_ifdice: Test Chance mit einem Wert den du selbst bestimmen kannst und darunter
    :action_create: Dein Feuerball-Objekt.

    Wenn du einen festen Zeitabstand zwischen den Feuerbällen haben willst, empfehlen sich tatsächlich eher die
    "Alarme". Dazu müsstest du wie kevb0ard schon schrieb beachten, dass dein Room-Speed (normalerweise 30) 'eine Sekunde' beträgt.

    Nehmen wir mal an, du willst, dass Objekt2 alle 3 Sekunden einen Feuerball abfeuert, dann packst du in den Bereich folgendes:

    :action_alarm: Set Alarm mit den Werten:
    number of steps: "90"
    in alarm no: "Alarm 0" (oder irgendein Beliebiger)

    Nun erstellst du in Objekt2 das Alarm-Event zum jeweiligen Alarm (im Beispiel jetzt weiterhin Alarm 0) :event_timer:

    Dort kommt dann folgendes rein:

    :action_begin:
    :action_create: Zunächst der/die/das Create für den Feuerball.
    :action_alarm: Dann wird über Set Alarm mit den exakt gleichen Werten wie oben festgelegt, dass nach den nächsten 3 Sekunden
    der nächste Feuerball fliegt.
    :action_end:


    Wenn ich nun keinen schwerwiegenden Fehler gemacht habe, müssten diese Änderungen das gewünschte Ergebnis erzielen. Probiers am besten erstmal aus (mit einer Sicherheitskopie) und schreib als Antwort, ob es funktioniert hat oder nicht.

    Edit: Der Text wurde etwas besser strukturiert. <_<'

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