无法绘制缓冲图像

问题描述 投票:1回答:2

我正在使用这段代码来尝试绘制一张图片。

g.drawImage(Tile.background, (int)spritePositionX, (int)spritePositionY, null);

这里是我的磁贴类的Tile.background。

public class Tile {
public static int size = 40;
public static BufferedImage terrain, background, items, characters;
public Tile(){
    try{
        Tile.background = ImageIO.read(new File("res/bg.png"));
        Tile.terrain = ImageIO.read(new File("res/terrain.png"));
        Tile.items = ImageIO.read(new File("res/items.png"));
        Tile.characters = ImageIO.read(new File("characters/bg.png"));
    }catch(Exception e){
        System.out.println("Error loading images.");
    }
}

}

它给了我这个错误:Graphics类型中的drawImage(Image, float, float, Color)方法不适用于参数(BufferedImage, int, int, null)。

这些是我在g.drawImage所在的类中导入的代码。

import javax.swing.ImageIcon;
import org.lwjgl.input.Mouse;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
import java.awt.Rectangle;
java image bufferedimage slick2d
2个回答
3
投票

你试图使用Slicks实现的Graphics对象,而这个对象没有你提供的参数的方法。反正Slick已经死了。要么换成LIBGDX,要么就用Java的二维API。


1
投票

我怀疑你是想使用下面的方法。

boolean Graphics.drawImage(Image img, int x, int y, ImageObserver observer)

最后一个参数必须是一个实现ImageObserver接口的对象,而 "null "不是。

解决这个问题的一个简单方法是修改你的Tile类来实现ImageObserver(通过添加一个具有以下签名的方法)。

boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)

该方法可以简单地返回true.

然后修改你的drawImage调用,将null参数改为 "this"(假设该调用在你的Tile类中)。如果它不在你的Tile类中,那么将null参数改为Tile对象。

© www.soinside.com 2019 - 2024. All rights reserved.