在 Android 上触摸事件 SDL2
Touch events SDL2 on Android
我正在使用C++利用 SDL2 的可移植性开发适用于 Android 的俄罗斯方块,问题是当我从触摸界面获取事件时我有很多延迟,就像函数SDL_PollEvent()
不像在 PC 上那样工作,我已经在我的获取事件方法上写了这个。
float x = 0, y = 0;
while (SDL_PollEvent(&event)){
switch (event.type) {
case SDL_QUIT: { gameState = false; break;}
case SDL_FINGERDOWN: {
x = event.tfinger.x;
y = event.tfinger.y;
SDL_Log("nDesplazamiento x: %f desplazamiento y: %f.n", x, y);
window.get_AbsPixels(&x, &y);
if (x >= keys->U.getX() && x <= (keys->U.getX() + keys->U.getW()) &&
y >= keys->U.getY() && x <= keys->U.getY() + keys->U.getH())
return Up;
if (x >= keys->D.getX() && x <= (keys->D.getX() + keys->D.getW()) &&
y >= keys->D.getY() && x <= keys->D.getY() + keys->D.getH())
return Down;
if (x >= keys->L.getX() && x <= (keys->L.getX() + keys->L.getW()) &&
y >= keys->L.getY() && x <= keys->L.getY() + keys->L.getH())
return Left;
if (x >= keys->R.getX() && x <= (keys->R.getX() + keys->R.getW()) &&
y >= keys->R.getY() && x <= keys->R.getY() + keys->R.getH())
return Right;
break;
}
default: break;
}
return None;
}
但是当我在 Android 上调试我的应用程序时,尽管它们应该被返回并且应该在动画之前接收,但事件行为延迟,所以我想它们是否在 Android 中的另一个线程或其他东西中处理,因为它们的行为与动画无关。
之前尝试过这个:
float x = 0, y = 0, tmpx = 0, tmpy = 0;
while (SDL_PollEvent(&event)){
if (event.type == SDL_QUIT){ gameState = false; }
switch (event.type) {
case SDL_FINGERMOTION: {
tmpx = event.tfinger.dx;
tmpy = event.tfinger.dy;
window.get_AbsPixels(&tmpx, &tmpy);
x += tmpx; y += tmpy;
tmpx = tmpy = 0;
SDL_Log("nDesplazamiento x: %f desplazamiento y: %f.n", x, y);
break;
}
default: break;
}
if ((x > 70 || x < -70) || (y > 70 || y < -70))
return window.process_Dplcmnt(x, y);
}
return None;
..但它也给了我比新的很多延迟。
因此,为了清楚并可以相应地采取行动,有人可以解释一下如何使用 Android 上的 SDL 处理触摸事件吗?提前谢谢。
我已经解决了,在每次case:
之后,即使没有人适合某个条件,也总会有返回,所以不匹配的待定事件保持在那里没有刷新正确,只是将状态return None;
移到了外面。现在它像在 PC 上一样工作。
float x = 0, y = 0;
while (SDL_PollEvent(&event)){
switch (event.type) {
case SDL_QUIT: { board->setGameState(false); break;}
case SDL_FINGERDOWN: {
x = event.tfinger.x;
y = event.tfinger.y;
SDL_Log("nDesplazamiento x: %f desplazamiento y: %f.n", x, y);
window.get_AbsPixels(&x, &y);
if (x > keys->U.getX() && x < (keys->U.getX() + keys->U.getW()) &&
y > keys->U.getY() && y < keys->U.getY() + keys->U.getH()) {
SDL_Log("nRetornado Upn");
return Up;
}
if (x > keys->D.getX() && x < (keys->D.getX() + keys->D.getW()) &&
y > keys->D.getY() && y < keys->D.getY() + keys->D.getH()) {
SDL_Log("nRetornado Downn");
return Down;
}
if (x > keys->L.getX() && x < (keys->L.getX() + keys->L.getW()) &&
y > keys->L.getY() && y < keys->L.getY() + keys->L.getH()) {
SDL_Log("nRetornado Leftn");
return Left;
}
if (x > keys->R.getX() && x < (keys->R.getX() + keys->R.getW()) &&
y > keys->R.getY() && y < keys->R.getY() + keys->R.getH()) {
SDL_Log("nRetornado Rightn");
return Right;
}
break;
}
default:
//SDL_PumpEvents();
//SDL_FlushEvent(SDL_FINGERDOWN);
break;
}
}
return None;
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 给定顺序中的事件处理
- 如何创建事件驱动的 SDL2 应用程序
- 不带轮询的 SDL2 事件回调
- SDL2 无法捕获控制台键盘事件?
- SDL2 + Win32 API 菜单栏单击事件不起作用
- 在 Android 上触摸事件 SDL2
- 为什么 SDL2 提供的事件值不正确
- 无法从窗口获取 SDL2 事件
- SDL2未接收到窗口事件
- SDL2程序使用事件崩溃
- SDL2操纵杆事件未触发