c - 如何在sdl中同时使用键盘的两个键
问题描述
我正在用 SDL 用 C 语言编写一个简单的游戏,并且我已经定义了玩家一用键盘的箭头键控制它是_例如_坦克,而玩家二控制它是坦克,用键“W”、“A”、“S”,键盘的“D”。
我的问题是他们不能同时按键。
我有一个名为“handle_events”的函数,它控制游戏中无限期的事件,它的代码如下:
int handle_events(Tank* tank,Tank* tanker, Wall walls[]){
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT)
return EXIT;
if (event.type == SDL_KEYDOWN){
if(event.key.keysym.sym==SDLK_UP){
move_tank_forward(tank,colliding(tank,walls));
}else if(event.key.keysym.sym==SDLK_DOWN){
move_tank_back(tank,colliding(tank,walls));
} else if(event.key.keysym.sym==SDLK_RIGHT || event.key.keysym.sym==SDLK_LEFT) {
turn_tank(event.key.keysym.sym, tank);
} else if(event.key.keysym.sym==SDLK_w){
move_tank_forward(tanker,colliding(tanker,walls));
} else if (event.key.keysym.sym==SDLK_s){
move_tank_back(tanker,colliding(tanker,walls));
} else if(event.key.keysym.sym==SDLK_d || event.key.keysym.sym==SDLK_a){
turn_tank(event.key.keysym.sym, tanker);
}
}
我正在寻找一种两个玩家可以同时玩的方式,因为现在如果两个玩家同时按下向上键和 w 键,他们都无法移动他们的坦克。
解决方案
在 Windows 上,您可以使用GetAsyncKeyState()函数。
对于 Linux 上的等价物,请参阅此问题。
推荐阅读
- python - 如何在弹性搜索中启用滚动功能
- powershell - 使用 Powershell 从 .csv 中删除标题,然后保存 .csv
- c# - UNITY MVC 容器在具有授权属性的帐户控制器中捕获 NULL 异常
- java - 无法弄清楚是什么导致了这个错误“这个类没有接受 String[] 的静态 void main 方法。”
- powerbi - 使用表 A 中的 DOB 列和表 B 中的日期列进行年龄计算
- javascript - 当特定元素在视口中时触发 onscroll 功能 - jsfiddle inside
- c - 如何防止 gcc 优化破坏 rep movsb 代码?
- c# - XtraReport 从 DataSet 打印所有内容。我只想在 datagridview 中选择打印
- list - 未来不兼容
- graphql - Webhook 使用 express 调用 ApolloServer