我现在正在试验事件并试图将窗口作为参数来更改场景(菜单到级别和级别到其他级别),但我的主要问题是程序没有接收我的关键事件。我基本上从here获取了代码,并为场景更改添加了一个视图行。现在,Change函数被注释掉,直到我能找出为什么keyevent没有被注册。
#include <SFML/Graphics.hpp>
void Change(sf::RenderWindow& rwindow);
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed){
window.close();
}
if(event.type == sf::Event::KeyPressed){
if(event.key.code == sf::Keyboard::Space){
window.clear();
sf::CircleShape shape(70.f);
shape.setFillColor(sf::Color::Red);
//Change(window);
}
}
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
void Change(sf::RenderWindow& rwindow){
rwindow.clear();
sf::CircleShape shape(70.f);
shape.setFillColor(sf::Color::Red);
}
答案 0 :(得分:0)
基本上你这样做:
int main() {
int x = 1;
if (true) { int x = 2; }
std::cout << x;
return 0;
}
This code will always output 1。为什么?因为x
语句中的if
与打印的shape
不同!如果您的书架上没有好书,那么可变范围。
在您的代码中,您有三个不同的main
变量:第一个位于if
的开头,第二个位于Change
语句中,第三个位于#include <SFML/Graphics.hpp>
void Change(sf::CircleShape& shape);
void Unchange(sf::CircleShape& shape);
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed){
window.close();
}
if(event.type == sf::Event::KeyPressed){
if(event.key.code == sf::Keyboard::Space){
Change(shape);
}
}
if(event.type == sf::Event::KeyReleased){
if(event.key.code == sf::Keyboard::Space){
Unchange(shape);
}
}
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
void Change(sf::CircleShape& shape){
shape.setRadius(70.f);
shape.setFillColor(sf::Color::Red);
}
void Unchange(sf::CircleShape& shape){
shape.setRadius(100.f);
shape.setFillColor(sf::Color::Green);
}
功能。
您需要始终使用相同的新变量,而不是创建新变量。这是一种方式:
{{1}}