使用libgdx渲染游戏时遇到的java问题
我试图用libgdx来表示一些图像。为此,我有矩形和纹理变量。问题是,当我让代码以这种方式运行时,它只绘制了一次图像,然后立即清除。如果我画了这些图像,我希望它们能保留下来
@Override
public void render () {
int x,y;
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
if(matrixBuilt!=true){
for(x=0;x<matrix.length;x++){
for(y=0;y<matrix.length;y++){
System.out.println(matrix[x][y]);
switch(matrix[x][y]){
case 1: batch.draw(numberOne, numberOneR.x, numberOneR.y);
break;
case 2: batch.draw(numberTwo, numberTwoR.x, numberTwoR.y);
break;
case 3: batch.draw(numberThree, numberThreeR.x, numberThreeR.y);
break;
case 4: batch.draw(numberFour, numberFourR.x, numberFourR.y);
break;
case 5: batch.draw(numberFive, numberFiveR.x, numberFiveR.y);
break;
case 6: batch.draw(numberSix, numberSixR.x, numberSixR.y);
break;
case 7: batch.draw(numberSeven, numberSevenR.x, numberSevenR.y);
break;
case 8: batch.draw(numberEight, numberEightR.x, numberEightR.y);
break;
case 9: batch.draw(numberNine, numberNineR.x, numberNineR.y);
break;
case 10: batch.draw(emptySquare, emptySquareR.x, emptySquareR.y);
break;
}
}
}
matrixBuilt=true;
}
batch.end();
}
尽管我在批处理之前做了batch.draw(emptySquare, emptySquareR.x, emptySquareR.y);
。end();没关系,但我不想那样。。。。这将使代码非常扩展。。。有什么线索吗?谢谢
编辑:
所以我把这些放在create方法上:
Gdx.graphics.setContinuousRendering(false);
Gdx.graphics.requestRendering();
如果我没有用鼠标穿过屏幕,渲染只会发生一次,因为如果我这样做,它会重新绘制,我不希望发生这种情况,我希望图像是静态的,下面是我的代码:
public void render () {
int x,y,squareCounter=0;
batch.begin();
for(x=0;x<matrix.length;x++){
for(y=0;y<matrix.length;y++){
System.out.println(matrix[x][y]);
switch(matrix[x][y]){
case 1:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberOneR.x=startingX;numberOneR.y=startingY; }
batch.draw(numberOne, numberOneR.x, numberOneR.y);
squareCounter++;
startingX+=40;
numberOneR.x=startingX;
break;
case 2:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberTwoR.x=startingX;numberTwoR.y=startingY; }
batch.draw(numberTwo, numberTwoR.x, numberTwoR.y);
squareCounter++;
startingX+=40;
numberTwoR.x=startingX;
break;
case 3:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberThreeR.x=startingX;numberThreeR.y=startingY; }
batch.draw(numberThree, numberThreeR.x, numberThreeR.y);
squareCounter++;
startingX+=40;
numberThreeR.x=startingX;
break;
case 4:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberFourR.x=startingX;numberFourR.y=startingY; }
batch.draw(numberFour, numberFourR.x, numberFourR.y);
squareCounter++;
startingX+=40;
numberFourR.x=startingX;
break;
case 5:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberFiveR.x=startingX;numberFiveR.y=startingY; }
batch.draw(numberFive, numberFiveR.x, numberFiveR.y);
squareCounter++;
startingX+=40;
numberFiveR.x=startingX;
break;
case 6:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberSixR.x=startingX;numberSixR.y=startingY; }
batch.draw(numberSix, numberSixR.x, numberSixR.y);
squareCounter++;
startingX+=40;
numberSixR.x=startingX;
break;
case 7:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberSevenR.x=startingX;numberSevenR.y=startingY; }
batch.draw(numberSeven, numberSevenR.x, numberSevenR.y);
squareCounter++;
startingX+=40;
numberSevenR.x=startingX;
break;
case 8:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberEightR.x=startingX;numberEightR.y=startingY; }
batch.draw(numberEight, numberEightR.x, numberEightR.y);
squareCounter++;
startingX+=40;
numberEightR.x=startingX;
break;
case 9:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberNineR.x=startingX;numberNineR.y=startingY; }
batch.draw(numberNine, numberNineR.x, numberNineR.y);
squareCounter++;
startingX+=40;
numberNineR.x=startingX;
break;
case 10:
if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;emptySquareR.x=startingX;emptySquareR.y=startingY; }
batch.draw(emptySquare, emptySquareR.x, emptySquareR.y);
squareCounter++;
startingX+=40;
emptySquareR.x=startingX;
break;
}
}
}
batch.end();
}
# 1 楼答案
这里的问题是,在
render
方法中,调用:它首先设置
ClearColor
,然后用它清除屏幕,例如将整个屏幕设置为该颜色可能的解决办法是:
if(!matrixBuilt)
条件就足够了李>FrameBuffer
上一次,然后用这个FrameBuffer
把这些东西画到屏幕上,如@Tenfour04所述李>render()
方法。相反,您需要调用Gdx.graphics.requestRendering();
来调用render()
李>我想,在这种情况下,最后一种解决方案是最好的,因为显示的内容或多或少是静态的,非连续渲染可以节省电池
您可以在用户输入等事件上调用
Gdx.graphics.requestRendering();
对于其他在屏幕上移动更多东西的游戏(如平台等),第二种方法在大多数情况下是最好的