package Plane;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import Util.GameUtil;
public class Plane {
double x,y;
Image img;
boolean left,right,up,down;
double speed = 10;
int width ;
int height ;
/**
* Rectangle类,新建一个矩形
* @return
*/
public Rectangle getRect() {
Rectangle rect = new Rectangle((int)x,(int)y,width,height);
return rect;
}
public void draw(Graphics g) {
g.drawImage(img, (int)x, (int)y, null);
move();
}
public Plane(String imgPath , double x, double y) {
super();
this.x = x;
this.y = y;
this.width = img.getWidth(null);
this.height = img.getHeight(null);
this.img = GameUtil.getImage(imgPath);
}
public void move () {
if(left) {
x -= speed;
}
if(right) {
x += speed;
}
if(up) {
y -= speed;
}
if(down) {
y += speed;
}
}
public void addDirection(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
left = true;
break;
case KeyEvent.VK_RIGHT:
right = true;
break;
case KeyEvent.VK_UP:
up = true;
break;
case KeyEvent.VK_DOWN:
down = true;
break;
default:
break;
}
}
public void releaseDirection(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
left = false;
break;
case KeyEvent.VK_RIGHT:
right = false;
break;
case KeyEvent.VK_UP:
up = false;
break;
case KeyEvent.VK_DOWN:
down = false;
break;
default:
break;
}
}
}
package Plane;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import Util.GameUtil;
import Util.MyFrame;
public class PlaneFrame extends MyFrame{
Image bg = GameUtil.getImage("Image/bg.jpg");
Plane plane = new Plane("Image/plane.png", 300, 600);
ArrayList bulletList = new ArrayList();
public void paint(Graphics g) {
g.drawImage(bg, 0, 0, null);
plane.draw(g);
for(int i=0;i<bulletList.size();i++) {
Bullet b = (Bullet) bulletList.get(i); //get()返回此列表中指定位置的元素。
b.draw(g);
//碰撞检测,每次画一个球就检测是否与飞机发生碰撞
boolean impact = b.getRect().intersects(plane.getRect());//比较两个矩形是否相交
if(impact) {
System.out.println("sssssss");
}
}
}
class KeyMonitor extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下"+e.getKeyCode());
plane.addDirection(e);
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("松开"+e.getKeyCode());
plane.releaseDirection(e); //自己的理解,不写这个将方向改为false的方法的话,。。。。写了的话将就代表调用了move的方法
//**不是很懂松开这个建不写方法就有问题
}
};
public void LoadFrame() {
super.LoadFrame();
addKeyListener(new KeyMonitor());
/*addKeyListener
public void addKeyListener(KeyListener l)
for(int i=0;i<60;i++) {
Bullet bll = new Bullet();
bulletList.add(bll);
}
}
public static void main(String[] args) {
new PlaneFrame().LoadFrame();
}
}
错误:file:/G:/develop/java1/SXTPlane/bin/Image/bg.jpg
Exception in thread "main" java.lang.NullPointerException
at Plane.Plane.(Plane.java:35)
at Plane.PlaneFrame.(PlaneFrame.java:14)
at Plane.PlaneFrame.main(PlaneFrame.java:71)
为什么img.getWidth(null);会报出空指针异常,图片是正常加载的,那为什么用对象来获取图片的长和高就报出空指针呢,萌新,不是很懂