|
Panzer Turm Steuerung
#452337
06/09/15 20:32
06/09/15 20:32
|
Joined: Jan 2006
Posts: 168 Germany, Hannover
DexLoomer
OP
Member
|
OP
Member
Joined: Jan 2006
Posts: 168
Germany, Hannover
|
Hi Leute, ich will einen Turm auf einem Fahrzeug drehen, wie es bei einem Panzer möglich ist. Dabei will ich mit den Pfeiltasten den Wagen steuern und mit den Tasten Q + E den Turm. http://www.file-upload.net/download-10678814/Tank_turret_test.zip.htmlDie Schwierigkeit ist, dass ich mit Q + E eine Richtung einstellen möchte (von 0 bis 360 Grad) und der Turm sich dann langsam in diese Richtung dreht, bis er die Einstellung erreicht hat. Dabei soll er die kürzeste Seite (links oder rechts herum) nehmen. Ich habe in der Turmsteuerung noch Fehler:
.
.
.
if (key_q ) // Turm ausrichten nach links
{
turret_orient -= 1;
if (turret_orient < 0)
{
turret_orient = 360;
}
}
if (key_e ) // Turm ausrichten nach rechts
{
turret_orient += 1;
if (turret_orient > 360)
{
turret_orient = 0;
}
}
if (turret_offset != turret_orient)
{
if (turret_offset < turret_orient)
{
turret_offset += 0.1;
}
if (turret_offset > turret_orient)
{
turret_offset -= 0.1;
}
}
.
.
.
Leider funktioniert dies bei mir nicht und der Turm "eiert" rum. Besonders wenn die Einstellung von 360 auf 0 Grad bzw. umgekehrt überschreitet. Kennt jemand eine Lösung?
A8-Com-v 8.47.1
|
|
|
Re: Panzer Turm Steuerung
[Re: Superku]
#452367
06/10/15 15:51
06/10/15 15:51
|
Joined: Jan 2006
Posts: 168 Germany, Hannover
DexLoomer
OP
Member
|
OP
Member
Joined: Jan 2006
Posts: 168
Germany, Hannover
|
Hallo Superku, vielen Dank für Deine Hilfe, es scheint damit zu klappen! Ich muss noch etwas rumprobieren, damit der Turm auch den .pan und .tilt -Wert des Wagens mitnimmt. Bislang bin ich mit Deinem Tip soweit:
function attach_turret()
{
proc_mode = 0; // prevent shaking
// my.passable = on;
// my.metal = on;
while(entTank) // as long as the creator exists
{
vec_set(my.x, entTank.x);
my.pan = entTank.pan + turret_offset;
my.tilt = entTank.tilt;
my.roll = entTank.roll;
// my.frame = you.frame;
// my.next_frame = you.next_frame;
if (turret_orient < 0)
{
turret_orient = 360;
}
if (turret_orient > 360)
{
turret_orient = 0;
}
turret_orient += (key_q-key_e)*5*time_step;
turret_orient %= 360;
turret_offset += clamp(ang(turret_orient-turret_offset),-0.5*time_step,0.5*time_step);
Anzeige_Wert1 = turret_orient;
Anzeige_Wert2 = turret_offset;
Anzeige_Wert3 = winkel;
wait(1);
}
ent_remove(my);
}
Nochmal vielen Dank für Deine Unterstützung. Als Grafiker tu ich mich eher schwer mit Programmierung. Besonders wenn es um mathematische Geschichten geht. ;-)
A8-Com-v 8.47.1
|
|
|
Re: Panzer Turm Steuerung
[Re: DexLoomer]
#452369
06/10/15 16:34
06/10/15 16:34
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Gern geschehen!
Probier doch mal folgendes:
turret_orient += (key_q-key_e)*5*time_step; turret_orient %= 360; turret_offset += clamp(ang(turret_orient-turret_offset),-0.5*time_step,0.5*time_step); vec_set(my.pan,entTank.pan); ang_rotate(my.pan,vector(turret_offset,0,0)); // kann klappen, muss aber nicht
Die pan/tilt/roll Zeilen am Anfang entfernst du dann.
"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: Panzer Turm Steuerung
[Re: Superku]
#452372
06/10/15 18:20
06/10/15 18:20
|
Joined: Jan 2006
Posts: 168 Germany, Hannover
DexLoomer
OP
Member
|
OP
Member
Joined: Jan 2006
Posts: 168
Germany, Hannover
|
Klappt f a s t ..!
Also ich habe eine Beispieldatei gesendet, bei dieser funktioniert es tatsächlich. Leider hat mein richtiges Projekt eine recht komplexe Physik und diese zerschießt es, sobald ich den Turm bewege. Ich habe keine Ahnung warum, aber es liegt an der Zeile: ang_rotate(my.pan,vector(turret_offset,0,0));
genau genommen darin das: vector(turret_offset,0,0)
wenn ich statt des Vector nur die Variable einsetze: ang_rotate(my.pan, turret_offset);
dreht der Turm sich um alle Achsen aber die Physik bleibt ganz!
Ich werde einfach noch rumprobieren müssen.. ggf. an der Physik schrauben. Trotzdem vielen Dank für die tolle Unterstützung ;-)
A8-Com-v 8.47.1
|
|
|
|