SDL2中触屏事件图像覆盖,屏幕刷新问题
c4droid吧
全部回复
仅看楼主
level 6
1098122556 楼主
我想用SDL2写五子棋界面。载入背景图片后以触屏事件贴上棋子图,调用SDL_RenderPresent(renderer),感觉这个函数很诡异,反复调用反而会使图像消失,让背景闪烁,落子分为几层,另外renderclear()怎么调也解决不了,感觉这个函数也怪怪的。请问吧中大神怎么解决?
void gobang::gettouch() {
while (SDL_PollEvent(&event)!=0) {
TouchX = event.tfinger.x * W;
TouchY = event.tfinger.y * H;
switch (event.type) {
case SDL_FINGERDOWN:
// display(true, TouchX, TouchY);
break;
case SDL_FINGERUP:
display(side, TouchX, TouchY);
side = !side;
break;
}
}
}
void gobang::display(){
SDL_RenderClear;
SDL_QueryTexture(Map,NULL, NULL, &R1.w, &R1.h);
R2.w = R1.w * 1.1;
R2.h = R1.h * 1.1;
R2.x = R1.x = 10;
R2.y = R1.y = 10;
SDL_RenderCopy(Renderer, Map, NULL, &R2);
SDL_RenderPresent(Renderer);
// SDL_RenderClear(Renderer);
SDL_Delay(10000);
}
void gobang::display(bool s,int x ,int y) {
if (s== true ){
Qi.x=x;
Qi.y=y;
SDL_RenderCopy(Renderer, BlackTex,NULL, &Qi);
}
else if (s== false ){
Qi.x=x;
Qi.y=y;
SDL_RenderCopy(Renderer, WhiteTex,NULL, &Qi);
}
SDL_RenderPresent(Renderer);
//SDL_Delay(100);
}
2017年02月03日 17点02分 1
level 6
C4上需要先SDL_RenderClear然后进行绘制,最后再SDL_RenderPresent进行图像更新
另外SDL2里面比起SDL_PollEvent更推荐SDL_WaitEvent和SDL_WaitEventTimeout(好像是) PollEvent会导致CPU占用加大
2017年02月03日 23点02分 7
如果SDL_RenderClear就会覆盖之前点过的子和棋盘啊,不clear的话就会点一下棋盘出现落黑子,记录之前所有黑子,再点一下落白子,记录之前所有白子。
2017年02月04日 04点02分
level 7
Touchx和Touchy应该在SDL_FINGERDOWN和SDL_FINGERUP判断之后,再赋值吧?
2017年02月04日 07点02分 14
试过了,效果一样啊
2017年02月04日 07点02分
level 12
present前要绘制图像、你是不是把绘制操作放到循环外边了?
2017年02月04日 08点02分 16
level 7
保证一次总循环就一个renderpresent可以解决闪烁问题。另外你需要的是局部刷新而不是全部刷新
2017年02月07日 23点02分 27
1