【发布时间】:2016-09-18 10:25:39
【问题描述】:
我一直在尝试使用 Java 制作一些精灵动画并重新绘制它,但是我似乎无法让我的精灵在 Canvas 上正确地重新绘制。起初的问题是,当我重新绘制它时,以前的帧仍然存在于 Canvas 的背景中,因此为了解决这个问题,我添加了对 .clearRect(); 的调用;然而,虽然添加对该函数的调用确实解决了这个问题,但它导致我开始疯狂地丢失帧。我已经搜索并尝试了一些东西,但可以找到一个解决方案,并且尽可能接近 .clearRect() 有时会在 .drawImage() 之后执行。我的画布的代码与 Fallows 一样:
package rpg;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class Sprite extends Canvas{
/**
*
*/
private BufferedImage img;
private static final long serialVersionUID = 1L;
public Sprite(int width, int height, BufferedImage img){
this.img = img;
setSize(width, height);
}
@Override
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
}
@Override
public void update(Graphics g) {
paint(g);
}
public void changeSprite(BufferedImage img)
{
this.img = img;
repaint();
}
}
注意:我正在使用透明背景并希望保持透明。
【问题讨论】:
-
使用 Canvas 的唯一原因是利用 BufferStrategy
标签: java swing animation canvas sprite