在做一个类似俄罗斯方块的游戏,同颜色的方块消去,本来想用标记消去部分,显示另外颜色来突出消去的部分后再消去方块,但发现调用repaint()无效
下面是代码
这个actionListener 属于一个timerpublic void actionPerformed(ActionEvent e) {
if(!currentBar.canDown(matrix)){
while(true){
int newScore=matrix.checkMatrix();//方块颜色数据存储与matrix,checkMatrix将一个二维数组中能消去的部分标记成特殊的颜色,并返回获得的分数
score+=newScore; if(score>=MAX_SOCRE) levelUp();
//!!!本来此时应显示按照已标记了消去部分的matrix 输出的图像,但实际未被调用!!
repaint(); try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
matrix.adjustMatrix();//将标记部分消去,接着显示,表现出方块落下的效果
repaint();
if(newScore==0)
break;
}
if(matrix.isGameover())
failedGame();
productNewBar();
matrix.setValue(currentBar);
}
else{
matrix.clearBar(currentBar);
currentBar.MOVEDOWN();
matrix.setValue(currentBar);
repaint();
}
}
下面是代码
这个actionListener 属于一个timerpublic void actionPerformed(ActionEvent e) {
if(!currentBar.canDown(matrix)){
while(true){
int newScore=matrix.checkMatrix();//方块颜色数据存储与matrix,checkMatrix将一个二维数组中能消去的部分标记成特殊的颜色,并返回获得的分数
score+=newScore; if(score>=MAX_SOCRE) levelUp();
//!!!本来此时应显示按照已标记了消去部分的matrix 输出的图像,但实际未被调用!!
repaint(); try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
matrix.adjustMatrix();//将标记部分消去,接着显示,表现出方块落下的效果
repaint();
if(newScore==0)
break;
}
if(matrix.isGameover())
failedGame();
productNewBar();
matrix.setValue(currentBar);
}
else{
matrix.clearBar(currentBar);
currentBar.MOVEDOWN();
matrix.setValue(currentBar);
repaint();
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
repaint;//第一次显示
}
});
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
repaint;//第二次显示
}
});
自己没试过。觉得应该是有个先后过程的。
如果还不行,就用其他更新方法试试,如validate(),revalidate()等。