基本上我需要在我的游戏中实现暂停功能(这是frogger的简化版本),它会停止日志滚动,并忽略任何其他输入,直到再次按下字符p)。我开始在while循环中实现它的方法是在按下时再次结束它。
if(serial_input == 'p' || serial_input == 'P') {
while(1){
//need to pause the game
if(serial_input == 'p' || serial_input == 'P')
break;
}
这就是我的日志当前滚动的方式:
/* The following statements change the scrolling speeds of the individual logs */
current_time = get_clock_ticks();
if(is_frog_alive() && current_time >= last_move_time1 + 1000) {
scroll_lane(0, 1);
last_move_time1 = current_time;
} else if(is_frog_alive() && current_time >= last_move_time2 + 600) {
scroll_lane(1, -1);
last_move_time2 = current_time;
} else if(is_frog_alive() && current_time >= last_move_time3 + 800) {
scroll_lane(2, 1);
last_move_time3 = current_time;
} else if(is_frog_alive() && current_time >= last_move_time4 + 900) {
scroll_log_channel(0, -1);
last_move_time4 = current_time;
} else if(is_frog_alive() && current_time >= last_move_time5 + 1200) {
scroll_log_channel(1, 1);
last_move_time5 = current_time;
这是由定时器实现的,如下所述:
* We update a global clock tick variable - whose value
* can be retrieved using the get_clock_ticks() function.
*/
任何建议都将不胜感激
答案 0 :(得分:1)
最佳做法取决于您正在使用的库和一般架构。有人说,我有时使用的一个天真的实现会有点像这样:
while( playing) {
if( !paused) {
logic();
}
rendering();
input();
}
在进行小型游戏项目时,在主while循环中,我将逻辑分散,渲染并输入到不同的部分。在输入部分,有一个切换暂停标志的按钮。在主循环中,逻辑简单地包含在if语句中。
如果您仍需要在逻辑内部执行某些操作,则可以将其作为参数传递或以其他方式显示。此外,您可以在渲染部分中执行一些特殊的暂停图形。
细节会有所不同,但我希望这至少可以帮助你找到正确的方向。据说这是一种常见的做法,不应该太难以谷歌。