Kollission bei FPS von Geschoss mit Onjekt? (GM7 Pro)
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
ah ok danke, des mit x,y funktioniert schon...
aber wie überprüfe ich z?
ich hab grade irgendwie keine ahnung mit welcher controll-frage (oder was auch immer) ich des da im script abfragen soll....
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
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
with (collision_circle(x,y,1,Vase1,true,false))
{
if (zs == obj_player.z) //ich hatte die variable z schon schon für was anderes, deshalb nahm ich zs
{
position_destroy(x,y)
instance_create(x,y,Vase2)
}
}
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
if (zs == objekt_player.z)
geschrieben hab, denn wenn ich
GML-Quellcode
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...
Ich glaube ich weiß es jetzt!
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.
Ich würde jedem Objekt nicht nur eine variable z zuteilen - auch eine die die Höhe angibt. Ich denke mal dass die Vase um einiges größer (also auch höher) ist, als die Kugel.
Dann fragst du das halt so ab: if z>=other.z && z>=other.z+other.hoehe ...
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)
danke, des ist ein sehr gutes beispiel.
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...
______________________
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
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