Java中的repaint()方法在翻译后不会重绘我的Rectangle

时间:2012-03-12 04:49:34

标签: java components repaint

我制作一个游戏,我必须在n×n网格上移动小方块,并且它们必须平滑过渡。这是我制作的交换方法应该能够在屏幕上绘制我的转换,但由于某种原因它没有这样做。我在一个简单的项目中尝试了一个更简单的代码版本,来回移动一个Square,它就像一个魅力,所以我真的不确定为什么这不是重新绘制。这只是我的一些代码,所以如果对我的代码中的任何其他内容有疑问,请不要问。

提前致谢。 (:

public void swap( int y,  int x ) {
    long time = System.currentTimeMillis();
    int counter = 0;
    swapNum = tiles[y][x];
    rect = (Rectangle) rectangles[y][x].clone();

    while(counter < rect.height) {
        if(System.currentTimeMillis() - time > 5) {
        rect.translate(this.y-y, this.x-x);
        time = System.currentTimeMillis();
        counter++;
        repaint();

        }

    }
    swapNum = 0;
    rect = new Rectangle();


    int temporary = tiles[this.y][this.x];
    tiles[this.y][this.x] = tiles[y][x];
    tiles[y][x] = temporary;
    this.x = x;
    this.y = y; 

}

1 个答案:

答案 0 :(得分:1)

如果此代码块在用于绘制到屏幕的事件/调度线程上运行,则会阻止屏幕更新。

不要在一个循环中执行整个动画,而是考虑设计一个更新方法来执行动画,每15-30毫秒调用一次,并相应地更新矩形的位置。对于平滑图形来说,更好的是绘制到图像缓冲区,然后将实际的绘制方法绘制到屏幕缓冲区(双缓冲)。

Java3D内置了动画,所以值得一看。