gpt4 book ai didi

Java Sprite 动画 - 似乎无法让我的 Sprite 正确重绘

转载 作者:行者123 更新时间:2023-12-01 09:54:24 24 4
gpt4 key购买 nike

我一直在尝试使用 Java 制作一些 Sprite 动画并重绘它,但是我似乎无法让我的 Sprite 在 Canvas 上正确重绘。最初的问题是,当我重新绘制 Canvas 时,先前的帧仍然存在于 Canvas 的背景中,因此为了解决这个问题,我添加了对 .clearRect(); 的调用;然而,虽然添加对该函数的调用确实解决了该问题,但它导致我开始疯狂地丢失帧。我已经搜索并尝试了一些方法,但可以找到解决方案,并且据我所知,.clearRect() 有时会在 .drawImage() 之后执行。我的 Canvas 代码如下:

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();

}





}

注意:我正在使用透明背景,并希望保持其透明。

最佳答案

At first the Problem was that the Previous frames were still there in the back ground of the Canvas when I re-drew it so in order to fix that I added a call to .clearRect();

不要使用clearRect()。相反,您应该使用 fillRect(...) 来绘制组件的背景颜色。

以下内容来自clearRect()方法的API:

从 Java 1.1 开始,屏幕外图像的背景颜色可能取决于系统。应用程序应使用 setColor,然后使用 fillRect,以确保将屏幕外图像清除为特定颜色。

但是,您甚至不需要这样做。当您重写绘画方法时,您需要调用 super.thePaintingMethod(...)。在这种情况下,您尝试重写 Paint() 方法,因此第一条语句应该是:

super.paint(g);

然后组件的默认绘制代码将为您绘制背景。

此外,这不是 Swing 绘画代码。这是 AWT 代码。您确实应该正确标记您的问题。我们不知道您是否真的尝试使用 Swing 技术进行绘画,或者您是否找到了旧的 AWT 绘画代码并假设它在 Swing 中是相同的。

I'm working with a transparent background

嗯...你为什么要尝试使用 AWT?你还没有限定你的问题。由于您尚未删除“Swing”标签,因此我假设您正在使用 Swing。

使用 Swing 代码将是:

JLabel sprite = new JLabel( new ImageIon(...) );

就是这样。一行代码。不需要自定义类。

要更改图像,您只需使用:

sprite.setIcon( new ImageIcon(...) );

关于Java Sprite 动画 - 似乎无法让我的 Sprite 正确重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com