Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
3 registered members (AndrewAMD, juanex, Grant), 1,018 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
[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 Offline OP
User
JoGa  Offline 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
F
fogman Offline
Expert
fogman  Offline
Expert
F

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 Offline OP
User
JoGa  Offline 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 Offline
Senior Expert
Happy Birthday Superku  Offline
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: Superku] #334652
07/24/10 13:23
07/24/10 13:23
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
JoGa Offline OP
User
JoGa  Offline OP
User

Joined: Dec 2003
Posts: 988
Germany, Magdeburg
*kopftisch* -.-
genau, danke ^^

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 Offline
Member
Saturnus  Offline
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:
Code:
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 */ }


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1