package ui;
import javax.swing.*;
public class GameFrame extends JFrame {
public GameFrame() {
setTitle("飞机大战");
setSize(500,700);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
GameFrame frame = new GameFrame();
GamePanel panel = new GamePanel(frame);//方便面板中添加键盘监听器
//报错是因为GamePanel构造器没有添加GameFrame frame
frame.add(panel);
frame.setVisible(true);
}
}
package ui;
import com.sun.org.apache.bcel.internal.generic.NEW;
import javax.swing.;
import java.awt.;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
/**
-
java 游戏面板 JPanel
*/
public class GamePanel extends JPanel{
BufferedImage bg;
Hero hero = new Hero();public GamePanel(GameFrame frame) {
setBackground(Color.cyan);
bg = App.getImg("/img/bg2.jpg");
//使用鼠标监听器的格式(固定格式)
//1:创建鼠标适配器
MouseAdapter adapter = new MouseAdapter(){
//2:确定需要监听的鼠标事件
//鼠标的事件
// 1:mouseMoved() 监听鼠标移动事件
// 2:mousecliked() 监听鼠标单击事件
// 3:mousePressed() 监听鼠标按下去事件
// 4:mouseEntered() 监听鼠标移入游戏界面事件
// 5:mouseExited() 监听鼠标移出游戏界面事件//mouseMoved用法 打出mouseMoved在按alt+回车.再提示里面找 //MouseEvent e 监视鼠标事件 @Override public void mouseMoved(MouseEvent e) { //super.mouseMoved(e);这个可以不用 //当鼠标在游戏界面移动时会触发的方法 // System.out.println("移动");测试用的 //让英雄机的横纵坐标等于鼠标的横纵坐标 int mx = e.getX(); int my = e.getY(); //让英雄机移动到鼠标的位置上,调用英雄机 hero.moveToMouse(mx,my); //刷新界面 否则飞机表面上看不出移动 repaint(); } }; //3:将鼠标适配器加入到监听器中 addMouseListener(adapter); addMouseMotionListener(adapter);//镜像 //使用键盘监听器(固定格式) //1:创建键盘适配器 KeyAdapter kd = new KeyAdapter(){ //2:确定需要监听的键盘事件 //先打keyPressed 再alt+回车 在提示里面找 @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); //当按下键盘的按键时,会触发的方法 //System.out.println("键盘运行了");//测试键盘是否运行 //监听键盘;每一个按键都对应有一个数字 //获取键盘上按键的数字 int keyCode = e.getKeyCode(); System.out.println(keyCode);//可以测试按键按下的反应 //如果按上键 向上移动 if (keyCode==KeyEvent.VK_UP){ //如果按下键 向下移动 }else if (keyCode==KeyEvent.VK_DOWN){ }else if(keyCode==KeyEvent.VK_LEFT){ }else if(keyCode==KeyEvent.VK_RIGHT){ } } }; //3:将键盘适配器加到窗体的键盘监听器中,现在需要在框架中加入frame frame.addKeyListener(kd);//加frame调用
}
/**
扫描二维码关注公众号,回复: 10705594 查看本文章- 专用画图方法
- Graphics g 画笔
- paint方法:先打出paint出来 按alt+回车
- @param g
*/
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(bg,0,0,500,700,null);
g.drawImage(hero.img,hero.x,hero.y,hero.w,hero.h,null);
}
}
package ui;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
/**
- 处理图片的工具类 App
*/
public class App {
public static BufferedImage getImg(String path){
try {
BufferedImage img = ImageIO.read(App.class.getResource(path));
return img;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
package ui;
import java.awt.image.BufferedImage;
public class Hero {
BufferedImage img;
int x;
int y;
int w;
int h;
public Hero() {
img = App.getImg("/img/hero.png");
x = 200;
y = 550;
w = img.getHeight();
h = img.getWidth();
}
//英雄机移动到鼠标位置上的方法
public void moveToMouse(int mx,int my){
x = mx-w/2;
y = my-h/2;
}
}