package com.xiucai;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 绘制面板,游戏的所有组件都用这个面板来华
*/
public class SnackPanal extends JPanel {
//游戏中所有事件都用这个画笔
//定义蛇的数据长度
int length;//蛇的长度
int[] snakeX = new int[600];
int[] snakeY = new int[500];
String fx;
boolean isStrat ;
//初始化方法
public void init() {
length = 3;
//初始的三个区域块的位置
snakeX[0] =100;snakeY[0] =100;//脑袋的坐标
snakeX[1] =75;snakeY[1] =100;//第一个身体的坐标
snakeX[2] =50;snakeY[2] =100;//第二个身体坐标
fx = "R";//初始方向向右
}
@Override
public void paint(Graphics g) {
super.paint(g);
this.setBackground(Color.white);
//头部的广告栏
new Data();
Data.Iurl_head.paintIcon(this,g,25,11);
g.setColor(Color.BLUE);
g.fillRect(25,75,850,600);
if (fx.equals("R") ) {
Data.Iurl_right.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("U") ) {
Data.Iurl_up.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("D") ) {
Data.Iurl_down.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("L") ) {
Data.Iurl_left.paintIcon(this,g,snakeX[0],snakeY[0]);
}
for (int l = 1; l < length; l++) {
Data.Iurl_body.paintIcon(this,g,snakeX[l],snakeY[l]);
}
if (isStrat == false) {
//设置字体
g.setColor(Color.RED);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("按压空格开始游戏",300,300);
}
//把小蛇画上去
}
//构造函数
public SnackPanal(JFrameDemo jFrameDemo) {
init();
System.out.println("进行了这一步");
//获取键盘焦点事件,可以获取焦点
this.setFocusable(true);
System.out.println("进行了这一步");
//匿名内部类写键盘按下事件
jFrameDemo.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("进行了这一步");
super.keyPressed(e);
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
isStrat = !isStrat;
//重新画
repaint();
System.out.println(isStrat);
}
}}); //获得键盘监听事件
}
}
//键盘监听器
上边的代码是一个画板 主窗口在下边的代码中建立,在这里我建立了一个对象,使用键盘监听事件,当我把这个对象替换成this的时候,我再去进行键盘监听不好使,由此我产生了个疑问,键盘监听是针对窗口的 不针对画布的吗