问题:在碰撞机制中获取飞机和炮弹的矩形时出现错误。
情况:就是"getRect()"显示该方法没有定义于shell和plane中,多次比较了代码,并尝试复制课件这部分的源码,也未能解决。
package cn.sxt.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 飞机游戏的窗口
* @author 纪光
*
*/
public class MyGameFrame extends Frame {
Image planeImg = GameUtil.getImage("Images/plane.png");
Image bg = GameUtil.getImage("Images/bg.jpg");
//采用面向对象的形式将飞机进行封装
Plane plane = new Plane(planeImg,250,250);
Shell[] shells = new Shell[20];
public void paint(Graphics g){
g.drawImage(bg,0,0,null);
plane.drawSelf(g); //画飞机
for(int i= 0;i<shells.length;i++){
shells[i].draw(g);
//飞机和炮弹的碰撞检测
boolean peng = shells[i].getRect().intersects(plane.getRect());
if(peng) {
plane.live = false;
}
}
}
//帮助我们反复重画窗口
class PaintThread extends Thread {
@Override
public void run() {
while(true){
// System.out.println("窗口画一次!");
repaint(); //重画
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//定义键盘监听的内部类
class KeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e) {
System.out.println("按下:"+e.getKeyCode());
plane.addDirection(e);
}
public void keyReleased(KeyEvent e) {
System.out.println("松开:"+e.getKeyCode());
plane.minusDirection(e);
}
}
/**
* 初始化窗口
*/
public void launchFrame(){
this.setTitle("尚学堂学员_纪光的作品!");
this.setVisible(true);
this.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
this.setLocation(200,200);
/**
* 将窗口关闭,写一个内部类
*/
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
} );
new PaintThread().start();
addKeyListener(new KeyMonitor());
//初始化20个炮弹
for(int i= 0;i<shells.length;i++){
shells[i] = new Shell();
}
}
public static void main(String[] args){
MyGameFrame f = new MyGameFrame();
f.launchFrame();
}
/**
* 解决闪烁问题
* */
private Image offScreenImage=null;
public void update(Graphics g) { //update前面的u必须小写
System.out.println("判断是否执行双缓冲");
if(offScreenImage==null)
offScreenImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//游戏窗口宽高
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
}
PlaneGame09.rar