|
0 registered members (),
6,962
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
[GER] A6 | Spieler, Gegner, Geschosse bei .pos_y=0 Bewegung
#330883
06/30/10 14:06
06/30/10 14:06
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
OP
User
|
OP
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
So, in meinem Hirn verknotet sich grad einiges:
Wir sind im Multiplayer, trotzdem hat das Problem mehr mit c-script als multiplayer zu tun:
Die Spieler rennen, hüpfen in einem Sidescroller munter herum. (c_move und für Gravitation c_trace) Und sollen einmal schießen können. Außerdem Wird es Gegner geben.
Die Gegner und die Spieler sollen ineinanderlaufen können. Sprich, wenn ein Spieler irgendwo steht (2D-sidescroller!), können die Gegner durch ihn hindurch weiterlaufen. Genauso sollen die Spieler durch die anderen Spieler und durch Gegner laufen können. Geschosse der Gegner sollen andere Gegner passieren, aber die Spieler treffen. Genau anderstherum sieht das mit den Geschossen der Spieler aus.
hab mir im Manual das mit my.push durchgelesen - aber wenn ich z.B 4 Spieler habe und jeder ein niedrigeren Pushwert als der andere hat, beißt sich der Hund ja in den Schwanz. ^^
hat jemand eine Idee, wie man das obige Problem regeln kann? Nochmal zusammengefasst:
Spieler können durch andere Spieler rennen und durch Gegner. Gegner können auch durch Gegner rennen und durch Spieler. Doch: Geschosse der Gegner können durch Gegner aber treffen Spieler. Geschosse der Spieler können durch Spieler aber treffen Gegner.
|
|
|
Re: [GER] A6 | Spieler, Gegner, Geschosse bei .pos_y=0 Bewegung
[Re: JoGa]
#331109
07/01/10 21:58
07/01/10 21:58
|
Joined: Apr 2005
Posts: 4,506 Germany
fogman
Expert
|
Expert
Joined: Apr 2005
Posts: 4,506
Germany
|
Du könntest vor jedem c_move ein paar quants in die Laufrichtung tracen. You zeigt dann ja auf die getroffene Entity und Du kannst sie so in der c_move Anweisung ignorieren oder eben nicht, je nachdem ob sie ein Gegner oder ein Player ist.
Alle Geschosse, Spieler und Gegner brauchen dann noch eine ID. my.skill1 = 666; // I´m an evil enemy bullet >:) Ist aber suboptimal aufgrund der vielen traces und unflexibel bei Sprüngen.
Mein Ansatz wäre irgendwie an den pointer zur getroffenen entity zu kommen, sei es durch traces oder c_move, was ja auch tracen beinhaltet und den you pointer setzt.
Ohne collision groups ist das gar nicht so einfach.
no science involved
|
|
|
Re: [GER] A6 | Spieler, Gegner, Geschosse bei .pos_y=0 Bewegung
[Re: fogman]
#334648
07/24/10 13:15
07/24/10 13:15
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
OP
User
|
OP
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
Jop, das mit dem trace ist mir nun nach einigem Überlegen als gute Alternative geblieben.
Nun hab ich noch die Frage, wie ich das mit der Vektorrechnung mache. Sagen wir, die Entity, die sich bewegen soll, ist mit pan, tilt und roll - Werten im Raum und soll jetzt vor sich tracen. Hierzu muss ich die "von"-Position und "Nach"-Position angeben. "von" ist ganz klar my.x Aber wie trace ich von der Front (relativen Position) der Entity weg, also in die Richtung, in die die Entity schaut? Die Endposition des c_trace-Befehls ist ja ne globale Weltposition... Nun muss man von der relativen Entityposition in die Richtung, in die sie schaut, einige Quants gehen und diese Position als Endtraceposition nehmen. Ich schaff das aber nicht, die Winkelangaben und die Position der Entity damit rein zu verwursten - hat jmd von euch ein Ansatz?
EDIT: Okay, ich hab überlesen, dass vec_for_angle nen Einheitsvektor liefert, dh. ich muss den theoretisch nur mit dem entity-pan ausführen lassen und dann per vec_scale auf die Trace-länge skalieren - wird gleich ausprobiert ^^ - danke
Last edited by JoGa; 07/24/10 13:22.
|
|
|
Re: [GER] A6 | Spieler, Gegner, Geschosse bei .pos_y=0 Bewegung
[Re: JoGa]
#334650
07/24/10 13:17
07/24/10 13:17
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
vec_set(temp,vector(50,0,0)); vec_rotate(temp,my.pan); vec_add(temp,my.x);
Meinst du so etwas?
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: [GER] A6 | Spieler, Gegner, Geschosse bei .pos_y=0 Bewegung
[Re: JoGa]
#334832
07/25/10 15:15
07/25/10 15:15
|
Joined: Dec 2008
Posts: 271
Saturnus
Member
|
Member
Joined: Dec 2008
Posts: 271
|
Ich kann mir nicht vorstellen, dass c_trace() hier eine zuverlässige Lösung ist. Was ist beispielsweise, wenn zwei Entities ineinander stehen (was nach der Spielbeschreibung ja durchaus möglich ist), die beide ignoriert werden sollen? Ich würde stattdessen versuchen, einfache Kollisionsgruppen nachzubauen. So ungefähr:
WIEDERHOLE für alle Entities in Liste
WENN Entity.Kollisionsgruppe in My.Ignorier-Liste
Entity.Passable = true
ENDE
ENDE
c_move(..., IGNORE_PASSABLE)
WIEDERHOLE für alle Entities in Liste
Entity.Passable = false
ENDE
"Ignorier-Liste" könnte ein Bitfeld sein, in das die zu ignorierenden Kollisionsgruppen hineingeORt werden: my.ignorierliste |= gruppe3 | gruppe8; Es lässt sich dann sehr einfach prüfen, ob eine bestimmte Gruppe in der "Liste" steht: if (you.kollisionsgruppe & my.ignorierliste) { /* -> steht drin */ }
|
|
|
|