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

[SFML 2.1] Poruszanie się piłkarza na boisku (skręcanie)

Ostatnio zmodyfikowano 2013-08-29 14:08
Autor Wiadomość
Bimbol
Temat założony przez niniejszego użytkownika
[SFML 2.1] Poruszanie się piłkarza na boisku (skręcanie)
» 2013-08-29 00:43:09
Witam, piszę aktualnie grę ala Haxball.
Aktualnie zajmuję się poruszaniem gracza po boisku, jednak mogę poruszać się w 8 kierunkach.
Nie zbyt ładnie to wygląda gdy poruszam się w powiedzmy prawo i po chwili klikam klawisz w górę i od razu jadę po skosie.
Chciał by było to bardziej naturalne. Piłka powinna kiedy trzymam Strzałkę w Prawo i Strzałkę w Górę, początkowo iść bardziej po łuku.

Nie wiem za bardzo jak się za to zabrać.
P-91159
akwes
» 2013-08-29 00:56:32
Jeżeli chodzi o poruszanie się graczem, to musisz zrobić płynne poruszanie.

Czyli, jak ktoś wciska strzałkę np. w górę to nie od razu gracz jest przemieszczany z pełną prędkością. Jeżeli maksymalna prędkość jest 1, to w kolejnych odstępach czasowych jego prędkość powinna wynosić naprzykład 0.1, 0.3, 0.4, 0.6, 0.7, 0.9, 1, 1, 1, (puszczenie strzałki), 0.6, 0.3, 0.1, 0.0.

Ewentualnie możesz się pobawić w fizykę i wzory z przyspieszeniem oraz prędkością maksymalną, bo do tego to się głównie sprowadza.

Jeżeli zrobisz tak dla kierunków X oraz Y to gracz będzie się ładnie poruszał.
P-91160
kubawal
» 2013-08-29 09:59:24
Albo po użyć box2d i ApplyImpulse()
P-91166
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-08-29 11:26:33
Jeżeli chodzi o poruszanie się graczem, to musisz zrobić płynne poruszanie.

Czyli, jak ktoś wciska strzałkę np. w górę to nie od razu gracz jest przemieszczany z pełną prędkością. Jeżeli maksymalna prędkość jest 1, to w kolejnych odstępach czasowych jego prędkość powinna wynosić naprzykład 0.1, 0.3, 0.4, 0.6, 0.7, 0.9, 1, 1, 1, (puszczenie strzałki), 0.6, 0.3, 0.1, 0.0.

Chyba do tego się dostosuję.


Albo po użyć box2d i ApplyImpulse()

Wolę obecnie dobrze nauczyć się korzystać z jednej biblioteki, później przyjdzie pora na Box2D.
P-91170
maly
» 2013-08-29 11:26:33
Wystarczy sprawdzić z której strony lini o pozycji startowej (0,0) i końcowej(źądany kierunek) jest atualny kierunek objektu, potem odpowiednio obracać.
C/C++
float whichSideLine( const sf::Vector2f & start, const sf::Vector2f & end, const sf::Vector2f & point )
{
    return( end.x - start.x ) *( point.y - start.y ) -( end.y - start.y ) *( point.x - start.x );
}

float side = whichSideLine( sf::Vector2f( 0, 0 ), nowyKierunek, aktualnyKierunek );
if( side > 0 )
     rotate( aktualnyKierunek, 1 );
else if( side < 0 )
     rotate( aktualnyKierunek, - 1 );
P-91171
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-08-29 12:53:08
Wystarczy sprawdzić z której strony lini o pozycji startowej (0,0) i końcowej(źądany kierunek) jest atualny kierunek objektu, potem odpowiednio obracać.

C/C++
float whichSideLine( const sf::Vector2f & start, const sf::Vector2f & end, const sf::Vector2f & point )
{
    return( end.x - start.x ) *( point.y - start.y ) -( end.y - start.y ) *( point.x - start.x );
}

float side = whichSideLine( sf::Vector2f( 0, 0 ), nowyKierunek, aktualnyKierunek );
if( side > 0 )
     rotate( aktualnyKierunek, 1 );
else if( side < 0 )
     rotate( aktualnyKierunek, - 1 );


Nie o to chodzi :)
P-91179
maly
» 2013-08-29 13:25:02
Kilka razy przeczytałem Twój problem i cały czas dochodzę do wniosku że po naciśnięciu któregoś kursora chcesz pomału skierować się w tą stronę, jeśli dobrze zrozumiałem to kod który podałem to właśnie robi.
P-91187
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-08-29 14:08:51
Piszę haxball więc po co mi tam skręcanie? Chodziło o to by piłka przy zmianie kierunku nie poruszała się od razu maksymalną prędkością, czyli by wyglądało to bardziej naturalnie.
Tak jak by początkowo wchodziła w łuk, a dopiero po osiągnięciu maksymalnej prędkości leciała po skosie.

EDIT. Do zamknięcia, udało mi się. Dziękuję wszystkim za pomoc, w szczególności akwesowi.
P-91195
« 1 »
  Strona 1 z 1