我想知道是否有人可以帮助我。我的精灵正在跟踪我的鼠标,直到我开始使用视图我才开始使用SFML,让精灵跟随我的播放器使用它。
void player::rotateToMouse(sf::Sprite &sprite, sf::RenderWindow &window)
{
this->mouse = sf::Mouse::getPosition(window);
const float PI = 3.14159265;
float a = playerPosition.x - mouse.x;
float b = playerPosition.y - mouse.y;
mouseAngle = (atan2(b, a)) * 180 / PI;
playerSprite.setRotation(mouseAngle + 180);
}
我在我的更新方法中添加了这个代码,就像这样,
void player::update(sf::RenderWindow &window){
this->rotateToMouse(playerSprite, window);
this->followPlayer();
我正在设置我的观点,
void player::followPlayer(){
view.reset(sf::FloatRect(0, 0, 32 + 10, 32 + 10));
view.zoom(15);
view.setCenter(playerSprite.getPosition());
}
我的动作代码就是这个,
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)){
playerSprite.move(std::cos(3.14159265 * mouseAngle / 180.f) * speed *-1, std::sin(3.14159265 * mouseAngle / 180.f) * speed *-1);
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)){ //Speed
playerSprite.move(std::cos(3.14159265 * mouseAngle / 180.f) * speed , std::sin(3.14159265 * mouseAngle / 180.f) * speed );
}
this->playerPosition = playerSprite.getPosition();
我可以看到精灵稍微偏了一会儿,过了一会儿他开始随机旋转,我在c ++上非常棒,如果有人能帮助我,我将不胜感激。
答案 0 :(得分:2)
您需要使用sf::RenderTarget::mapPixelToCoords
。基本上,您需要更改计算鼠标位置的方式:
this->mouse = sf::Mouse::getPosition(window);
到
this->mouse = window.mapPixelToCoords(sf::Mouse::getPosition(window));