snajperek130 Temat założony przez niniejszego użytkownika |
Poruszanie » 2015-12-30 19:46:25 Witam, mam problem odnośnie poruszania się statku. Otoz chce zrobic poruszanie sie za pomoca klawiszy W A S D w kierunku myszki. Szukalem pomocy i napisalem taki kod, ale nie dziala poprawnie: void Player::accelerate( sf::Vector2f mysz, String key ) { Vector2f norm = mysz - spaceship.getPosition(); float rot = atan2( norm.y, norm.x ); rot = rot * 180.f / M_PI; rot += 90; spaceship.setRotation( rot ); float xN = static_cast < float >( speed * sin( M_PI *( rot / 360 ) ) ); float yN = static_cast < float >( speed * cos( M_PI *( rot / 360 ) ) ); if( key == "W" ) { vx += xN * 0.02f; vy -= yN * 0.02f; } else if( key == "S" ) { vx -= xN * 0.02f; vy += yN * 0.02f; } }
void Player::update( sf::Vector2f mysz ) { Vector2f norm = mysz - spaceship.getPosition(); float rot = atan2( norm.y, norm.x ); rot = rot * 180.f / M_PI; rot += 90; spaceship.setRotation( rot ); vx = vx - vx * 0.002f; vy = vy - vy * 0.002f; spaceship.move( vx, vy ); }
Postac nie porusza sie dobrze, gdy myszka jest pionowo skierowana do statku to dobrze sie porusza,a le jak myszka bedzie z boku to porusza sie tak jakby lukiem. |
|
snajperek130 Temat założony przez niniejszego użytkownika |
Xd » 2015-12-30 20:11:23 Dobra, czesciowo rozwiazalem problem: float xN = static_cast < float >( speed * sin(( rot * M_PI ) / 180.0 ) ); float yN = static_cast < float >( speed * cos(( rot * M_PI ) / 180.0 ) );
ale teraz nie dzialaja poprawnie klawisze A i D else if( key == "A" ) { vx -= xN * 0.02f; vy += yN * 0.02f; } else if( key == "D" ) { vx += xN * 0.02f; vy -= yN * 0.02f; }
Prosze o pomoc w tej sprawie :) |
|
pekfos |
» 2015-12-31 11:16:34 A i D mają poruszać postać o +-90 stopni względem kierunku W. Przelicz przesunięcia dla każdego klawisza osobno. |
|
snajperek130 Temat założony przez niniejszego użytkownika |
» 2016-01-04 23:33:02 Rozumiem, tylko teraz po nacisnieciu klawiszy A lub D statek porusza sie wogol myszki w coraz to wiekszej odleglosci od niej. Nie wiem, musze dodac warunek w tych klawiszach na poruszanie sie ruchem po okregu czy jakos inaczej?? Vector2f norm = mysz - spaceship.getPosition(); float rot = atan2( norm.y, norm.x ); rot = rot * 180.f / M_PI; rot += 90; spaceship.setRotation( rot ); ...
else if( key == "A" ) { rot -= 90; float xN = static_cast < float >( speed * sin(( rot * M_PI ) / 180.0 ) ); float yN = static_cast < float >( speed * cos(( rot * M_PI ) / 180.0 ) ); vx += xN * 0.02f; vy -= yN * 0.02f; }
|
|
DejaVu |
» 2016-01-05 10:59:14 jezeli obracasz teksture sfml to musisz uzyc setOrigin do okreslenia punktu wokol ktorego ma byc wykonany obrot. domyslnie jest to 0,0 a Ty zapewne chcesz obracac wokol srodka obrazka. |
|
snajperek130 Temat założony przez niniejszego użytkownika |
» 2016-01-05 15:28:08 Rozumiem, tylko ja mam obracac sie wokolo myszki i niezaleznie, gdzie ustawie ten srodek na statku to statek porusza sie w coraz to wiekszej odleglosci od myszki. |
|
pekfos |
» 2016-01-05 17:27:17 Bo to nie jest ruch po okręgu. Ruchu po okręgu tak nie zrobisz. Musisz cały kod ruchu przerobić. |
|
snajperek130 Temat założony przez niniejszego użytkownika |
» 2016-01-06 21:38:27 Ok, bede sie bawil, jak cos to jeszcze napisze. |
|
« 1 » 2 3 |