我将如何暂停时间(编程游戏)

时间:2014-05-26 23:36:47

标签: c time timer

基本上我需要在我的游戏中实现暂停功能(这是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.
*/

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:1)

最佳做法取决于您正在使用的库和一般架构。有人说,我有时使用的一个天真的实现会有点像这样:

while( playing) {

    if( !paused) {
        logic();
    }
    rendering();
    input();
}

在进行小型游戏项目时,在主while循环中,我将逻辑分散,渲染并输入到不同的部分。在输入部分,有一个切换暂停标志的按钮。在主循环中,逻辑简单地包含在if语句中。

如果您仍需要在逻辑内部执行某些操作,则可以将其作为参数传递或以其他方式显示。此外,您可以在渲染部分中执行一些特殊的暂停图形。

细节会有所不同,但我希望这至少可以帮助你找到正确的方向。据说这是一种常见的做法,不应该太难以谷歌。