在鼠标位置抖动时移动精灵

时间:2018-02-14 17:08:34

标签: c++ sfml

我正在尝试将精灵移动到鼠标的位置,我得到了什么,但它非常紧张the result

这是我的主要内容:

int main() {
Game chessGame;
RenderWindow wnd(VideoMode(400, 400), "Chess Game");

while (wnd.isOpen()) {
    Event event;
    while (wnd.pollEvent(event))
    {
        if (event.type == Event::Closed) {
            wnd.close();
        }

    }
    wnd.clear();
    chessGame.printGame(&wnd);
    wnd.display();
}

return 0;

}

printGame()的重要部分:

// more stuff up there but it's not neccessary

// txt is the texture of the chess piece
Sprite tool(txt);
        FloatRect toolRec = tool.getGlobalBounds();

        tool.setScale(window->getSize().x / 8 / toolRec.width  , window->getSize().y / 8 / toolRec.height);
        Mouse m;
        Vector2i pos =  m.getPosition(*window);
        tool.setPosition(pos.x, pos.y);
        window->draw(tool); // drawing the sprite

1 个答案:

答案 0 :(得分:1)

这是一个非常一般的答案,但无论如何你都需要更改很多代码才能解决问题:不要混合渲染和更新代码

创建一种方法来绘制游戏的当前状态。创建另一个方法来更新游戏的当前状态。

例如,您的Render()方法会呈现一个棋子。您的Update()方法会更改国际象棋的位置。

为什么两种方法都不一样?您希望尽可能多地绘制以使您的游戏看起来流畅。你想要高FPS(每秒绘制的帧数)。 你希望不是以绘图的速度更新你的游戏状态,而是以恒定的速度更新。例如,你的国际象棋需要2秒钟才能移动。您不希望使用速度较慢的显卡进行漫画等待更长时间,或者使用速度更快的计算机的用户根本不能看到它,因为动画只需要20毫秒。您希望在两个系统上花费2秒钟。

你的抖动很可能是混合绘图和游戏状态的结果。先解决这个问题。