Posted By: xxxxxxx
Problem mit dem wechseln vom hangeln zum klettern - 08/01/11 18:00
Hi,
ich bastel momentan an einem code für's klettern rum. jetzt möchte ich dass der spieler automatisch beim hangeln erkennt wenn über ihm nicht mehr ist und er (wie auf dem Bild) hochklettern muss.
der spieler hangelt und klettet einwandfrei(abgesehen von den fehlenden animationen^^).
jetzt zum problem: nach dem übergang klettert der spieler nur einen frame danach schießt er in die höhe(da die schwerkraft variable positiv wird, ist aber nicht schlimm/wichtig) und fällt dann wieder ganz normal. Was ich daran nicht verstehe: Jede variable, die ich irgendwie beim übergang veändere wird beim klettern neugesetzt/nicht gebracht. Hier der code:
MoveState wird immer am ende der schleife(in der sich das ganze übringens befindet) gleich MoveStateC gesetzt, die ganzen temp's sind hilfsvectoren und so bring ich meinen Charakter sonst zum klettern.
ich hab echt keine ahnung mehr
Danke für alle hilfen schon mal im voraus!
xxxxxxx
ich bastel momentan an einem code für's klettern rum. jetzt möchte ich dass der spieler automatisch beim hangeln erkennt wenn über ihm nicht mehr ist und er (wie auf dem Bild) hochklettern muss.
der spieler hangelt und klettet einwandfrei(abgesehen von den fehlenden animationen^^).
jetzt zum problem: nach dem übergang klettert der spieler nur einen frame danach schießt er in die höhe(da die schwerkraft variable positiv wird, ist aber nicht schlimm/wichtig) und fällt dann wieder ganz normal. Was ich daran nicht verstehe: Jede variable, die ich irgendwie beim übergang veändere wird beim klettern neugesetzt/nicht gebracht. Hier der code:
Code:
if(MoveState == 1)//klettern { vec_set(temp9, vector(0 , -120, my.max_z)); vec_rotate(temp9,vector(my.pan,my.tilt,my.roll)); vec_add(temp9,my.x); vec_set(temp10, vector(0 , -120, my.min_z)); vec_rotate(temp10,vector(my.pan,my.tilt,my.roll)); vec_add(temp10,my.x);// wird wie temp12 exakt so wie unten(if(MoveState == 3)) gesetzt vec_set(temp11, vector(0 , 0, my.max_z)); vec_rotate(temp11,vector(my.pan,my.tilt,my.roll)); vec_add(temp11,my.x); vec_set(temp12, vector(0 , 0, my.min_z)); vec_rotate(temp12,vector(my.pan,my.tilt,my.roll)); vec_add(temp12,my.x); draw_point3d(temp9,vector(0,0,0),50,25); draw_point3d(temp11,vector(0,0,0),50,25); draw_point3d(temp10,vector(0,0,0),50,25); draw_point3d(temp12,vector(0,0,0),50,25); DividateFactor = 0;//ich weiß mathematiker würden mich für den namen köpfen^^ fall_down = 0; vec_set(Normale2,nullvector);//wird neu gesetzt fall_down += c_trace(temp11,temp9,IGNORE_PASSABLE|IGNORE_ME); if(HIT_TARGET) { DividateFactor += 1; vec_add(Normale2,hit.nx); } fall_down += c_trace(temp12, temp10,IGNORE_PASSABLE|IGNORE_ME); if(HIT_TARGET) { DividateFactor += 1; vec_add(Normale2,hit.nx); } DividateFactor_Show = DividateFactor; if(DividateFactor) { fall_down /= DividateFactor; vec_mul(Normale2,vector(1/DividateFactor,1/DividateFactor,1/DividateFactor)); vec_to_angle(temp4,Normale2);//temp4 auch neu gestetz vec_set(temp5,temp4); temp5.x -= 90;//ausrichtung genau so wie unten temp5.z = temp5.y; temp5.y = 0; MoveStateC = 1; if(Normale2.z > 0.5) { MoveStateC = 0; } if(Normale2.z < -0.5) { MoveStateC = 2; } } else { MoveStateC = 0; } ... } if(MoveState == 2)//Hangeln {... if(HIT_TARGET) { vec_set(Normale2, hit.nx); stop = 1;//sorgt dafür das der rest der vom hangeln nicht mehr ausgeführt wird hight = hit.z; vec_to_angle(temp4,Normale2); vec_set(temp5,temp4); temp5.x -= 90;//temp5 wird so gebraucht -> ausrichtung des spielers temp5.z = temp5.y; temp5.y = 0; vec_set(temp15,temp5); MoveStateC = 3; } else { MoveStateC = 0; } ... ...} if(MoveState == 3) { pXent_move(me,nullvector,vector(0,0,10*time_step)); vec_set(temp5,temp15); vec_set(temp10, vector(0 , -120, my.min_z)); vec_rotate(temp10,vector(my.pan,my.tilt,my.roll)); vec_add(temp10,my.x); vec_set(temp12, vector(0 , 0, my.min_z)); vec_rotate(temp12,vector(my.pan,my.tilt,my.roll)); vec_add(temp12,my.x); c_trace(temp12,temp10,IGNORE_ME|IGNORE_PASSABLE); if(HIT_TARGET) { vec_set(Normale2,hit.nx); } if(my.z-abs(my.min_z) > hight+10&&HIT_TARGET) { pXent_move(me, nullvector, vector(0,0,my.z-hight+abs(my.min_z))); MoveStateC = 1; pXent_move(me, vector(0,3*time_step,0),nullvector); } }
MoveState wird immer am ende der schleife(in der sich das ganze übringens befindet) gleich MoveStateC gesetzt, die ganzen temp's sind hilfsvectoren und so bring ich meinen Charakter sonst zum klettern.
Code:
vec_to_angle(temp4,Normale2); vec_set(temp5,temp4); temp5.x -= 90; temp5.z = temp5.y; temp5.y = 0; MoveStateC = 1;
ich hab echt keine ahnung mehr
Danke für alle hilfen schon mal im voraus!
xxxxxxx