0
我正在开发一个使用C++利用SDL2可移植性的Tetris,事情是当我从触摸界面获取事件时,我有很多延迟,就像功能SDL_PollEvent()
doesn' t在PC上工作,我已经写了我的获得事件方法。Android上的触摸事件SDL2
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处理触摸事件?提前致谢。
从代码中不清楚您的事件循环是否在另一个'while(1)'内部。它应该是。此外,您可以尝试处理鼠标事件,因为touch也会生成它们(如果“SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH”已禁用,并且默认情况下是这样)。 – HolyBlackCat
我不明白,SDL建议以这种方式处理事件..你究竟是什么意思? –
它应该是'while(1){while(SDL_PollEvents()){/ * event handling,without break out the loop * /}/* game code * /}'。 – HolyBlackCat