Java libgdx在android上测试时闪烁,但桌面版本没有问题
我的项目在桌面版上运行得非常好,但在android上测试时,它一直在闪烁 我对此做了大量的研究,显然这个问题会导致双缓冲。但我仍然找不到任何解决办法。有一个人建议使用“渲染到纹理”,但我找不到任何关于libgdx的例子 我想知道是否有办法解决这个问题 如果你想知道我的代码,我有一个draw spritebatch在渲染函数的外面,我必须这样做才能符合我的游戏逻辑,这就是使用双缓冲的原因Java libgdx在android上测试时闪烁,但桌面版本没有问题,java,libgdx,Java,Libgdx,我的项目在桌面版上运行得非常好,但在android上测试时,它一直在闪烁 我对此做了大量的研究,显然这个问题会导致双缓冲。但我仍然找不到任何解决办法。有一个人建议使用“渲染到纹理”,但我找不到任何关于libgdx的例子 我想知道是否有办法解决这个问题 如果你想知道我的代码,我有一个draw spritebatch在渲染函数的外面,我必须这样做才能符合我的游戏逻辑,这就是使用双缓冲的原因 public void create(){ ... Gdx.graphics.setContinuou
public void create(){
...
Gdx.graphics.setContinuousRendering(false);
Gdx.graphics.requestRendering();
}
public void render() {
batch.begin();
drawBoard();
player();
batch.end();
}
如果我的玩家功能检查谁的回合(玩家1/2),然后检查合法的移动,然后根据该动作绘制精灵牌
public void player(){
clickX=Gdx.input.getX();
clickY=(Gdx.input.getY()-Gdx.graphics.getHeight())*-1;
if(turn==true){
player = "player1";
if(Gdx.input.isTouched()){
//System.out.println("avalible");
if(rect.isEmpty()){
batch.setColor(Color.WHITE);
addLineNew(clickX, clickY);
plr1++;
System.out.println(plr1);
turn=false;
}else {
for (int i=0; i<rect.size(); i++){
if(rect.get(i).contains(clickX, clickY)){
System.out.println("line exsit");
break;
}else{
batch.setColor(Color.WHITE);
tempScore = score1;
turnC=added.size();
addLineNew(clickX,clickY);
System.out.println("rect size "+rect.size());
if(turnC>added.size()){
calculateScore();
}
plr1++;
System.out.println(plr1);
if (score1>tempScore){
turn=true;
}else if (turnC>added.size()){
turn=false;
}else{
turn=true;
}
break;
}
}
publicsvoid播放器(){
clickX=Gdx.input.getX();
clickY=(Gdx.input.getY()-Gdx.graphics.getHeight())*-1;
if(turn==true){
player=“player1”;
if(Gdx.input.isTouched()){
//系统输出打印项次(“可用”);
if(rect.isEmpty()){
batch.setColor(颜色为白色);
addLineNew(单击X,单击Y);
plr1++;
系统输出打印LN(plr1);
转向=假;
}否则{
对于(int i=0;iadded.size()){
计算核心();
}
plr1++;
系统输出打印LN(plr1);
如果(分数1>临时分数){
转身=真;
}else if(turnC>added.size()){
转向=假;
}否则{
转身=真;
}
打破
}
}
这是给玩家的,玩家1和玩家2差不多
public void addLineNew(float x, float y){
float clickx=x;
float clicky=y;
outterLoop:
for (int i=0; i<added.size(); i++){
for(int j=0; j<Xpoints.length; j++){
if(added.get(i).contains(clickx, clicky) && added.get(i).x==Xpoints[j]+16){
batch.draw(lineH, added.get(i).x, added.get(i).y, sizeH.x, sizeH.y);
rect.add(added.get(i));
added.remove(i);
System.out.println("sizz///"+added.size());
break outterLoop;
}
else if (added.get(i).contains(clickx, clicky) && added.get(i).x==Xpoints[j]){
batch.draw(line, added.get(i).x, added.get(i).y, sizeV.x, sizeV.y);
rect.add(added.get(i));
added.remove(i);
System.out.println("sizz///"+added.size());
break outterLoop;
}
else{
System.out.println("line is not availble play again");
}
}
public void addLineNew(浮点x,浮点y){
浮动点击x=x;
浮动y=y;
外环:
因为(inti=0;i你做错了什么事。:)
试着用水桶和雨滴创建演示项目,看看它是否也有闪烁的屏幕
如果它也闪烁,那么你应该在其他手机/平板电脑上试用你的应用程序
但如果没有,则将演示中的主要渲染步骤(及其顺序)与应用程序进行比较
当我绝望的时候,我会从工作代码开始,然后一个接一个地和平地修改它,直到它与不工作的代码完全相同,或者实际上在某个时候它会停止工作,这样你就会知道你最后修改了什么。我也试着把player()的内容放到在渲染函数内部,但仍然闪烁ingafaik双缓冲实际上应该防止闪烁,默认情况下它应该可以工作(我从来没有任何闪烁问题).你使用vSync吗?不,我没有使用它..它能解决问题吗?可能,它只是一个开始配置,只对桌面可用,但你可以尝试。如果它没有帮助,你应该向我们展示更多的代码,对闪烁进行更详细的描述。正如我所说,我没有做任何特殊的魔术,我也没有闪烁桌面工作非常好闪烁只在android上出现似乎有三帧,每次点击都会显示其中一帧代码很长我会在问题中添加其他部分