【问题标题】:How to create continuous loop in C where each iteration of the loop occurs once per iteration of the loop it's inside如何在 C 中创建连续循环,其中循环的每次迭代都会在其内部的循环的每次迭代中发生一次
【发布时间】:2019-04-28 13:44:39
【问题描述】:

我正在用 c 创建一个游戏。游戏有一个名为 loop() 的函数,它调用其他函数并在每个游戏循环期间更新它们。 游戏角色只是一个字符图像。 我遇到的问题是,我希望这个 char 图像在按下 1 次按键后继续向一个方向移动,但是,我似乎只能让它每次按键移动一次,这意味着它需要被按住获得持续的运动。

我尝试过的事情: 我做了一个while循环,以指定char将不断移动,直到它到达屏幕上的边界......我遇到的问题是while循环嵌套在整个游戏while循环中,这意味着嵌套循环,在外循环执行一次之前循环遍历嵌套循环范围内的所有迭代,这意味着游戏角色立即跳转到游戏边界。

用 if 语句尝试过,正如预期的那样,它只执行一次。

一旦按下按键,我还尝试使用布尔值读取 true,并尝试了几个不同的版本。

我只需要了解如何让 char 图像根据其存储的速度连续移动,并在整个游戏循环的每次迭代中让图像步进一次。

【问题讨论】:

    标签: loops while-loop statements


    【解决方案1】:
    int is_moving = 0, speed = 0;
    char direction = '0';
    while(1){ //game loop
        if(/* north keypress event */){
            is_moving = 1;
            speed = 1;
            direction = 'n';
        }
        else if(/* east keypress event */){
            is_moving = 1;
            speed = 1;
            direction = 'e';
        }
        else if(/* south keypress event */){
            is_moving = 1;
            speed = 1;
            direction = 's';
        }
        else if(/* west keypress event */){
            is_moving = 1;
            speed = 1;
            direction = 'w';
        }
    
        for(int steps = 0; steps < speed && is_moving; ++steps){
            /* movement logic and other checks go here */
        }
        ++speed;
    }
    

    只要确保在角色停止移动时将is_moving 设置为0。显然这只是一个简单的示例,但听起来您已经计算出了速度的方向分量。
    编辑:
    在 for 循环的主体中,您需要检查 direction 的值,然后让角色适当地移动。

    【讨论】:

    • 谢谢,原来我的问题是我在游戏循环中初始化了与 is_moving 和 speed 等价的变量,因此每个游戏循环都将它们重新初始化为零迭代,这就是为什么它要求我握住钥匙!!
    • 哈,当我为我的答案编写代码 sn-p 时,我几乎犯了同样的错误。很高兴您能够找出问题所在。
    • 哈哈,再次感谢。只是对第一个问题的跟进,在这个函数中,我实际上有 4 个不同的按键,每个按键都会导致该字符朝不同的方向前进。我以为我可以从第一种情况推断出解决问题,但是循环之间似乎存在一些交互问题。任何帮助表示赞赏:) 谢谢你
    • 谢谢你,一旦你被指路,看起来很简单:)
    最近更新 更多