Waffen Gebietseffekt?

  • GM 7

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

  • Waffen Gebietseffekt?

    Hallo, zusammen

    Mal ne Frage...
    Ist es möglich mehrere Gegner in einem bestimmten Umkreis (Fläche) unterschiedlichen oder gleichen Schaden zufügen. Kann mir da jemand etwas raten?


    Mfg :D
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • 8o um ein Areal/eine Fläche zu erfassen, bzw die getroffenen Instanzen. Würde ich eine sprite nehmen die dem radius entspricht und dann in den collisions event der relevanten Intanzen was schreiben.

    ansonsten guck dir mal collision_circle in der Hilfe an.

    MfG Genesis

    edit: um unterschiedlich viel schaden zu machen guck dir mal distance_to_point an^^
  • wolff schrieb:

    Und um dann den unterschiedlichen Schaden zu ermitteln, könntest du die Entfernung abziehen.

    GML-Quellcode

    1. schaden = 100-distance_to_point(bomb.x,bomb.y);

    Richtig, allerdings muss das so eingebunden werden, dass man keine Energie gewinnt:

    Für gleichen Schaden unabhängig vom Abstand:

    GML-Quellcode

    1. maxdistance = 100 // oder ein anderer Wert, je nach Weite
    2. if distance_to_point(bomb.x,bomb.y) < maxdistance damage = 50 // oder ein anderer Schadenswert


    Für unterschiedlichen Schaden je nch Abstand (linear zunehmend):

    GML-Quellcode

    1. maxdistance = 100 // oder ein anderer Wert, je nach Weite
    2. if distance_to_point(bomb.x,bomb.y) < maxdistance damage = maxdistance - distance_to_point(bomb.x,bomb.y)


    Für unterschiedlichen Schaden je nach Abstand (quadratisch zunehmend):

    GML-Quellcode

    1. maxdistance = 100 // oder ein anderer Wert, je nach Weite
    2. if distance_to_point(bomb.x,bomb.y) < maxdistance damage = (maxdistance - distance_to_point(bomb.x,bomb.y))^2
    Dieser Beitrag ist Spam.
    | |
    | |
    \. ./
    \/
  • Danke erstmal für eure Antworten. :)

    Nun, ich habe mich für einen "quadratischen Gebietseffekt" entschieden.

    Mein Aktueller Code sieht so aus :

    GML-Quellcode

    1. maxdistance = 30 // Angepasst
    2. if distance_to_point(objBulletbazooka.x,objBulletbazooka.y)< maxdistance damage = (maxdistance - distance_to_point(objBulletbazooka.x,objBulletbazooka.y))^2


    Habe eine Frage dazu : Wieso hat es keine geschweifte Klammern beim Beispiel (Dieser Code oben ist ja übernommen)?

    Habe es so versucht : -->Das Fenster schliesst sich im "Run-Modus" gleich wieder.
    Was habe ich falsch gemacht.

    Habe den Code bei der "Kollision mit Player" eingefügt.


    Mfg ^^
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • xx-XtremeX-xx schrieb:

    Danke erstmal für eure Antworten. :)

    Nun, ich habe mich für einen "quadratischen Gebietseffekt" entschieden.

    Mein Aktueller Code sieht so aus :

    GML-Quellcode

    1. maxdistance = 30 // Angepasst
    2. if distance_to_point(objBulletbazooka.x,objBulletbazooka.y)< maxdistance damage = (maxdistance - distance_to_point(objBulletbazooka.x,objBulletbazooka.y))^2


    Habe eine Frage dazu : Wieso hat es keine geschweifte Klammern beim Beispiel (Dieser Code oben ist ja übernommen)?

    Habe es so versucht : -->Das Fenster schliesst sich im "Run-Modus" gleich wieder.
    Was habe ich falsch gemacht.

    Habe den Code bei der "Kollision mit Player" eingefügt.


    Mfg ^^

    Zuerst mal: Du kannst da geschweifte Klammern verwenden, ist aber nicht nötig, da nur ein Befehl ausgeführt wird.

    Wenn ein Objekt mit dem Player kollidiert, ist der Abstand ja automatisch 0. Oder missverstehen wir uns jetzt?
    Dieser Beitrag ist Spam.
    | |
    | |
    \. ./
    \/
  • So vielleicht?

    GML-Quellcode

    1. maxdistance = 30 // Angepasst
    2. if distance_to_point(objBulletbazooka.x,objBulletbazooka.y)< maxdistance
    3. damage = power((maxdistance - distance_to_point(objBulletbazooka.x,objBulletbazooka.y)),2)

    damage ist der Wert, der abgezogen werden soll, das kannst du z.B. so:

    GML-Quellcode

    1. hp -= damage;
    2. // Wenn "hp" deine variable für das Leben des Objektes ist.


    EDIT: Habs, ^ für "hoch" gibts im Game Maker nicht :P
  • Wenn ein Objekt mit dem Player kollidiert, ist der Abstand ja automatisch 0. Oder missverstehen wir uns jetzt?


    Nene, hab das nur hingeschrieben. Es könnte auch im Create evect stehen.

    Aber wieso stürzt es beim "Run Modi" ab?

    Mfg
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • Hab das Problem mit dem Abstürzen beseitigt.

    Aber hab schon ein Neues Problem.

    Ich hab nen Error bei dem Code mit den " .x " und ".y " .

    GML-Quellcode

    1. abfrage = 0;
    2. maxdistance = 100 // Angepasst
    3. if (instance_exists(objBulletbazooka))
    4. {
    5. abfrage = 1;
    6. }
    7. if (abfrage = 0)
    8. {
    9. if distance_to_point(objBulletbazooka.x,objBulletbazooka.y)< maxdistance
    10. {
    11. global.bazookabulletToEnemy1Damage = power((maxdistance - distance_to_point(objBulletbazooka.x,objBulletbazooka.y)),2);
    12. }
    13. }
    Alles anzeigen


    Habe mal die "x,y" weggelassen.
    -->
    Es ist so, dass der Schaden gut ist. Dh. der Feind wird zerstört, allerdings nur der, der den Schuss abbekommt. Die anderen kommen immer davon. Ich habe die Maxdistanz (oben) auch schon mal 1000 gesetzt, dabei müsste das Ganze Feld fast ""verrecken"" Sry für den Kraftausdruck, ich meinte (ihr wisst schon). :rolleyes:

    Kann mir jemand helfen :D
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • Mach mal ins Stepevent, dann sollte es erstmal gehen. Und alles in ein if, das abfragt, ob die Bazookamunition existiert (if instance_exists(*bazookamunitionsobjekt*)).


    Das mit dem if habe ich bereits gemacht :). Aber gute Idee, tu es mal in den Stepevent.

    We'll see.


    Edit:

    Es gibt nun keine Fehlermeldung mehr wegen " .x " und " .y ".
    Aber das mit dem Gebietseffekt geht immer noch nicht.

    Soll ich mal alles, was mit dem Objekt zu tun hat hier posten? Villeicht findet ihr den Fehler so besser?


    Mfg :)
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von xx-XtremeX-xx ()

  • Also, dann lege ich mal los.

    1. objBulletBazooka :

    Events : || Actions :
    --------------------------------------------------------------------------------------------------------------
    Create || Blauepfeile (set speed relative to 30 and direction to 90)
    Step || FlächenSchaden (Script : siehe unten)
    Collision || BulletEnemyCollision (Script : siehe unten)
    Outsideroom || Execute piece of code(instance_destroy)
    --------------------------------------------------------------------------------------------------------------

    2. objPlayer (schiesst die Munition(en)) !Hier nur die Teile, wo es etwas mit der Munition zu tun hat!

    Events : || Actions :
    --------------------------------------------------------------------------------------------------------------
    Step || Execute piece of code

    GML-Quellcode

    1. //Hier oben einfach mit anderen Munitionen (das gleiche)
    2. ...
    3. if (keyboard_check(ord('2')))
    4. {
    5. if (global.munbazooka > 0)
    6. {
    7. global.munition = 2;
    8. }
    9. }


    <Space> || Execute piece of code

    GML-Quellcode

    1. //Hier oben andere Munitionen (gleich aufgebaut)
    2. ...
    3. if (global.munition = 2)
    4. {
    5. if (bazookaReady = true)
    6. {
    7. if (global.munbazooka > 0)
    8. {
    9. global.munbazooka -= 1;
    10. instance_create(x, y - 25, objBulletbazooka);
    11. bazookaReady = false;
    12. alarm[2] = 50;
    13. }
    14. }
    15. }
    Alles anzeigen

    --------------------------------------------------------------------------------------------------------------

    So, und da sind noch die dazugehörenden Scripts :

    1. Game Start (globale Varibalen) :

    GML-Quellcode

    1. //Schaden Durch Bazooka
    2. global.bazookabulletToEnemy1Damage = 100;
    3. // Munition Bazooka
    4. global.munbazooka = 10;
    5. //Diese globale Variable wird ausschliesslich beim Script FlächenSchaden verwendet!
    6. global.abfragebulletbazooka = 0;


    2. FlächenSchaden (neuere Version wie oben gepostet) :

    GML-Quellcode

    1. abfrage = global.abfragebulletbazooka;
    2. maxdistance = 1000 // Angepasst
    3. if (instance_exists(objBulletbazooka))
    4. {
    5. abfrage = 1;
    6. }
    7. if (abfrage = 0)
    8. {
    9. if distance_to_point(objBulletbazooka.x,objBulletbazooka.y)< maxdistance
    10. {
    11. global.bazookabulletToEnemy1Damage += power((maxdistance - distance_to_point(objBulletbazooka.x,objBulletbazooka.y)),2);
    12. }
    13. }
    Alles anzeigen



    Uuf! Ich glaube das war alles soweit. Falls ihr irgendwo nicht drauskommt (habe ja nur Ausschnitte ausgewählt, die mit der Bazooka übereinstimmen)


    Mfg :D

    Edit : Habt ihr den Fehler gefunden.

    Edit2 : Bitte helf mir. Ich weiss nicht wieso es nicht geht. Ich schaffe das nicht alleine... :(

    Edit3 : Bitte
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von xx-XtremeX-xx ()