libgdx在Android上测试时闪烁,但桌面版没有问题

时间:2013-11-17 05:08:25

标签: java libgdx

我的项目在桌面版上运行得非常好,但在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");

                }
            }

添加线功能,我用它来绘制

1 个答案:

答案 0 :(得分:1)

你做错了什么。 :) 尝试使用桶和雨滴创建该演示项目,看看它是否也有闪烁的屏幕。

如果它也闪烁,那么你应该在其他手机/平板电脑上试试你的应用程序。

但如果没有,那么将该演示中的主要渲染步骤(及其顺序)与您的应用进行比较。

当我绝望时,我所做的是,我开始使用工作代码并开始通过和平改变它,直到它与非工作相同或实际上在某个时候它将停止工作,所以你会知道你是什么最后改变了..