[SFML 2.0] Problem z kamerą
Ostatnio zmodyfikowano 2012-12-13 17:01
krzyk Temat założony przez niniejszego użytkownika |
[SFML 2.0] Problem z kamerą » 2012-12-13 16:53:04 Mam problem z kamerą,kiedy zaczyna zbliżać się do celu zaczyna skakać a chciałbym żeby szła cały czas gładko.
Ktoś zna jakieś rozwiązanie?
#include <SFML/Graphics.hpp> #include <iostream>
sf::Vector2f getVector( const sf::Vector2f & v1, const sf::Vector2f & v2 ) { return sf::Vector2f( v1.x - v2.x, v1.y - v2.y ); }
class CCamera { protected: sf::Vector2f targetpos; sf::Vector2f lastpos; float step; public: CCamera() : lastpos( sf::Vector2f( 0.0, 0.0 ) ) , targetpos( sf::Vector2f( 0.0, 0.0 ) ) , step( 0.01f ) { } ~CCamera() { } void setTargetPosition( const sf::Vector2f & pos ) { targetpos = pos; } void draw( sf::RenderWindow & window ) { sf::Vector2f vect = getVector( targetpos, lastpos ); lastpos += sf::Vector2f( vect.x * step, vect.y * step ); sf::View view = window.getDefaultView(); view.setCenter( lastpos ); window.setView( view ); } };
int main() { sf::RenderWindow window( sf::VideoMode( 640, 480 ), "test" ); sf::CircleShape player( 10.0, 5 ); player.setFillColor( sf::Color::Yellow ); player.setOrigin( sf::Vector2f( player.getRadius(), player.getRadius() ) ); player.setPosition( window.getSize().x * 0.5f, window.getSize().y * 0.5f ); CCamera camera; sf::RectangleShape rects[ 100 ]; for( int y = 0; y < 10; ++y ) { for( int x = 0; x < 10; ++x ) { rects[ x + y * 10 ].setSize( sf::Vector2f( 10.0, 10.0 ) ); rects[ x + y * 10 ].setPosition( x * 60, y * 60 ); rects[ x + y * 10 ].setFillColor( sf::Color::Green ); } } float dirH = 0, dirV = 0; const float dstep = 1.0; while( window.isOpen() ) { sf::Event event; while( window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) window.close(); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) dirH = dstep; else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) dirH = - dstep; else dirH = 0; if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) dirV = - dstep; else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) dirV = dstep; else dirV = 0; window.clear(); for( int q = 0; q < 100; q++ ) window.draw( rects[ q ] ); player.setPosition( player.getPosition().x + dirH, player.getPosition().y + dirV ); camera.setTargetPosition( player.getPosition() ); camera.draw( window ); window.draw( player ); window.display(); } return 0; }
|
|
DejaVu |
» 2012-12-13 17:01:51 Jeżeli przybliżasz kamerę to powinieneś również zmniejszać 'skok' przybliżenia. |
|
« 1 » |