繁体   English   中英

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

[英]repaint() method in Java will not repaint my Rectangle after translation

我正在制作一个游戏,其中我必须在n x 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; 

}

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

与其设计整个动画,不如设计一个循环,而是每15-30毫秒调用一次更新动画的方法,并相应地更新矩形的位置。 对于平滑的图形,更好的方法是绘制到图像缓冲区,然后使用实际的绘制方法将该缓冲区绘制到屏幕上(双重缓冲)。

Java3D具有内置的动画,因此值得一看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM