有没有办法在C?中用sdl按键鼠标/键盘?
如果是,怎么样?
如果不是,你知道在C中有什么办法吗?
答案 0 :(得分:3)
创建SDL_event
结构并填写http://wiki.libsdl.org/SDL_KeyboardEvent和http://wiki.libsdl.org/SDL_Keysym中记录的字段,然后使用SDL_Pushevent()
将事件放入事件队列:
http://wiki.libsdl.org/SDL_PushEvent
SDL_Event event;
event.type = SDL_KEYDOWN;
event.timestamp = lastEvent.timestamp + 1;
event.windowID - lastEvent.windowID;
event.state = SDL_PRESSED;
event.keysym.scancode = SDL_SCANCODE_ESCAPE; // from SDL_Keysym
event.keysym.sym = SDLK_ESCAPE;
event.keysym.mod = 0; // from SDL_Keymod
SDL_PushEvent(&Event) // Inject key press of the Escape Key
对SDL_Event联合中的任何其他事件执行相同的操作,包括鼠标事件:http://wiki.libsdl.org/SDL_MouseButtonEvent
答案 1 :(得分:2)
从SDL 2.0.3开始,SDL不支持将输入事件发送到其他应用程序。在Windows上,您可以使用the SendInput
function将输入事件发送到其他应用程序。使用X11,您可以使用the xcb_send_event
function。我对OS X,iOS或Android不确定。
答案 2 :(得分:0)
该程序演示了如何在SDL程序中读取鼠标和键盘输入。它将运行几秒钟,并显示"向上箭头"或"向下箭头"当按下其中任何一个键时,显示"鼠标点击"单击鼠标时的坐标。
#include "SDL2/SDL.h"
#include <stdlib.h>
int main(){
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow( "Keyboard and mouse input",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
500, 500, SDL_WINDOW_SHOWN );
int i;
for (i = 0; i< 3000; i++){
SDL_UpdateWindowSurface(window);
SDL_Event event;
while (SDL_PollEvent(&event)){//this is where the important stuff happens:
if( event.type == SDL_KEYDOWN ) {
switch( event.key.keysym.sym ) {
case SDLK_UP:
puts("up arrow");
break;
case SDLK_DOWN://for full list of key names, http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlkey.html
puts("down arrow");
break;
}
}
else if (event.type == SDL_MOUSEBUTTONDOWN){
int x, y;
SDL_GetMouseState(&x,&y);
printf("%s button mouse clicked at: (%d,%d)\n",
(event.button.button == SDL_BUTTON_LEFT)? "left" : "right",
x,y);
}
}
SDL_Delay(1);
}
SDL_DestroyWindow(window);
SDL_Quit();
}
这适用于SDL版本2
基本上,您需要调用 SDL_PollEvent
,然后检查生成的SDL_Event struct
以获取有关它是键盘还是鼠标事件的信息,如果是,那么鼠标位于哪里是什么或按下了什么按钮。