C ++游戏 - 循环和KeyPress同时

时间:2014-03-18 21:08:50

标签: c++ loops keypress getch

我做了类似游戏的东西,你上下移动你的角色(黑匣子),墙上有一些空白,墙是右侧,它是从右到左,如果你触摸墙壁游戏结束。

我在while循环中得到了按键,如<; p>

while(keyboardInput=getKeyPress()){
        switch(keyboardInput){/*checks the key and goes up or down*/}
        //draws the main character, then also draws the wall.
}

我做了一个wall()函数,它会打印块来制作墙。

问题是,在获得按键后,墙只移动 ,我的按键功能与 _getch()

一起使用

我想看到的是,即使用户没有按任何键,墙也会像每秒一样向左移动,按键/移动按键的方式也一样。

我将wall()函数放入wall()函数中。它打印就像我想要的那样,但我不能得到任何按键,因为那个墙()永远循环

游戏看起来像这样:

                                    *
                                    *
                                    *
                                    *
                                    *

■

                                    *
                                    *
                                    *
                                    *
                                    *

我在等你的回答,谢谢!

2 个答案:

答案 0 :(得分:3)

对于任何接近游戏或模拟的东西,你需要了解什么是游戏循环&#34;也被称为&#34;主循环&#34;。有一个很好的explaination of the principle on wikipedia.

基本上你不应该等待输入,但是你应该循环以更新游戏的状态,即使没有任何反应:观察输入,看看是否发生了什么,如果没有,只需继续循环如果发生了什么事情,那就去做吧,然后继续循环。 你必须永远不要等待输入,你只需检查是否有事情要做。

这也意味着你不应该像_getch()一样使用阻塞调用。 你必须使用你可用的任何输入功能,只检查是否有事情要做。这很大程度上取决于您正在使用的输入API,因此我无法在不知道您使用哪种API的情况下了解详细信息。

一个简单(或更正确:天真)的游戏循环如下所示:

while( !exit_game )
{
     read_input(); // acquire inputs then generate actions interpreted from inputs, if any
     update_game(); // update the game to generate it's new state after applying all the actions from all the game entities
     render(); // render the graphics and audio
}

这很天真,在实际案例中效果不好,但基本上就是这个想法。

我建议您阅读thisthis以更好地了解游戏循环是什么,但它并不专注于获取输入。

答案 1 :(得分:1)

如果您在Windows中进行编程,请查看_kbhit()。您可以找到_kbhit() here的MSDN页面。

虽然_kbhit()历史上是MS-DOS(以及后来的Windows)功能(它在Windows系统上的<conio.h>中定义),但您可以在Linux中滚动自己的版本,如herehere所示。

但是,更简单的途径可能是使用ncurses库通过调用getch()nodelay(stdscreen, TRUE)转换为非阻止调用,如here和{{ 3}}

相关问题