|
楼主 |
发表于 2004-5-26 00:34:19
|
显示全部楼层
我已经解决了这个问题,不过感觉很别扭!
下面是主程序的源代码!(代码中的方法是可以解决这个问题的,增加is_mov_ball
过滤键盘的多余事件)
int main(int argc,char* argv[]){
int fir_emp_item=-1,i;// pointer to the first empty item in the table
SDL_Event event;
init_surface();
/* the main handing procedure */
while(1){
draw_object(ball,ball_pos);
if((is_mov_ball==2)&&num_ball_alive<MAX_BALLS)
{
fir_emp_item++;
if((table[fir_emp_item].pid=fork())<0)
err_exit("fork()");
num_ball_alive++;
is_mov_ball=0;
table[fir_emp_item].status=ALIVE;
if(table[fir_emp_item].pid==0)
child_handing();
}
if(table[fir_emp_item].pid>0){
SDL_PollEvent(&event);
switch(event.type){
case SDL_KEYDOWN:
if(event.key.keysym.sym==SDLK_ESCAPE){
for(i=0;i<MAX_BALLS;i++){
if(table.status==ALIVE)
kill(table.pid,SIGKILL);
wait(table.pid);
}
nor_exit();
}
else if(event.key.keysym.sym==SDLK_SPACE&&is_mov_ball==0)
is_mov_ball++;
else if(event.key.keysym.sym==SDLK_LEFT)
pad_mov_lef=NO;
else if(event.key.keysym.sym==SDLK_RIGHT)
pad_mov_rig=YES;
else if(event.key.keysym.sym==SDLK_0)
kill(table[0].pid,SIGKILL);
-----------------略
break;
case SDL_KEYUP:
if(event.key.keysym.sym==SDLK_SPACE&&is_mov_ball==1)
is_mov_ball++;
else if(event.key.keysym.sym==SDLK_LEFT)
pad_mov_lef=NO;
else if(event.key.keysym.sym==SDLK_RIGHT)
pad_mov_rig=NO;
break;
case SDL_QUIT:
for(i=0;i<MAX_BALLS;i++){
if(table.status==ALIVE){
kill(table.pid,SIGKILL);
wait(table.pid);
}
}
nor_exit();
}
-----------------略
}
}
} |
|