|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Uhrwerk]
#143008
07/25/07 19:48
07/25/07 19:48
|
Joined: Jul 2007
Posts: 288 Germany, NRW
Martek
OP
Member
|
OP
Member
Joined: Jul 2007
Posts: 288
Germany, NRW
|
Ja, das habe ich jetzt soweit verstanden, nur wo soll die den tiefsten Vertex meiner Figur herbekommen??? Ich benutze Guard.mdl.
Sry für solche fragen, aber habe erst vor kurzem angefangen, kenne mich deswegen noch net so gut aus.
Pingulord
3D Gamestudio A7 Extra
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Martek]
#143009
07/25/07 20:28
07/25/07 20:28
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
From the manual: Quote:
vec_for_min (VECTOR*, ENTITY*); vec_for_max(VECTOR*, ENTITY*); Sets the vector to the minimum resp. maximum vertex coordinates of the current model, terrain, or map entity, relative to the entities' origin. For a model the coordinates of its current vertex frame is used. This instruction can set an entities' bounding box to it's reals size instead of using the default min_x..max_x parameters. Parameters: VECTOR* vector to be set to the minimum or maximum coordinates ENTITY* pointer to the entity
Speed: Medium Example: // set the bounding box to the real size of its first framemy.frame = 1;vec_for_min(my.min_x, my);vec_for_max(my.max_x, my);
Das ist die bessere und langsamere Lösung. Die andere ist einfach einen festen Wert zu nehmen. Du brauchst dich für die Fragen nicht zu entschuldigen. Dafür ist das Forum doch schließlich da. Außerdem schlägst Du dich ganz beachtlich durch und das fast alleine! 
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Uhrwerk]
#143010
07/25/07 21:09
07/25/07 21:09
|
Joined: Jul 2007
Posts: 288 Germany, NRW
Martek
OP
Member
|
OP
Member
Joined: Jul 2007
Posts: 288
Germany, NRW
|
ja mit den Vec_for _min verstehe ich ja, ur das mit dem c_trace net. Was für werte muss ich da für die Vectoren eingeben???
Und wie soll das mit dem Rügabe wert machen, wie soll das in die If, anweisung rein???
Pingulord
3D Gamestudio A7 Extra
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Martek]
#143011
07/25/07 22:38
07/25/07 22:38
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Okokok... das mit der Gravitation hast Du ja schon hinbekommen. Der Gravitation einen positiven Wert zu geben anstatt eines negativen sollte ja auch kein Problem sein. Deine Funktion zum ermittlen des Abstandes des Players zum Boden könnte so aussehen: Code:
function getPlayerHeight() { /* Erstmal eine lokale Variable anlegen, damit wir den Wert schrittweise berechnen können... */ var GroundDist; /* Wie weit ist das Zentrum des Players vom Boden entfernt? */ GroundDist = c_trace(my.x,vector(my.x,my.y,my.z - 512),IGNORE_PASSABLE + IGNORE_PASSENTS + IGNORE_SPRITES); /* Von dem Wert ziehen wir die Distanz des Playerszentrums von seinen Füßen ab. */ vec_for_min(my.min_x,me); GroundDist += my.min_z; /* Jetzt haben wir die Distanz und müssen sie noch zurückgeben.*/ return(GroundDist); }
Das geht natürlich effektiver und schneller, aber so ist es zum Lernen glaube ich erstmal ganz verständlich. Diese Funktion rufst Du dann in deiner Player Aktion auf und erhälst den Wert den der Player über dem Boden ist zurück. Ist der größer 0 wendest Du die Gravitation an. Ist er kleiner 0, dann wendest Du die Antigravitation an, die den Player wieder aus dem Boden drückt.
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Uhrwerk]
#143012
07/26/07 09:03
07/26/07 09:03
|
Joined: Jul 2007
Posts: 288 Germany, NRW
Martek
OP
Member
|
OP
Member
Joined: Jul 2007
Posts: 288
Germany, NRW
|
Cool, das habe ich jetzt alles vestanden. Ich probier es gleich mal aus.
Nur noch eine Frage. Die 512 ist doch jetzt vorgegeben. Wenn ich jetzt eine kleiner oder größere Figur hätte, müsste da doch ne andere Zahl rein oder?
So hab den Code ausprobiert. Nur der Spieler Steck irgendwie immer im Boden. Es klappt net so ganz. Muss ich vielleicht noch irgendein fein Tuning machen?
Vielen Dank, Pingulord
Last edited by Pingulord; 07/26/07 10:05.
3D Gamestudio A7 Extra
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Martek]
#143013
07/26/07 11:25
07/26/07 11:25
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Die 512 ist einfach die Tiefe, die vom Player Zentrum aus nach unten gesucht wird um den Boden zu finden und rein willkürlich von mir gewählt. Wenn dein Player größere Distanzen nach unten fallen soll, dann musst du sie erhöhen. Mit der Playergröße hat das nichts zu tun. (Es sei denn Dein Player ist größer als 512 Quants...) Ob Du noch Feintuning machen musst weiss ich nicht... Aber im Zweifelsfall hilft es immer mal den Code zu posten... 
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Uhrwerk]
#143014
07/26/07 11:31
07/26/07 11:31
|
Joined: Jul 2007
Posts: 288 Germany, NRW
Martek
OP
Member
|
OP
Member
Joined: Jul 2007
Posts: 288
Germany, NRW
|
Jo ok,
hier ist mein player-code. Er ist zwar noch net fertig, aber ich kann schon laufen:D
action player_ { player = me; var leben = 100; var stärke = 10; var verteidigung = 10; var erfahrung = 0; while(leben > 0) { camera.x = player.x - 200 * cos(player.pan); camera.y = player.y - 200 * sin(player.pan); camera.z = player.z + 150; camera.pan = player.pan; camera.tilt = - 25; gravity(); my.pan += 8 * (key_a - key_d) * time - 20 * mouse_force.x * time; if(key_w == 1) { if(key_shift == 1) { c_move(me, vector(15 * time,0,GroundDist), nullvector, glide); ent_cycle("run", my.skill20); my.skill20 += 8 * time; if (my.skill20 > 100) { my.skill20 = 0; } } else { c_move(me, vector(7 * time,0,GroundDist), nullvector, glide); ent_cycle("walk", my.skill20); my.skill20 += 6 * time; if (my.skill20 > 100) { my.skill20 = 0; } } } else { c_move(me, nullvector, nullvector, glide); ent_cycle("stand", my.skill21); my.skill21 += 2 * time; if (my.skill21 > 100) { my.skill21 = 0; } } wait(1); } }
So und das ist die gravity function:
function gravity() { GroundDist = c_trace(my.x,vector(my.x,my.y,my.z - 512),IGNORE_PASSABLE + IGNORE_PASSENTS + IGNORE_SPRITES); vec_for_min(my.min_x, me); GroundDist += my.min_z; return(GroundDist); }
Ich hoffe ihr könnt mir weiter helfen,
Pingulord
3D Gamestudio A7 Extra
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Martek]
#143015
07/26/07 11:39
07/26/07 11:39
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Du bringst da noch ein paar Sachen durcheinander... GroundDIst ist eine lokale Variable der Funktion gravity. Du darfst sie nur darin benutzen. Ausserdem rufst Du die Funktion Gravity auf, aber das ergebnis was sie zurückliefert speicherst Du nicht. Ändere mal folgendes ab:
var MyGroundDist; MyGroundDist = gravity();
Und später in den Vektor() Anweisungen ersetzt Du GroundDist durch MyGroundDist. Das wird dann nicht sehr schön aussehen in Bewegung, aber es sollte erstmal funtionieren...
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Uhrwerk]
#143016
07/26/07 12:11
07/26/07 12:11
|
Joined: Jul 2007
Posts: 288 Germany, NRW
Martek
OP
Member
|
OP
Member
Joined: Jul 2007
Posts: 288
Germany, NRW
|
Ich hatte die Var GroundDist als globale Variable abegspreichert.
Bringt das nicht das selbe???
Mfg, Pingulord
3D Gamestudio A7 Extra
|
|
|
Re: Player bewegt sich nur auf einer höhe
[Re: Martek]
#143017
07/26/07 12:53
07/26/07 12:53
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Doch, dann ist es das selbe. Versuch mal bitte ein Minus in den Vektor Anweisungen vor dem GroundDist. Also zum Beispiel:
c_move(me, vector(7 * time,0,-GroundDist), nullvector, glide);
Always learn from history, to be sure you make the same mistakes again...
|
|
|
|