我的项目在桌面版上运行得非常好,但在Android上测试时它仍然闪烁。
我已经对此进行了大量研究,显然问题导致双重缓冲。但我仍然无法找到任何解决方案。有一个人用“渲染到纹理”来消化,但我找不到任何关于libgdx的例子。
我想知道是否有办法解决这个问题
如果你想知道我的代码,我有一个绘制spritebatch外面的渲染功能,我必须这样做与我的游戏逻辑,这是什么cuasing双缓冲
public void create(){
...
Gdx.graphics.setContinuousRendering(false);
Gdx.graphics.requestRendering();
}
public void render() {
batch.begin();
drawBoard();
player();
batch.end();
}
我的播放器功能检查转向(播放器1 /播放器2)然后它检查合法移动然后它根据那个绘制spritebatch
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;
}
}
这对于玩家2的玩家1几乎是相同的
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");
}
}
添加线功能,我用它来绘制
答案 0 :(得分:1)
你做错了什么。 :) 尝试使用桶和雨滴创建该演示项目,看看它是否也有闪烁的屏幕。
如果它也闪烁,那么你应该在其他手机/平板电脑上试试你的应用程序。
但如果没有,那么将该演示中的主要渲染步骤(及其顺序)与您的应用进行比较。
当我绝望时,我所做的是,我开始使用工作代码并开始通过和平改变它,直到它与非工作相同或实际上在某个时候它将停止工作,所以你会知道你是什么最后改变了..