|
7 registered members (3run, miwok, AndrewAMD, Quad, TipmyPip, fairtrader, 1 invisible),
637
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
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
garv3
OP
User
|
OP
User
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
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: Superku]
#292322
10/01/09 22:41
10/01/09 22:41
|
Joined: Jan 2005
Posts: 605 Deutschland, NRW
garv3
OP
User
|
OP
User
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
Expert
|
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.  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... 
~"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
Member
|
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)
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
Expert
|
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 :
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.
|
|
|
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
Member
|
Member
Joined: Dec 2008
Posts: 271
|
Hello! I would try something like this. It's more or less just a pseudo code, though.
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
Expert
|
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:
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.
|
|
|
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
Expert
|
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
|
|
|
|