我遇到的问题是我的渲染循环。我的应用程序是一系列“平铺”对象,每个对象都有一个 x 和 y 坐标和图像。当程序启动时,它会在屏幕上创建一个 10x10 的这些图块网格。但是,并非所有的方块都可以同时看到,因此您可以使用箭头键在它们周围平移。当按下该键时,它使用 for 循环循环遍历所有当前渲染的图块(存储在 ArrayList 中)并将它们全部移动 16 个以适当的方向。问题是一些瓷砖闪烁。我可以看到,当滚动时,屏幕的一半没有及时移动以在正确的位置进行渲染,从而在与另一半图块之间形成黑色间隙。如何确保在渲染之前移动所有图块?
我的核心课程中的渲染功能
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;
}
提前致谢!