2011-10-19 27 views
0

我正在写一个小球赛。我有一个叫gravity的函数,我也有一个while循环来检查用户是否想用wsad键移动球。使用graphics.h的小型C++游戏,一次调用多个函数? (多线程?)

我需要多线程这或有另一种方式呢?我删掉了一些设置程序的无关代码。这里只是重要的东西:

while(1) { 
enableGravity(); 
char ch = getch();// i know getch() is not going to cut it 
//maybe 2 different f() multi threaded , for gravity and position, 
f(ch == 'w' || ch == 'W') 
       updateObjPosition('U');  
      else if(ch == 's' || ch == 'S') 
       updateObjPosition('D'); 
      else if(ch == 'a' || ch == 'A') 
       updateObjPosition('L'); 
      else if(ch == 'd' || ch == 'D') 
       updateObjPosition('R'); 

      } 

我在main中有这些函数。我需要的程序,使重力,也能够接受输入通过updateObjPosition()同时移动球。

+1

您可能正在寻找[的kbhit(http://www.cprogramming.com/fod/kbhit.html)功能。 –

+1

您可能不想制作“小游戏”多线程。这个很难(硬。 –

回答

1

你不需要多线程。如果当前按下指定的键,则只需要一个返回TRUE的API。这可能会依赖于平台。你在建立/运行什么平台?

例如在Win32:GetAsyncKeyState

+0

窗口,但编译程序是一个控制台应用程序类型(很抱歉我是一个新手,在C++) – Yohann

+2

应该还是工作,如果你包括WINDOWS.H –

+1

耶稣!!!! - 他可以使用kbhit(); – ShrekOverflow

4

可能使用多个线程。更明显的可能性是无阻塞键盘读取。

如果你正在做这在Windows上,你可能在你的标准库中的_kbhit会告诉你,如果键盘上的一个键被按下。如果您正在使用curses,则可以使用nodelay来告诉getch立即返回,无论按键是否已按下。其他系统可以做的事情的方式不同的是,但你的总体思路...

0

正如你所提到自己的老CONIO.H使用旧的编译器Borland公司在TC 3.1有一个功能

kbhit(); 

功能是为如果按下键盘上的任意键得到一个一次性的解决方案 所以这里是你的循环得到键输入

int getKey(){ 
    if(kbhit){ 
     return getch(); 
    } 
    return -1; 
} 

通过他们的方式,你应该升级到VC 08 ATLEAST!

对于您的简单项目,我认为逻辑循环会很小,这将为您处理所有的痛苦,但如果您使用硬逻辑编写较长的应用程序,那么您将不得不使用更好和异步方法来处理IO和那些方法主要涉及工作2个线程1获得输入,另一个做逻辑运算..