Kollission bei FPS von Geschoss mit Onjekt? (GM7 Pro)

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

  • Kollission bei FPS von Geschoss mit Onjekt? (GM7 Pro)

    :headtouch: Ich mache gerade meinen ersten richtigen Ego-Shooter. Ich hab schon dass man rumlaufen und sich umsehen kann, die Objekte und Wände hab ich gemacht, und man kann schon schießen. Also, beim schießen fliegt dann des Geschoss weg vom Spieler....(so wies halt sein soll....). Aber ich weis nicht, wie ich mache, dass zum Beispiel eine Vase zerbricht, wenn sie von der Kugel getroffen wurde. Also mein Problem ist, dass ich nicht weis, wie mein PC erkennt, dass die Kugel mit der Vase in berührung kam... Kann mir da einer helfen? ?(
  • Hier gibt es mehrere möglichkeiten.
    Zum einem die collison_xyz - Pallette und zum anderen die eingebaute Kollisions-erkennung.

    Da du anscheinend dich schon mit GML gut auskennst (wegen 3D), würde ich sagen benutzt du, im Step event (normalen), prüft ob eine kollision mit dem Objekt stattfindet ( collision_circle(x,y,5,o_name,true,false); ). Radius gegen den Bullet-Radius austauschen und o_name gegen den Vasen namen.
    Dann halt das Bullet Objekt zerstören, und die Vasen (vllt mit instance_change) in das Objekt der zerbrochenen Vase tun.

    Achja: nicht vergessen auch noch z zu prüfen, mit +- dem radius der Kugel

    Edit:
    Wilkommen im Forum ;D

    MFG
    Metalknight
  • Der Game Maker kennt die z Variable nicht.
    Du musst Sie in der Create erstellen.
    Du solltest dein Standart immer auf z = 0; machen. Dann brauchste auch bei den anderen sachen nicht immer z manuell eingeben ;D

    Dann kannste des so machen:

    GML-Quellcode

    1. with (collision_circle(x,y,5,o_name,true,false))
    2. {
    3. if (z == o_player.z)
    4. {
    5. <tue dies>
    6. }
    7. }
  • Variable z in allen Objekten erstellt? ( edit: wenn nein, dann mach das, denn alle Objekte brauchen das, sonst funkt das net mit den z vergleichen!)

    Und bloß nicht
    var z;
    machen, denn das stichwort var erstellt lokal Variablen (hier im beispiel hieße das, dass z nur im create event existiert!)

    Ansonsten wüßte ich jetzt auch net...

    Wenns das net ist, schreib am besten mal die wichtigen teile des skripts raus, damit man dir genauer helfen kann.

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

  • ich hatte bei der Vase die variable z vergessen, aber jetzt zerstörts die vase wieder auch, wenn ich weit darüber schieße............... des hab ich geschrieben:

    GML-Quellcode

    1. with (collision_circle(x,y,1,Vase1,true,false))
    2. {
    3. if (zs == obj_player.z) //ich hatte die variable z schon schon für was anderes, deshalb nahm ich zs
    4. {
    5. position_destroy(x,y)
    6. instance_create(x,y,Vase2)
    7. }
    8. }


    mit fällt gerade auf, dass ich bei dem position destroy wieder nur x und y hab... liegts daran?
    aber was müsste ich da dann wieder schreiben?
  • ich glab nicht, weil ich hab die variable z=0; (ich hab bei mir zs=0; gemacht) bei vase und player, aber auch bei kugel angegeben. daran kanns glaub net liegen.
    und ich denke es liegt auch net daran, dass ich

    GML-Quellcode

    1. if (zs == objekt_player.z)

    geschrieben hab, denn wenn ich

    GML-Quellcode

    1. if (zs == objekt_bullet.z)

    schreibe, dann wird das daruf folgende event erst garnet ausgeführt.....

    ...Also ich denke schon, das ich beim destroy_event auch noch z angeben muss, bin mir aber net sicher... :headtouch: :headtouch: :headtouch:
  • Ich glaube ich weiß es jetzt! :D
    Es scheint wohl so, dass du deiner Kugel immer den gleichen Z Wert gibts. Du musst deiner Kugel aber einen Z Wert geben, der die Blickrichtung(nach Oben und Unten) beachtet. Einen Code könnte ich dir nur sagen wenn ich dein Mouselook Script hätte. ;)
    Bei position_destroy(x,y) kann man keinen Z Wert angeben, weil der GM keine 3D Kollisiopnsprüfung eingebaut hat.
  • also ich denke des ist die Erklärung, dass ich z je nach der Blickrichtung angeben muss oder so....
    also ich hab des Mauslookscript so gemacht: (z und zdirection hab ich im Create-event als =0 angegeben)

    GML-Quellcode

    1. direction-=(display_mouse_get_x()-display_get_width()/2)/8;
    2. zdirection-=(display_mouse_get_y()-display_get_height()/2)/8;
    3. display_mouse_set(display_get_width()/2,display_get_height()/2);
    4. if zdirection > 89 then zdirection = 89;
    5. if zdirection < -89 then zdirection = -89;

    kannst du mir damit weiterhelfen? :huh:

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

  • danke, des ist ein sehr gutes beispiel. :thumbsup:
    ich probiers mal, so wie der typ des da macht. der macht des aber halt irgendwie anders mit dem schießen....
    außerdem muss ich da erst mal rausfinden was was, was wo und wozu was ist....
    scheint ziemlich kompliziert zu sein... :wacko:
    ______________________
    weis vieleicht trotzdem jemand, wie des mit der z-variable geht :?:

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

  • Ich würde empfehlen für normale schüsse evtl garnicht umbedingt Objekte zu erstellen sondern vllt nur das Klicken zu werten.

    Der Vorteil hierbei wäre meiner Meinung nach, dass die Kugel keine immense Geschwindigkeit braucht, womit sie unter Umständen durch das Ziel fliegen würde.


    Ich denke, das wäre mit collision_line machbar und einfach die Höhe in der dein Fadenkreuz ist gelten lassen.
    Bin mir nicht sicher, da ich mich mit 3D nich so auskenne aber ich denke das wär ne möglichkeit

    EDIT: Was hinzugefügt...
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Ich würde es rein mathematisch so betrachten:

    Du nimmst den z-Wert von deiner View, den Winkel deiner View und rechnest dann über den Tangens (Ankathete = point_distance(obj_player.x,obj_player.y,ziel.x,ziel.y) aus auf welcher höhe der Schuss rein theoretisch bei entfernung des Objekts auftreffen würde.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet