c++ - 让 Sprite 跟随鼠标,使用 View 时出现奇怪的故障

标签 c++ sfml

我想知道是否有人可以帮助我。在我开始使用 View 之前,我的 sprite 一直很好地跟随我的鼠标。我刚刚开始使用 SFML,为了让 sprite 跟随我的玩家,我使用了这个。

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();

我可以看到 Sprite 的脸稍微偏了一点,过了一会儿他开始随机旋转,我对 C++ 很菜鸟,如果有人能帮助我,我将不胜感激。

最佳答案

您需要使用 sf::RenderTarget::mapPixelToCoords .基本上你需要改变你计算鼠标位置的方式:

this->mouse = sf::Mouse::getPosition(window);

this->mouse = window.mapPixelToCoords(sf::Mouse::getPosition(window));

关于c++ - 让 Sprite 跟随鼠标,使用 View 时出现奇怪的故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848659/

相关文章:

c++ - SFML/C++ Sprite 在特定点后消失

c++ - 我该如何处理这种类型的碰撞?

c++ - SFML 网络 |通过 sf::Packets 发送包含其他对象的对象会导致空数据

c++ - 使用 CMake 编译 SFML 应用程序

c++ - 带有 qList 引用的构造函数,它是如何工作的?

c++ - 存储机器数据的最佳 NoSQL 方式?

c++ - C++ 中的根命名空间编码约定

c++ - 令人困惑的 C++ 情况

c++ - 如何将文件中的数据输入到 C++ 中的矩阵中?

c++ - undefined reference (SFML)