Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
Help with plotting multiple ZigZag
by degenerate_762. 04/30/24 23:23
M1 Oversampling
by 11honza11. 04/30/24 08:16
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (AndrewAMD, 7th_zorro, alibaba), 913 guests, and 3 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Panzer Turm Steuerung #452337
06/09/15 20:32
06/09/15 20:32
Joined: Jan 2006
Posts: 168
Germany, Hannover
DexLoomer Offline OP
Member
DexLoomer  Offline 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.html

Die 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:

Code:
.
.
.
		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: DexLoomer] #452343
06/10/15 08:00
06/10/15 08:00
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Erst bestimmst du die Sollorientierung:

turret_orient += (key_e-key_q)*5*time_step;
turret_orient %= 360;

Nun gleichst du den Wert langsam mit der nützlichen Funktion ang() sowie clamp() an:

turret_offset += clamp(ang(turret_orient-turret_offset),-0.5*time_step,0.5*time_step);

Ich habe dabei 5 bzw. 0.5 als Faktoren gewählt, da du time_step in deinem Code nicht benutztest/ vergessen hast und die Drehung dadurch bestimmt schneller als bei den Werten gedacht ablief (/ es durch *time_step langsamer, aber Frameraten-unabhängig wird).


"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] #452367
06/10/15 15:51
06/10/15 15:51
Joined: Jan 2006
Posts: 168
Germany, Hannover
DexLoomer Offline OP
Member
DexLoomer  Offline 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:
Code:
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 Offline
Senior Expert
Superku  Offline
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 Offline OP
Member
DexLoomer  Offline 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

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

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