Gamestudio Links
Zorro Links
Newest Posts
Blobsculptor tools and objects download here
by NeoDumont. 03/28/24 03:01
Issue with Multi-Core WFO Training
by aliswee. 03/24/24 20:20
Why Zorro supports up to 72 cores?
by Edgar_Herrera. 03/23/24 21:41
Zorro Trader GPT
by TipmyPip. 03/06/24 09:27
VSCode instead of SED
by 3run. 03/01/24 19:06
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 945 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
sakolin, rajesh7827, juergen_wue, NITRO_FOREVER, jack0roses
19043 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Ballistische Flugbahn #452850
06/28/15 13:07
06/28/15 13:07
Joined: Jan 2006
Posts: 168
Germany, Hannover
DexLoomer Offline OP
Member
DexLoomer  Offline OP
Member

Joined: Jan 2006
Posts: 168
Germany, Hannover
Hallo Leute,
ich möchte für ein Panzerspiel eine einigermaßen spieltaugliche ballistische Flugbahn des Geschosses haben. Mein Problem ist, das ich die mathematischen Formeln die ich bislang gefunden habe, nicht in Programmcode umgesetzt bekomme.
Deshalb fliegt mein Geschoss bislang nur gerade und wird nach einer gewissen Strecke auch nach unten bewegt. Das ähnelt aber zu wenig einer echten Flugbahn.
Außerdem benutze ich als Geschoss eine Entity, welche wegen der hohen Geschwindigkeit durch kleinere Objekte "durchfliegt". Daher habe ich wischen den c_move Schritten noch eine c_trace mit event gesetzt. Hat jemand eine Idee, wie man eine simple ballistische Flugbahn einbauen könnte?

Code:
function move_rocket()
{
set (my, PASSABLE); // don't collide with the player
VECTOR rocket_speed;
	
VECTOR rocket_pos;		
VECTOR rocket_posold;
vec_set(rocket_posold.x, my.x); // Startposition der Rakete merken

	my.pan = entBarrel.pan;
	my.tilt = entBarrel.tilt;
	wait (1);
	my.emask |= (ENABLE_ENTITY|ENABLE_IMPACT|ENABLE_BLOCK);	
	my.event = remove_rocket;
	my.skill40 = 1234; // I'm a rocket
	my.skill20 = 0;
	
	my.skill5 = 0; // used for vertical movement	
	
	while (my.skill20 < 10)
	{
		if (my.skill20 > 2) // the rocket has moved away from the player? Then let's reset its passable flag
		reset (my, PASSABLE);
		effect (rocket_trail, 1, my.x, normal); // generate particle trails for the rocket
		//		my.roll += 20 * time_step;
		rocket_speed.x = 300 * time_step;
		rocket_speed.y = 0;
		rocket_speed.z = 0;
		
		my.skill5 += time_step;
		if (my.skill5 > 5) 
		{
			rocket_speed.z -= fall_speed * time_step;
		}		
		
		my.skill20 += 1 * time_step;
		c_move (my, rocket_speed, nullvector, IGNORE_PASSABLE);
		

vec_set(rocket_pos.x, my.x); // Momentane Position der Rakete merken		

c_trace(rocket_posold.x,rocket_pos.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT);
//draw_line3d(rocket_posold.x,NULL,100); // draw line for debug 
//draw_line3d(rocket_pos.x,vector(0,0,255),100);

vec_set(rocket_posold.x,rocket_pos.x); // Alte Position merken
		
wait (1);
	}
remove_rocket();
}


Last edited by DexLoomer; 06/28/15 13:13.

A8-Com-v 8.47.1
Re: Ballistische Flugbahn [Re: DexLoomer] #452852
06/28/15 14:06
06/28/15 14:06
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
stichwort parabel wink

du hast die austrittsgeschwindigkeit (v0) des projektils und die fallbeschleunigung (g).

im code würde das inetwa so aussehen:

Code:
v = v0;

while(...)
{
   v += g * time_step;
   projektil_position += v;
   
   wait(1);
}


ist natürlich nur pseudocode und es ist deinem code ziemlich ähnlich, aber so sieht eine ballistische flugbahn ohne luftreibung oder andere auswirkungen auf das geschoss abgesehen von gravitation aus.


POTATO-MAN saves the day! - Random
Re: Ballistische Flugbahn [Re: Kartoffel] #452855
06/28/15 15:03
06/28/15 15:03
Joined: Jan 2006
Posts: 168
Germany, Hannover
DexLoomer Offline OP
Member
DexLoomer  Offline OP
Member

Joined: Jan 2006
Posts: 168
Germany, Hannover
Hi Kartoffel,
danke für deinen Tip! So in der Art hatte ich es auch schon gegoogelt. Trotzdem ist es mir nicht gelungen eine Formel vernünftig in den Code einzubauen.

Hier mein Versuch mit deiner Formel. Ich hebe den speed des Geschosses ganz klein gemacht, damit sie erst einmal langsam fliegt und ich den Weg verfolgen kann. Leider "blitzt" das Geschoss nur kurz auf und ist dann weg.

Code:
function move_rocket()
{
	set (my, PASSABLE); // don't collide with the player
	VECTOR rocket_speed;	
	VECTOR rocket_pos;		
	VECTOR rocket_posold;
	vec_set(rocket_posold.x, my.x); // Startposition der Rakete merken

	my.pan = entBarrel.pan;
	my.tilt = entBarrel.tilt;
	wait (1);
	my.emask |= (ENABLE_ENTITY|ENABLE_IMPACT|ENABLE_BLOCK);	
	my.event = remove_rocket;
	
	my.skill40 = 1234; // I'm a rocket
	my.skill20 = 0;	
	
		
		rocket_speed.x = 3;

		while(my.skill20 < 1000)
		{	
		
		if (my.skill20 > 2) // the rocket has moved away from the player? Then let's reset its passable flag
		reset (my, PASSABLE);
		effect (rocket_trail, 1, my.x, normal); // generate particle trails for the rocket
		
		
		
			rocket_speed.x += 0.9;
			rocket_pos.x += rocket_speed.x * time_step;
			
			c_move (my, rocket_pos, nullvector, IGNORE_PASSABLE);	
	
		
	
			vec_set(rocket_pos.x, my.x); // Momentane Position der Rakete merken		

			c_trace(rocket_posold.x,rocket_pos.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT);
//			draw_line3d(rocket_posold.x,NULL,100); // draw line for debug  
//			draw_line3d(rocket_pos.x,vector(0,0,255),100); // draw line  

			vec_set(rocket_posold.x,rocket_pos.x); // Alte Position merken
			
			wait (1);
		}
		remove_rocket();
	}



A8-Com-v 8.47.1
Re: Ballistische Flugbahn [Re: DexLoomer] #452858
06/28/15 15:27
06/28/15 15:27
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Ich denk mal du verwendest c_move falsch. Zum einen gibt man nicht die zielposition an, sondern den bewegungsvektor. Außerdem musst du in diesem fall einen absoluten bewegungsvektor angeben, keinen relativen. (oder den gravitationsvektor immer entsperechend drehen, was umständlicher ist)


POTATO-MAN saves the day! - Random

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