Kollsion mit unterschiedlichen Spritegrößen eines Objektes

  • GM 8

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

  • Kollsion mit unterschiedlichen Spritegrößen eines Objektes

    Hallo Community,

    mein Projekt ist ein Weltraumshooter bei dem es eine Waffe gibt/geben soll, wo man Bomben werfen kann.
    Je länger man die linke Maustaste gedrückt hält desto größer wird die Explosion.
    Das Objekt fliegt als Bombe, macht keinen Schaden an Gegnern und wenn man nun die rechte Maustaste drückt, erscheint ein Sprite (definiert 250x250 pixel), jedoch in der entsprechenden Größe etwas kleiner, z.B. weil ich 2 Sekunden die linke Maustaste gedrückt gehalten habe, ist es 100x100 pixel groß.
    Jedoch wird dies bei einer Kollision nicht gewertet ebenso nicht bei einer distanz_to_objekt. Es wird das 250x250 pixel große Standart genommen (welches eigentlich unsichtbar ist) und wenn Gegner nun dieses "berühren" werden sie zerstört.

    Wie kann ich das umgehen bzw. das wirklich nur diejenigen (Gegner) zerstört werden, die auch in der ausgewählten Größe drin sind. Eine globale Variable ist auch nicht möglich, da mehrere Bomben unterwegs sein können und alle bei rechter Maustaste mit derselben Explosionsgröße explodieren (schon ausprobiert :p ).

    Ich hoffe ich habe nicht etwas Wichtiges vergessen, trotzdem schoneinmal ein Dankeschön im Voraus! :)

    Mit freundlichen Güßen
    Seth
  • Wie kann ich das umgehen bzw. das wirklich nur diejenigen (Gegner) zerstört werden, die auch in der ausgewählten Größe drin sind. Eine globale Variable ist auch nicht möglich, da mehrere Bomben unterwegs sein können und alle bei rechter Maustaste mit derselben Explosionsgröße explodieren (schon ausprobiert :p ).

    Das würde erst mal bedeuten das du die prüfung nicht aus der Bombe , sondern von den zu betreffende Gegner heraus rechnen muss.

    Man fragt als vom Gegner objekt haus ob eine Collision dem Explosionsradios der nächst gelegen bombe statt finden.
    Das muss man erst mal die in der nähe befindliech Bombe finden.
    Ich nenne sie jetzt einfach mal obj_bombe
    Da mann ja nicht weis wie groß der Radius beiderabfrage ist muss man es also Prüfen, auch wenn es sein kann das die Bombe garnicht trefen würde.

    Ich würde das evtl so im gegnerobjekt machen

    GML-Quellcode

    1. if instance_exists(obj_bombe)=true then
    2. {
    3. if collision_circle(instance_nearest(x,y,obj_bombe).x,instance_nearest(x,y,obj_bombe).y,instance_nearest(x,y,obj_bombe).bombradius,id,1,0)=true then
    4. {
    5. //Aktion beim Bombentreffer
    6. }
    7. }

    Fragt zur sicherheit ob eine Bombe überhaupt da ist damit kein Fehler ensteht.
    Dann nach fragt sich das Gegner objekt ob es in dem Bomben Radius der nächst befindlichen Bombe ist.
    Sollte eigentlich funktionieren
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • x-sascha schrieb:

    Ich würde das evtl so im gegnerobjekt machen

    GML-Quellcode

    1. if instance_exists(obj_bombe)=true then
    2. {
    3. if collision_circle(instance_nearest(x,y,obj_bombe).x,instance_nearest(x,y,obj_bombe).y,instance_nearest(x,y,obj_bombe).bombradius,id,1,0)=true then
    4. {
    5. //Aktion beim Bombentreffer
    6. }
    7. }

    Vielen Dank erstmal für die Hilfe.

    Was genau meinst du mit "bombenradius"
    Ist das eine Variable im Objekt "obj_bombe"???
    Wenn ja funktioniert es leider nicht.
    Die Gegner werden nur dort zerstört wo das unsichtbare Sprite ist. :(

    €dit:
    Beim ERstellen einer Bombe wird der bombenradius über eine globale variable an die Bombe übergeben.
    Gezeichnet wird die Explosion dann mit
    draw_sprite_stretched(spr_explosion,0,x-bombenradius/2,y-bombenradius/2,bombenradius,bombenradius)