SFML 游戏菜单选择开关
SFML Game Menu selection switch
我正在使用 SFML 创建一个简单的游戏。我已经完成了一个带有“播放”、“乐谱”和“退出”按钮的主菜单。
我有一个 class MainMenu
创建图形部分并处理来自键盘的输入。
void MainMenu::InputHandler(sf::RenderWindow & window)
{
int selected= 0;
std::cout << selected;
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code)
{
if (selected>= 0 && selected<= 3)
{
case sf::Keyboard::S:
selected++;
std::cout << selected;
break;
case sf::Keyboard::W:
selected--;
std::cout << selected;
break;
}
}
break;
}
}
我在 Game.cpp
class 的 gameLoop()
函数中调用了这个方法。
我的问题是,如果我按 's' 将菜单选项向下滚动到 select 选项 1,selected 选项会立即返回到选项 0,因为输出到控制台下图显示:
我做错了什么?
如前所述,您需要将 int selected=0;
移动到 class 构造函数中,并将 MainMenu 对象初始化移出游戏循环。
另外switch语句里面的if语句永远不会到达。最好这样写:
switch (event.type){
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code){
case sf::Keyboard::S:
if (selected<3) selected++;
std::cout << selected;
break;
case sf::Keyboard::W:
if (selected>0) selected--;
std::cout << selected;
break;
}
break;
}
}
我正在使用 SFML 创建一个简单的游戏。我已经完成了一个带有“播放”、“乐谱”和“退出”按钮的主菜单。
我有一个 class MainMenu
创建图形部分并处理来自键盘的输入。
void MainMenu::InputHandler(sf::RenderWindow & window)
{
int selected= 0;
std::cout << selected;
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code)
{
if (selected>= 0 && selected<= 3)
{
case sf::Keyboard::S:
selected++;
std::cout << selected;
break;
case sf::Keyboard::W:
selected--;
std::cout << selected;
break;
}
}
break;
}
}
我在 Game.cpp
class 的 gameLoop()
函数中调用了这个方法。
我的问题是,如果我按 's' 将菜单选项向下滚动到 select 选项 1,selected 选项会立即返回到选项 0,因为输出到控制台下图显示:
我做错了什么?
如前所述,您需要将 int selected=0;
移动到 class 构造函数中,并将 MainMenu 对象初始化移出游戏循环。
另外switch语句里面的if语句永远不会到达。最好这样写:
switch (event.type){
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code){
case sf::Keyboard::S:
if (selected<3) selected++;
std::cout << selected;
break;
case sf::Keyboard::W:
if (selected>0) selected--;
std::cout << selected;
break;
}
break;
}
}