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
2 registered members (Quad, AndrewAMD), 1,007 guests, and 6 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
c_trace problem in lite-C (AUM61 Bsp) #143546
07/26/07 13:29
07/26/07 13:29
Joined: Jul 2007
Posts: 16
R
Remataklan Offline OP
Newbie
Remataklan  Offline OP
Newbie
R

Joined: Jul 2007
Posts: 16
So, ich mal wieder. *nerv*

Ich hab hier nen Problem und mir fallen gleich alle Haare aus, wenn ich sie mir nicht vorher ausreiße.
Ich habe mir mal den Workshop vom AUM61 angeschaut, wo son Ninja durch die Gegend rennt und mit nem Schwert 3 Viecher verkloppt.
Für die Kollisionsabfrage benutzt der Autor einen c_trace zwischen 2 Vertices innerhalb des Ninjamodels an der Stelle wo das Schwert ist.
Ich dachte mir: Hey, geile Idee, mach ich ma nach. Nun hab ich den Salat, weil ich nämlich bald anfange zu weinen wie ein Baby, denn bei mir macht das Ganze nur (für mich unnachvollziehbare) Fehler.

Ein paar Worte zu dem was ich da mache:
Ich hab ne Kamera die genau überm Playermodel steht und auf ihn runterschaut. Ich habe eine NPCFigur, die einfach nur so im Raum rumsteht. Zwischen dieser NPCFigur und dem Playermodel soll nun die "Kollision" stattfinden. Der Raum in dem das Ganze abspielt ist ein schlichter hohler Würfel. Das Playermodel ist ein einfacher Zylinder wo ich vom unteren Ende bis zum oberen Ende trace.

Um das Ganze mal zu verdeutlichen hier ein Bild:


In der Mitte sieht man den weißen Punkt, bei dem es sich (durch den Schatten ersichtlich) um besagten Zylinder handelt, der testweise das Playermodel darstellt. Links daneben das hübsche Vieh aus dem AUM61. Auch zum testen.

Nun habe den Code aus dem AUM61 in mein lite-C Projekt übernommen und das Ganze gestartet. Unerwarteterweise (weil ich kenn mich) funktionierte das zumindest so gut, dass ich erkennen konnte, ob besagter Zylinder in eine Wand rennt, oder diese Figur berührt. Ich habe mir eine Variable anzeigen lassen, die bei einer Berührung mit der Figur den Wert 100 zurückgibt und wenn nichts berührt wird den Wert 0.

Nun hab ich meinen Zylinder feucht fröhlich im Siegestaumel durch den Level wandern lassen und musste feststellen, dass die Zahl 100 auch dann auftaucht, wenn ich meine Figur gar nicht berühre. Eigenartigerweise ist das immer ein Areal, was sich von der Figur ausgehend nach rechts unten ausstreckt.

Auch hier ein Bild zur Verdeutlichung: (Die weissen Linien sollen in etwa das Areal aufzeigen)


Innerhalb des Areals bekomme ich eine 100 zurück. Ausserhalb des Bereichs eine 0.
Ich versteh einfach nicht, was der da macht. Ist mir ein absolutes Rätsel. Ich finde des Fehler nicht. Ich habe sämtliche Models ausgetauscht. Ich habe sowohl den Zylinder durch den Ninja, als auch durch andere Objekte ersetzt und dann die korrekten Vertices benutzt. Auch diese grüne Figur hatte ich mehrfach durch andere Models ausgetauscht. Sogar den Raum habe ich durch verschiedene Räume ersetzt. Der Fehler ist irgendwie immer derselbe.

Ich habe natürlich auch darauf geachtet, dass bei dem Zylinder die korrekten Vertices abgefragt werden. Auch dazu könnte ich ein Bild liefern, wenn erwünscht.

Nachfolgend noch der relevante Code, der vielleicht ein wenig bei der eventuellen Problemfindung hilft:

Code:

player_model = ent_create("stange.mdl", vector(0,0,10), player_action);
vieh_ent = ent_create("berzerka.mdl", vector(-17,-40,45), NULL);

action player_action()
{
var sword_base;
var sword_tip;

player_model = my;
set(my,SHADOW);
set(my,POLYGON);

while(1)
{
//Objektbewegung (Hier mit Joypad)
c_move (me, nullvector, vector((joy_force.x * time_step / 0.5), (joy_force.y * time_step / 0.5), 0), GLIDE);

//KOLLISIONTEST
vec_for_vertex (sword_tip, my, 1);
vec_for_vertex (sword_base, my, 110);
if ((c_trace (sword_base, sword_tip, USE_POLYGON | IGNORE_ME | IGNORE_PASSABLE) > 0))
{
if (you != NULL)
{
testvar = 100; //Anderes Model berührt
}
else
{
testvar = 50; //World Environment berührt
}
}
else
{
testvar = 0; //Nix berührt
}

wait(1);
}

}




Abschließend möchte ich noch sagen, dass ich soviel rumprobiert habe, dass mir mittlerweile absolut nix mehr einfällt, was ich noch ändern könnte. Ich habe sowohl die PAN, als auch TILT, ROLL, X, Y, Z und sämtliche anderen Koordinaten abgeändert, der Bereich unten rechts bleibt immer identisch. Ich habe beim c_trace mehrere Sachen wie USE_BOX, USE_POLYGON, oder auch gar nix probiert, ich habe alle Models PASSABLE gemacht und nicht PASSABLE, ich habe ihnen c_setminmax verpasst, ich habe c_updatehull versucht, ich habe wie schon erwähnt alle models und sogar die leveldatei ausgetauscht, die Kamera umgestellt, und und und. Ich seh wahrscheinlich den Wald vor lauter Bäumen nicht mehr und wäre echt überglücklich, wenn jemand den Wegweiser spielen würde.

Für das Lesen allein bedanke ich mich schon und hoffe, dass mir u.U. einer weiterhelfen kann.

Hilfääää!


Remataklan
Re: c_trace problem in lite-C (AUM61 Bsp) [Re: Remataklan] #143547
07/26/07 17:02
07/26/07 17:02
Joined: Jul 2007
Posts: 16
R
Remataklan Offline OP
Newbie
Remataklan  Offline OP
Newbie
R

Joined: Jul 2007
Posts: 16
anyone ?


Remataklan
Re: c_trace problem in lite-C (AUM61 Bsp) [Re: Remataklan] #143548
07/26/07 20:49
07/26/07 20:49
Joined: Jan 2007
Posts: 221
F
Fenriswolf Offline
Member
Fenriswolf  Offline
Member
F

Joined: Jan 2007
Posts: 221
Hi,

es könnte an 'sword_base' und 'sword_tip' liegen.
Obwohl es sich bei denen um Vektoren handeln müsste (vec_for_vertex), sind sie am Anfang der Action als normale Vars deklariert.

Re: c_trace problem in lite-C (AUM61 Bsp) [Re: Fenriswolf] #143549
07/27/07 12:28
07/27/07 12:28
Joined: Jul 2007
Posts: 16
R
Remataklan Offline OP
Newbie
Remataklan  Offline OP
Newbie
R

Joined: Jul 2007
Posts: 16
Quote:

Hi,

es könnte an 'sword_base' und 'sword_tip' liegen.
Obwohl es sich bei denen um Vektoren handeln müsste (vec_for_vertex), sind sie am Anfang der Action als normale Vars deklariert.




Hossa Fenriswolf,

ich danke dir VIELMALS. Das habe ich einfach übersehen! Es funktioniert nun einwandfrei.

Last edited by Remataklan; 07/27/07 12:35.

Remataklan
Re: c_trace problem in lite-C (AUM61 Bsp) [Re: Remataklan] #143550
07/27/07 18:54
07/27/07 18:54
Joined: Jul 2007
Posts: 16
R
Remataklan Offline OP
Newbie
Remataklan  Offline OP
Newbie
R

Joined: Jul 2007
Posts: 16
So, jetzt wo ich das Problem ja nicht mehr habe, konnte ich weitermachen und hab wiedermal ne Frage zum Thema c_trace. Ich möchte mit c_trace auch Objekte finden können, die das flag PASSABLE gesetzt haben. Deshalb habe ich bewusst das IGNORE_PASSABLE Flag bei c_trace nicht gesetzt aber dennoch scheint er die geflissentlich zu ignorieren. Sobald ich bei meinen Testobjekten das PASSABLE Flag wieder lösche, erkennt c_trace sie auch wieder.

Gibt es da einen Trick, oder ist das IGNORE_PASSABLE Flag ne Farce ?

Last edited by Remataklan; 07/27/07 19:04.

Remataklan
Re: c_trace problem in lite-C (AUM61 Bsp) [Re: Remataklan] #143551
07/27/07 19:21
07/27/07 19:21
Joined: Jul 2007
Posts: 16
R
Remataklan Offline OP
Newbie
Remataklan  Offline OP
Newbie
R

Joined: Jul 2007
Posts: 16
*Arrrg*

Lag wohl an meiner etwas älteren Lite-C Version. Nach nem Update gings jetz.
*selbstgespräche führ*

Last edited by Remataklan; 07/27/07 19:22.

Remataklan

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