SDL: задержка до ввода с клавиатуры - PullRequest
1 голос
/ 17 декабря 2010

Скажем, у нас есть (псевдо) код, подобный этому:

GetInput()
{
//insert keyboard stuff here
}

Update()
{
//insert rendering stuff here
}

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

Как я буду ждать, пока игрок выдаст информацию, прежде чем обновлять то, что на экране?

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Вы уверены, что действительно хотите подождать?Не хочу быть навязчивым, но обычно в играх лучше продолжать рисовать на экране, ожидая ввода любого .Потому что игроки не хотят постоянно видеть одну и ту же картинку.

1 голос
/ 17 декабря 2010

Почему бы не переключить порядок (сначала GetInput), а затем заблокировать GetInput и не возвращаться, пока пользователь не введет что-то приемлемое?

0 голосов
/ 17 декабря 2010

Чтобы сделать игру пошаговой, я рекомендую массив объектов с методами, которые представляют способности игрока в игре.Вы можете иметь игровой цикл, вложенный цикл раунда, вложенный цикл поворота и логическое значение, которое выходит из циклов раунда и поворота, когда игрок выигрывает.

С вашим текущим псевдокодом вы можете использовать переключатель и целое числов методе Update, чтобы приравнять эти вложенные циклы.

Пример 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_*/

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)){
                }
            }
        }
    }
}
...