私が抱えている問題は、レンダー ループにあります。私のアプリケーションは、それぞれが x 座標と y 座標と画像を持つ一連の「Tile」オブジェクトです。プログラムが起動すると、これらのタイルの 10x10 グリッドが画面上に作成されます。ただし、すべての正方形を同時に表示できるわけではないため、矢印キーを使用してそれらの周りをパンできます。キーが押されると、for ループを使用して、現在レンダリングされているすべてのタイル (ArrayList に格納されている) を循環し、それらすべてを適切な方向に 16 シフトします。問題は、一部のタイルがちらつくことです。スクロールすると、画面の半分が適切な場所にレンダリングされるのに間に合わず、タイルの残りの半分との間に黒い隙間ができることがわかります。レンダリングの前にすべてのタイルが確実に移動されるようにするにはどうすればよいですか?
Core クラスの render 関数
public static void render()
{
while(true)
{
Graphics g = buffer.getDrawGraphics();
try
{
g.setColor(Color.black);
g.fillRect(0, 0, 1280, 720);
if(renderQueue != null)
{
for(int i = 0; i<renderQueue.size(); i++)
{
Tile t = renderQueue.get(i);
g.drawImage(t.getImage(), t.getX(), t.getY(), null);
}
}
if(!buffer.contentsLost())
{
buffer.show();
}
}
finally
{
if(g != null)
{
g.dispose();
}
}
}
}
そして、これが Input クラスの動きの更新関数です。
public void keyPressed(KeyEvent ke)
{
int e = ke.getKeyCode();
switch(e)
{
case 38://up
if(scrollY > 0)
{
scrollY -= 16;
for(int i = 0; i<Core.renderQueue.size(); i++)
{
Core.renderQueue.get(i).incrementY(16);
}
}
break;
case 40://down
if(scrollY < 560)
{
scrollY += 16;
for(int i = 0; i<Core.renderQueue.size(); i++)
{
Core.renderQueue.get(i).incrementY(-16);
}
}
break;
case 37://right
if(scrollX < 0)
{
scrollX += 16;
for(int i = 0; i<Core.renderQueue.size(); i++)
{
Core.renderQueue.get(i).incrementX(16);
}
}
break;
case 39://left
if(scrollX > 0)
{
scrollX -= 16;
for(int i = 0; i<Core.renderQueue.size(); i++)
{
Core.renderQueue.get(i).incrementX(-16);
}
}
break;
}
前もって感謝します!