Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[?]Obliczanie w którą stronę podążać aby dotrzeć do celu

Ostatnio zmodyfikowano 2013-01-03 19:27
Autor Wiadomość
ridic14
Temat założony przez niniejszego użytkownika
[?]Obliczanie w którą stronę podążać aby dotrzeć do celu
» 2013-01-01 20:34:47
Mam już napisane to poruszanie się tak właściwie, lecz jest problem...
Gdy moja postać stoi w miejscu to wróg podąża w moją stronę, a gdy przemieszczam się(np krążę w okół) to wróg robi jakieś kółka wokół własnej osi i w ogóle nie próbuje się zbliżyć
Obliczam to tak:
C/C++
float result = - atan2( player.y - self.getPosition().y, player.x - self.getPosition().x ) * 180.0 / M_PI; // Kąt

//a tu przemieszczenie:
x =( sin( resulta ) );
y =( cos( resulta ) );

Jeśli ktoś chce sprawdzić(Jak się włączy grę trzeba wcisnąć [.](chwilowe menu pominąć trzeba :D)):
http://www.sendspace.pl/file/3943b55752117404ec11b94
P-72657
Mrovqa
» 2013-01-01 20:57:33
C/C++
x += sin( result ) * speed;
y += cos( result ) * speed;
P-72660
ridic14
Temat założony przez niniejszego użytkownika
» 2013-01-01 21:45:16
C/C++
vel.x = sin( result ) * 2;
vel.y = cos( result ) * 2;
Daje taki sam efekt, a nawet jescze większe wibry;
Z tym czy bez tego wróg nie podchodzi gdy ja się poruszam
P-72664
ison
» 2013-01-01 22:10:32
Kod, który wkleiłeś jest mylący, najpierw obliczasz 'result' a potem z niego w ogóle nie korzystasz, tylko z 'resulta'.
x i y to wartości określające przemieszczenie czy pozycję? Bo nie wiadomo jak to interpretować.
sin i cos przyjmują radiany, a 'result' jest w stopniach - chociaż nadal nie wiadomo czym jest 'resulta'.
P-72669
ridic14
Temat założony przez niniejszego użytkownika
» 2013-01-02 16:53:16
To inaczej:
C/C++
float result = - atan2( player.y - self.getPosition().y, player.x - self.getPosition().x ) * 180.0 / M_PI; // Kąt

//a tu przemieszczenie:
// czyli tak jakby sprite.move(x, y);
x =( sin( result ) );
y =( cos( result ) );
Więcej:
C/C++
//ptm 0.02f * podana liczba
b2Vec2 vel = enemyBody->GetLinearVelocity(); //box2d

float result = - atan2( player.y - self.getPosition().y, player.x - self.getPosition().x ) * 180.0 / M_PI;

if( ptm( distance ) > to_go && ptm( distance ) < 10 )
{
    vel.x = sin( result ) * speed;
    vel.y = cos( result ) * speed;
} else vel = b2Vec2( 0, 0 );

//(Strzelanie i inne bzdury...)

enemyBody->SetLinearVelocity( vel ); // box2d postać tym sposobem elegancko sie przemiescza
P-72724
ison
» 2013-01-02 17:37:00
sin i cos przyjmują radiany, a 'result' jest w stopniach
P-72730
ridic14
Temat założony przez niniejszego użytkownika
» 2013-01-02 17:47:30
Więc napisałem tak:
float result = - atan2( player.y - self.getPosition().y, player.x - self.getPosition().x );

daje to efekt następujący:
łobrazeq ła co
Wróg nawet się nie zbliża tylko krąży wokół :(;
P-72732
DejaVu
» 2013-01-02 18:07:57
Frazy, które należy wpisać w wyszukiwarkę google:
P-72741
« 1 » 2
  Strona 1 z 2 Następna strona