SDL:延迟到键盘输入

时间:2010-12-17 05:42:35

标签: c++ sdl

假设我们有这样的(伪)代码:

GetInput()
{
//insert keyboard stuff here
}

Update()
{
//insert rendering stuff here
}

void game::loop()
{
 game.Update();
 player.GetInput();
}

在更新屏幕上的内容之前,我将如何等待玩家提供输入?

3 个答案:

答案 0 :(得分:1)

为什么不切换顺序(先GetInput),然后在GetInput中阻止,在用户输入可接受的内容之前不要返回?

答案 1 :(得分:1)

你确定你真的想等吗?并不意味着是侵入性的,但通常在游戏中,最好在等待任何类型的输入时继续在屏幕上绘制内容。因为玩家不希望一直看到相同的画面。

答案 2 :(得分:0)

为了让游戏回合制,我推荐一系列对象,其中的方法代表玩家在游戏中的能力。你可以拥有一个游戏循环,一个嵌套的循环循环,一个嵌套的转弯循环,以及一个退出该循环的布尔值,并在玩家获胜时转动循环。

使用当前的伪代码,您可以在Update方法中使用switch和integer来等同这些嵌套循环。

示例Tic Tac Toe AI:

#include "Shared.h"
#include "Board.h"

#ifndef AI_H_
#define AI_H_

class AI{
    public:
    AI();
    enum difficulty{Easy, Medium, Hard};
    void setAlgorithm(difficulty h);
    void applyAlgorithm(Board* b, int columns, int rows);
    private:
    Board::spot type;
        difficulty harder;
    void easy(Board* b, int columns, int rows);
    void medium(Board* b, int columns, int rows);
    void hard(Board* b, int columns, int rows);
};

#endif /*AI_H_*/

如果你不想占用CPU,SDL_WaitEvent()的效率比SDL_PollEvent()高得多。

while(!quit){
    if(SDL_WaitEvent(&event)){
        if(event.type == SDL_QUIT){
            quit = true;
        }else if(event.type == SDL_MOUSEBUTTONDOWN){
            if(!menu.isClicked()){
                if(menu.handleEvent(&event)){
                }
            }
        }
    }
}