0
我正在使用SFML進行基本的分組遊戲以熟悉C++(從C向上移動)。在遊戲循環中,我已經放置了一個導致switch語句的事件輪詢。當鼠標移動時,開關的情況下將檢索鼠標XY變化,並相應地移動擋板,像這樣:使用sfml重置開關盒中的鼠標位置時出現問題
while (window.isOpen())
{
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code)
{
case sf::Keyboard::Escape:
window.close();
break;
}
break;
case sf::Event::MouseMoved:
paddle.move(sf::Vector2f((sf::Mouse::getPosition(window).x - windowOffset.x) * sensitivity, 0));
break;
}
}
sf::Mouse::setPosition(windowOffset, window);
window.clear();
window.draw(paddle);
window.display();
}
現在,工作得非常愉快,但我重新設置鼠標位置在的每個循環的窗口中心,如果鼠標沒有移動,這不是必需的。所以,我想移動sf::Mouse::setPosition()
進入switch語句,下面paddle.move
,就像這樣:
case sf::Event::MouseMoved:
paddle.move(sf::Vector2f((sf::Mouse::getPosition(window).x - windowOffset.x) * sensitivity, 0));
sf::Mouse::setPosition(windowOffset, window);
break;
然而,當我重建項目,我現在得到一個空白窗口。 所以,我的問題是:這是怎麼回事?
編輯(最小的完整代碼)
int WinMain()
{
sf::Vector2i windowRes(700, 900);
sf::Vector2i windowOffset(350, 450);
sf::ContextSettings settings;
sf::RectangleShape paddle;
paddle.setSize(sf::Vector2f(150, 20));
paddle.setOrigin(350, 0);
paddle.setPosition(350, 825);
sf::RenderWindow window(sf::VideoMode(windowRes.x, windowRes.y), "Breakout", sf::Style::Default, settings);
window.setMouseCursorVisible(false);
sf::Mouse::setPosition(windowOffset, window);
sf::Event event;
while (window.isOpen())
{
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code)
{
case sf::Keyboard::Escape:
window.close();
break;
}
break;
case sf::Event::MouseMoved:
paddle.move(sf::Vector2f((sf::Mouse::getPosition(window).x - windowOffset.x), 0));
//sf::Mouse::setPosition(windowOffset, window);
break;
}
}
sf::Mouse::setPosition(windowOffset, window);
window.clear();
window.draw(paddle);
window.display();
}
return 0;
}
聽起來像你使用錯誤的配置。你是否在發佈模式或其他方式鏈接調試庫? – Lukas
@Lukas我只是雙重檢查,這似乎並不是問題。我已經靜態鏈接了所有的sfml庫文件,用於發佈_and_調試,並且也在調試模式下構建。此外,如果我將'sf :: Mouse :: setPosition()'移出交換機,則問題將得到解決,然後完成項目的重建。無論發生什麼_appears_直接關聯到切換案例中'sf :: Mouse :: setPosition()'的位置。不過謝謝你的迴應! –
當代碼根據某些代碼行的位置而有所不同時,它通常是一些堆或配置問題。我敢肯定,如果你提供了一個完整的,最小的例子,它將在我的系統上運行得很好。 – Lukas