【发布时间】:2014-01-09 01:28:01
【问题描述】:
我正在制作一个游戏,并且有一个课程可以打印屏幕上的所有内容。我在这一行收到一个错误:g.drawImage(chImage, imageP.x*scale, imageP.y*scale, null); 是因为我在它的末尾有 null 吗?我已经查看了这个错误并试图弄清楚它,我知道该行中有一些东西是空的,但我无法弄清楚什么是空的或如何解决它。如果您需要我发布其他课程,我可以。到目前为止,从我的谷歌搜索来看,我认为这可能与我的变量的初始化方式有关。
package Game;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.JPanel;
public class Printer extends JPanel{
private Map map;
private Character ch;
private int scale;
private Point imageP;
private BufferedImage chImage;
private ArrayList<Rectangle> part;
public Printer(int scale1){
scale = scale1;
map = new Map();
ch = new Character();
imageP = ch.getPoint();
chImage = ch.getImage();
part = map.setPart();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(chImage, imageP.x*scale, imageP.y*scale, null);
for(int i=0; i<part.size(); i++){
Rectangle temp = new Rectangle(part.get(i));
g.drawRect(temp.x, temp.y, temp.width, temp.height);
g.fillRect(temp.x, temp.y, temp.width, temp.height);
}
}
}
package Game;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
//Creates a image for a character and allows him to walk around the screen
public class Character extends JPanel{
private BufferedImage image;
private Point imageP;
private int speed;
private int scale;
private int width;
private int height;
public Character(){
}
public Character(int x, int y, int scale1, int w, int h){
super();
try {
image = ImageIO.read(new File("F:\\Programming\\Final Project\\Top_down\\narwhal.png"));
} catch (IOException ex) {
}
scale = scale1;
imageP = new Point(x,y);
speed = 10;
width = w;
height = h;
addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent evt){
moveIt(evt);
}
});
}
public void moveIt(KeyEvent evt){
switch(evt.getKeyCode()){
case KeyEvent.VK_S:
if(imageP.y <= height-33)
imageP.y += 1*speed;
break;
case KeyEvent.VK_W:
if(imageP.y >=0+5)
imageP.y -= 1*speed;
break;
case KeyEvent.VK_A:
if(imageP.x >=0+5)
imageP.x -= 1*speed;
break;
case KeyEvent.VK_D:
if(imageP.x <= width-30)
imageP.x += 1*speed;
break;
}
repaint();
}
public Point getPoint(){
//g.drawImage(image, imageP.x*scale, imageP.y*scale, null); IGNORE THIS
return this.imageP;
}
public BufferedImage getImage(){
return this.image;
}
}
【问题讨论】:
-
你的方法
ch.setPoint();和ch.setImage();,应该是get吗? -
@JavaDevil 是的,他们应该得到,对不起,我有时对他们感到困惑。他们只是获取角色的点并获取角色的图像
-
好的,你可以发布你的角色类吗?
-
是的,正如我所怀疑的那样。
Character的默认构造函数没有设置任何 Character 字段。在您的打印机或默认构造函数中调用另一个构造函数 -
@JavaDevil 这可以让内容完美显示而没有错误谢谢,但唯一的问题是它不会让我再移动我的图像了。我刚刚将 this(50,50,3,300,169) 添加到我的角色构造函数中。那么按下按钮时不应该使用 keyListener 并调用 moveIt 方法吗?