Gamestudio Links
Zorro Links
Newest Posts
Newbie Questions
by fairtrader. 12/06/23 11:29
Zorro Trader GPT
by TipmyPip. 12/04/23 11:34
Square root rule
by Smallz. 12/02/23 09:15
RTest not found error
by TipmyPip. 12/01/23 21:43
neural function for Python to [Train]
by TipmyPip. 12/01/23 14:47
Xor Memory Problem.
by TipmyPip. 11/28/23 14:23
Training with command line parameters
by TipmyPip. 11/26/23 08:42
Combine USD & BTC Pairs In Asset Loop
by TipmyPip. 11/26/23 08:30
AUM Magazine
Latest Screens
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Who's Online Now
7 registered members (3run, miwok, AndrewAMD, Quad, TipmyPip, fairtrader, 1 invisible), 637 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
fairtrader, hus, Vurtis, Harry5, KelvinC
19019 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Lenkrakete - wie steuern? | Homing Missile - How to contoll? #292320
10/01/09 22:16
10/01/09 22:16
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Hallo zusammen!

Ich versuche gerade den Code für eine Lenkrakete zu erstellen. Unten habe ich meinen aktuellen Status. Leider funktioniert das nicht, wenn sich das Ziel in etwa hinter der Rakete befindet.
Kann mir da jemand weiterhelfen?

Dank und Gruß
derGarv
--------------------
Hi all!

I'm currently trying to write a code to controll a homing missile. Below you see my current status. Unfortunately it does not work if the target is about behind the missile.
Might somebody help me please?

Thank and regards
derGarv

Code:
vec_set(temp,zielGegner.x);	
vec_sub(temp,my.x);
vec_to_angle(tempAng,temp);
if ((my.pan%360 < tempAng.pan%360) && (my.pan%360 > (tempAng.pan-180)%360))
{
	my.pan += (20 * time_step);
	if (my.pan%360 > tempAng.pan%360)
	  	my.pan = tempAng.pan%360;
}
if ((my.pan%360 > tempAng.pan%360) && (my.pan%360 <= (tempAng.pan+180)%360))
{
	my.pan -= (20 * time_step);
	if (my.pan%360 < tempAng.pan%360)
		my.pan = tempAng.pan;
}




GameStudio Version: A7 Pro v7.86
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: garv3] #292321
10/01/09 22:23
10/01/09 22:23
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Probier es mal hiermit:

vec_set(temp,zielGegner.x);
vec_sub(temp,my.x);
vec_to_angle(tempAng,temp);
my.pan += ang(tempAng.pan-my.pan)/3*time_step;

oder
...
my.pan += clamp(ang(tempAng.pan-my.pan)/3,-10,10)*time_step;

oder mit anderen Werten. (Ungetestet)


"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: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Superku] #292322
10/01/09 22:41
10/01/09 22:41
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Danke, funktioniert!
Wie zur Hölle kommt ihr nur immer wieder auf sowas?


GameStudio Version: A7 Pro v7.86
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: garv3] #292341
10/02/09 06:34
10/02/09 06:34
Joined: Jun 2006
Posts: 2,640
Earth
Germanunkol Offline
Expert
Germanunkol  Offline
Expert

Joined: Jun 2006
Posts: 2,640
Earth
ich komm drauf durch's abgucken von anderen. is ganz einfach: ctrl+c und dann ctrl+v. tongue
Ne, scherz... wenn man sowas ähnliches oft genug gesehen hat wird das immer einfacher. Wenn du zum Beispiel in Zukunft ne kamera brauchst, die sich langsam zu einem objekt dreht, kannst du's jetzt mit dieser methode machen, indem du's n bisschen abänderst. ich glaub so kommen die meisten drauf. Oder durch stundenlanges rumprobieren O.o

Sieht dann nur fertig im forum immer so beeindruckend aus... tongue


~"I never let school interfere with my education"~
-Mark Twain
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Germanunkol] #292344
10/02/09 07:53
10/02/09 07:53
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Um das Verhalten der Rakete etwas intelligenter zu machen, könntest du auch die zukünftige Positon des Zielobjekts abschätzen lassen (vorausgesetzt es handelt sich um ein bewegliches Ziel) und die Rakete darauf ausrichten.

Beispielsweise so: (ungetestet)
Code:
var dist = vec_dist(&rakekte->x, &ziel->x);

// Geschätzte Zeit, die benötigt wird, um das Ziel zu erreichen.
var zeit = dist / (rakete->maxGeschwindigkeit + ziel->aktuelleGeschwindigkeit);

// Geschätzte Position, die das Ziel in der Zukunft haben wird.
// Info: 'vecGeschwindigkeit' ist ein Richtungsvektor, der in die
//       Bewegungsrichtung des Ziels zeigt und dessen Länge gleich der
//       aktuellen Geschwindigkeit des Ziels ist.
VECTOR ziel_pos;
vec_set(&ziel_pos, &ziel->vecGeschwindigkeit);
vec_scale(&ziel_pos, zeit);
vec_add(&ziel_pos, &ziel->x);

// TODO: Rakete auf 'ziel_pos' zufliegen lassen.



Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Saturnus] #292367
10/02/09 14:05
10/02/09 14:05
Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
Espér Offline
Expert
Espér  Offline
Expert

Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
ich hab dasselbe problem ( naja.. ungefähr ) mit meiner RAIDEN Prototypen..

D:Die Rakete soll erscheinen, den nächstgelegenen gegner anvisieren ( gegner sind Ents mit Skill99 >= 5 ) und auf ihn zufliegen.
Sollte der gegner vorher draufgegangen sein.. oder während des anflugs.. soll die rakete nen andren gegner suchen...


E:The rocket should appear, fokus the nearest enemy and fly to him ( enemy have skill99 >= 5 ). If The Enemy dies meanwhile, the rocket should fokus the next enemy.



Was ich bekomme / what i get... "Empty Pointer in i_rocket"

Hier mal der raketencode / the i_rocket code :
Code:
action i_rocket()
{
	var dist;
	var dist2 = 100;
	var destroyme = 0;
	my.skill2   = 0;
	my.skill1 = reedeem2;
	
	if(reedeem2 == 1){reedeem2 = 2;}
	else{reedeem2 = 1;}
	
	ENTITY* close_ent;
	VECTOR* myTemp;
	
	set(my, PASSABLE);
	
	while(my.skill2 < 50)
	{
		if(my.skill1 == 1)
		{
			c_move(my, vector(0,-40*time_step,0), nullvector, NULL);
			my.pan += 4*time_step;
		}
		
		if(my.skill1 == 2)
		{
			c_move(my, vector(0,-40*time_step,0), nullvector, NULL);
			my.pan -= 4*time_step;
		}
		rocketeer();
		my.skill2 += 1;
		wait(1);
	}
	
	
	dist = 100000;     //maximum dist that the rocket can 'see' entities at
	while(dist2 > 30 && my.x > -1600 && my.x < 1600 && my.y > -500 && my.y < 5000)
	{
		you = ent_next(NULL); // retrieve first entity
		while(you) // repeat until there are no more entities
		{
			if(you.skill99 >= 5)
			{
				if(vec_dist(my.x,you.x) < dist)
				{
					dist = vec_dist(my.x,you.x);
					dist2 = vec_dist(my.x,you.x);
					close_ent = you;
				}
			}
			you = ent_next(you); // get next entity
			wait(1);
		}
		if(close_ent != NULL)
		{
			while(dist2 > 30 && my.x > -1600 && my.x < 1600 && my.y > -500 && my.y < 5000)
			{
				dist2 = vec_dist(my.x, close_ent.x);
				//				vec_set(temp, close_ent.x);
				vec_diff(myTemp,close_ent.x,my.x);
				vec_to_angle(my.pan,myTemp);
				my.pan += 90;
				c_move(my, vector(80*time_step,0,0), nullvector, NULL);
				rocketeer();
				my.z = 0;
				wait(1);
			}
		}
		wait(1);
	}
	//	exploding_1(my);
	wait(1);
	ent_remove(my);
}



Ich hoffe mir kann wer bei meinem fehler au helfen ^^
Hope someone is able to help me with my problem, too. ^^

Last edited by Espér; 10/02/09 14:06.

Selling my Acknex Engine Editions (A7 Com & A8 Pro):
>> click here if you are interested <<
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Espér] #292589
10/05/09 01:00
10/05/09 01:00
Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
Espér Offline
Expert
Espér  Offline
Expert

Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
hat echt keiner ne idee??

is there really nobody with an idea?


Selling my Acknex Engine Editions (A7 Com & A8 Pro):
>> click here if you are interested <<
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Espér] #292603
10/05/09 07:10
10/05/09 07:10
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Hello!

I would try something like this. It's more or less just a pseudo code, though.
Code:
action i_rocket()
{
	ENTITY *my_target = NULL;
	
	// TODO: replace rocketStillAlive with a valid check 
	while (rocketStillAlive)
	{
		// TODO: replace targetStillAlive with a valid check as comparing
		// my_target against NULL is not sufficient
		if ((my_target != NULL) && (targetStillAlive))
		{
			// TODO: move rocket towards target
		}
		else // find closest target
		{
			// TODO: move rocket in heading direction as no target has been
			// found yet
			
			// rocketRange: only entities within this range are considered
			// potential targets
			var smallest_dist = rocketRange;
			
			you = NULL;
			
			while (you = ent_next(you))
			{
				if ((you == my) || (you == player) || (you->skill99 < 5))
				{
					continue; // no valid target
				}
				
				var dist = vec_dist(&my->x, &you->x);
					
				if (dist < smallest_dist)
				{
					smallest_dist = dist;
					my_target = you;
				}
			}
			
			// the rocket might have a target now
		}
		
		wait(1);
	}
}



Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Saturnus] #292653
10/05/09 18:35
10/05/09 18:35
Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
Espér Offline
Expert
Espér  Offline
Expert

Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
ok.. how to move the rocket to the closest target????


that´s the code atm:
Code:
action i_rocket()
{
	ENTITY* my_target = NULL;
	
	my.skill1 = 1;
	my.skill2 = 0;
	my.skill3 = 2000;
	my.skill4 = 0;
	
	while(my.skill1 >= 10)
	{
		if((my_target != NULL) && (my_target.healthpoints >= 1))
		{
			// TODO: move rocket towards target
		}
		else
		{
			c_move(my, vector(0,-40*time_step,0), nullvector, NULL);
			
			you = NULL;
			
			while (you = ent_next(you))
			{
				if ((you == my) || (you == player) || (you.skill99 < 5))
				{
					continue;
				}
				
				my.skill4 = vec_dist(my.x, you.x);
					
				if (dist < my.skill3)
				{
					my.skill3 = my.skill4;
					my_target = you;
				}
			}
			my.skill2 = vec_dist(me.x, you.x);
			if(my.skill2 < 40)
			{
			   you.healthpoints -= 10;
			   my.skill1 = 99;
			}
		}
		
		wait(1);
	}
	ent_remove(my);
}



Last edited by Espér; 10/05/09 18:40.

Selling my Acknex Engine Editions (A7 Com & A8 Pro):
>> click here if you are interested <<
Re: Lenkrakete - wie steuern? | Homing Missile - How to contoll? [Re: Espér] #292701
10/06/09 06:43
10/06/09 06:43
Joined: Feb 2008
Posts: 3,232
Australia
EvilSOB Offline
Expert
EvilSOB  Offline
Expert

Joined: Feb 2008
Posts: 3,232
Australia
I'm starting to take a look, but first... what do MY.skill 1,2,3,4 represent?


"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial
Page 1 of 2 1 2

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