gpt4 book ai didi

c++ - C++ 中的 SFML 播放器移动帮助

转载 作者:行者123 更新时间:2023-12-01 14:22:41 26 4
gpt4 key购买 nike

我对 sfml 完全陌生,所以我一直在关注 youtube 上的教程。我和那个人完全一样,但我的 Action 仍然有问题。

基本上发生的事情是,如果我按下一个移动键,播放器(它只是一个矩形)会移动一点,当我释放该键时,播放器会返回到它的官方位置。为什么要回到它的官方位置。它只会移动一次,即使我按下键的时间更长,它也不会移动超过一次。

这是我的代码:

#include <SFML/Graphics.hpp>
#include <iostream>

using namespace std;
int main()
{

sf::RenderWindow window(sf::VideoMode(512, 512), "SFML Tutorial", sf::Style::Close | sf::Style::Titlebar| sf::Style::Resize);

//Game Loop

while(window.isOpen())
{

//create an event
sf::Event evnt;
//create a rectangle shape called player
sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
player.setFillColor(sf::Color::Red);
while(window.pollEvent(evnt))
{
switch(evnt.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::Resized:
cout<<"New window width: "<<evnt.size.width<<" New window height: "<<evnt.size.height<<endl;
break;
case sf::Event::TextEntered:
if(evnt.text.unicode < 128){
printf("%c", evnt.text.unicode);
}
}

} //window event

if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left))
{
player.move(-5.0f, 0.0f);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right))
{
player.move(5.0f, 0.0f);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up))
{
player.move(0.0f, -5.0f);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down))
{
player.move(0.0f, 5.0f);
}


//display player

window.clear();
window.draw(player);
window.display();
}
return 0;

}

最佳答案

问题是您在 100.0f 100.0f 中的每一帧都在 while 循环中创建了一个角色。因此,您需要将创建角色的代码移出 while 循环。

int main()
{
sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
player.setFillColor(sf::Color::Red);
while(window.isOpen())
{

//create an event
sf::Event evnt;
//create a rectangle shape called player

while(window.pollEvent(evnt))
...
}
}

关于c++ - C++ 中的 SFML 播放器移动帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62233070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com