假设我们有这样的(伪)代码:
GetInput()
{
//insert keyboard stuff here
}
Update()
{
//insert rendering stuff here
}
void game::loop()
{
game.Update();
player.GetInput();
}
在更新屏幕上的内容之前,我将如何等待玩家提供输入?
答案 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)){
}
}
}
}
}