Panzer Physik

Posted By: DexLoomer

Panzer Physik - 05/18/15 18:01

Hi Leute,
ich versuche ein Fahrzeug wie einen Panzer fahren zu lassen.
Dafür möchte ich, dass sich bei der vor/zurück Bewegung die Räder rechts und links synchron bewegen. Aber bei einer links/rechts Steuerung konträr zueinander, so das sich das Fahrzeug eine Drehung beschreibt.


Bisher habe ich nur eine unelegante Lösung:


Code:
.
.
while(entCar != NULL) 
 {		
		if(key_pressed(key_for_str("cuu")) || key_pressed(key_for_str("cud")))
		{		
			pXcon_setwheel(entFrontLeftWheel, 0, (key_cuu - key_cud)*100000*time_step, 0);
			pXcon_setwheel(entFrontRightWheel, 0, (key_cuu - key_cud)*100000*time_step, 0);
			pXcon_setwheel(entBackLeftWheel, 0, (key_cuu - key_cud)*100000*time_step, 0);
			pXcon_setwheel(entBackRightWheel, 0, (key_cuu - key_cud)*100000*time_step, 0);
		}	

		if(key_pressed(key_for_str("cul")) || key_pressed(key_for_str("cur")))
		{		
			pXcon_setwheel(entFrontLeftWheel, 0, (key_cur - key_cul)*100000*time_step, 0);
			pXcon_setwheel(entFrontRightWheel, 0, (key_cur - key_cul)*-100000*time_step, 0);
			pXcon_setwheel(entBackLeftWheel, 0, (key_cur - key_cul)*100000*time_step, 0);
			pXcon_setwheel(entBackRightWheel, 0, (key_cur - key_cul)*-100000*time_step, 0);
		}		
   wait(1);
 }
.
.




Das Problem ist, dass der Schub mit dieser Abfrage nicht aufhört, wenn die Richtung einmal gedrückt wurde.

Ich habe auch schon versucht den Bulldozer Code (vom Summer 2008 contest) auf A8 Physix umzuschreiben, denn dieser macht genau das was ich brauche. Bisher leider erfolglos..

Danke im Voraus ;-)
Posted By: DexLoomer

Re: Panzer Physik - 05/19/15 13:11

Hab den Code inzwischen etwas verbessert, hakelt aber immer noch!
Besonders wenn mehere Tasten, (z.B. gerade aus und links) gedrückt werden. Hat jemand von Euch einen Tip?

Code:
.
.
while(entCar != NULL) 
	{
		
		
		schub_L = 0;
		schub_R = 0;
		

		if(key_pressed(key_for_str("cuu")) == 1) 
		{
			schub_L = -1;
			schub_R = -1;
		}	
		if(key_pressed(key_for_str("cud")) == 1) 
		{
			schub_L = 1;
			schub_R = 1;
		}
		if(key_pressed(key_for_str("cul")) == 1) 
		{
			schub_L = -1;
			schub_R = 1; 
		}
		if(key_pressed(key_for_str("cur")) == 1) 
		{
			schub_L = 1;
			schub_R = -1; 
		}
		
		pXcon_setwheel(entFrontLeftWheel, 0, (schub_L)*100000*time_step, 0);
		pXcon_setwheel(entFrontRightWheel, 0, (schub_R)*100000*time_step, 0);
		pXcon_setwheel(entBackLeftWheel, 0, (schub_L)*100000*time_step, 0);
		pXcon_setwheel(entBackRightWheel, 0, (schub_R)*100000*time_step, 0);		
		
		
		wait(1);
	}
.
.

Posted By: DexLoomer

Re: Panzer Physik - 05/20/15 11:33

Ok habe es hinbekommen.. laugh
Mache es wie im Bulldozer Code:

Code:
while(entTank != NULL) 
	{
		
		
		entTank.force_left  = clamp (key_cuu - key_cud + (key_cur - key_cul) * (1 - 2 * key_cud), -1, 1);
		entTank.force_right = clamp (key_cuu - key_cud + (key_cul - key_cur) * (1 - 2 * key_cud), -1, 1);

		pXcon_setwheel (entFrontLeftWheel, 0,  (-entTank.force_left * speed), 0); 
		pXcon_setwheel (entBackLeftWheel, 0, (-entTank.force_left * speed), 0); 		
		pXcon_setwheel (entFrontRightWheel, 0,  (-entTank.force_right * speed), 0); 
		pXcon_setwheel (entBackRightWheel, 0,  (-entTank.force_right * speed), 0); 
		
		
		
		wait(1);
	}

Posted By: Superku

Re: Panzer Physik - 05/20/15 13:55

Glückwunsch! (^.^)
© 2024 lite-C Forums