如何运用java程序设计进行键盘控制游戏
下面我们学习使用键盘来控制图形的运动。
在上一节的教程中,如何运用java程序设计认识了碰撞检测,那么现在我们在深入去制作,那么就是对于键盘控制游戏(相当于按键一样)。
在游戏中常常需要用键盘进行对游戏的控制,例如超级玛丽,贪吃蛇等等,这些游戏都需要我们也能够键盘去控制,那么我们现在学习一下,如何用JAVA程序设计键盘控制游戏。
1.新建一个java项目Ball2:
import java.awt.*;
import java.awt.image.*;
import java.util.*;
public class MyPanel extends Panel implements Runnable {
private int x;
private int y;
private int dx,dy;
private int diameter;
private int width;
private int height;
private Image im;
private Graphics dbg;
public MyPanel() {
x=50;
y=50;
dx=10;dy=10;
diameter=50;
width=300;
height=200;
setPreferredSize(new Dimension(width, height));//设置组件的大小
}
public void gamePaint() { //前屏绘制
Graphics g;
try {
g = this.getGraphics(); //获取当前屏幕的Graphics对象
if (g != null && im != null) {
g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来
}
g.dispose();//释放当前屏幕的Graphics对象
} catch (Exception e) {
}
}
public void gameRender() { //离屏绘制
if (im == null) {
im = createImage(width, height);
if (im == null) {
System.out.println("im is null");
} else {
dbg = im.getGraphics();
}
}
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案
dbg.setColor(Color.blue);
dbg.fillOval(x, y, diameter, diameter); //画出椭圆
}
public void gameUpdate() { //更新游戏逻辑
x=x+dx;
y=y+dy;
if((x<0)||(x>width-diameter)){
dx=-dx;
}
if((y<0)||(y>height-diameter)){
dy=-dy;
}
}
public void run() {
while(true){
gameUpdate();
gameRender();
gamePaint();
//以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快
try {
Thread.sleep(200);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间
catch (InterruptedException e) {
e.printStackTrace();}
}
}
}
2.然后新建一个MyPanel类,代码如下:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.*;
import java.util.*;
public class MyPanel extends Panel implements Runnable, KeyListener {
private int x;
private int y;
private int dx,dy,direction;
private int diameter;
private int width;
private int height;
private Image im;
private Graphics dbg;
private Thread gamethread;
public MyPanel() {
x=50;
y=50;
dx=10;
dy=10;
diameter=50;
width=500;
height=500;
setPreferredSize(new Dimension(width, height));//设置组件的大小
this.setFocusable(true);//设置焦点
this.requestFocus();//获取焦点
this.addKeyListener(this);//添加键盘监听事件
}
public void gamePaint() { //前屏绘制
Graphics g;
try {
g = this.getGraphics(); //获取当前屏幕的Graphics对象
if (g != null && im != null) {
g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来
}
g.dispose();//释放当前屏幕的Graphics对象
} catch (Exception e) {
}
}
public void gameRender() { //离屏绘制
if (im == null) {
im = createImage(width, height);
if (im == null) {
System.out.println("im is null");
} else {
dbg = im.getGraphics();
}
}
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案
dbg.setColor(Color.blue);
dbg.fillOval(x, y, diameter, diameter); //画出椭圆
}
public void gameUpdate() { //更新游戏逻辑
switch (direction){
case 1:
y=y+dy;//向下移
direction=0; //移动情况清零
break;
case 2:
y=y-dy; //向上移
direction=0;//移动情况清零
break;
case 3:
x=x+dx;//向右移
direction=0;//移动情况清零
break;
case 4:
x=x-dx;//向左移
direction=0;//移动情况清零
break;
}
}
public void keyPressed(KeyEvent e){
int keycode = e.getKeyCode();
if (keycode ==KeyEvent.VK_DOWN)
direction=1; //用1代表下
if (keycode ==KeyEvent.VK_UP)
direction=2;//用2代表上
if (keycode == KeyEvent.VK_RIGHT)
direction=3;//用3代表右
if (keycode == KeyEvent.VK_LEFT)
direction=4;//用4代表左
}
public void keyTyped(KeyEvent e){
}
public void keyReleased(KeyEvent e){
}
public void run() {
while(true){
gameUpdate();
gameRender();
gamePaint();
//以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快
try {
Thread.sleep(10);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间
catch (InterruptedException e) {
e.printStackTrace();}
}
}
public void gameStart(){
gamethread = new Thread(this);
gamethread.start();
}
}
上面代码可以当成新的游戏框架,它加上了键盘的监控事件。
五.练习:
根据上面的题目,做出一个动画,显示文件夹中的pic1.gif图像,用鼠标的上下左右能控制它的移动,而且移动到窗口边缘,就不能再继续移动。
提示:画图代码:
Imageimage=getToolkit().getImage("pic1.gif");//先载入图片
dbg.drawImage(image,x,y,100,130,this);//在x,y坐标处显示宽高为130的图像。
小编结语:其实对于这一节教程,运用JAVA程序游戏设计进行键盘控制游戏,设计起来不难,我们可以用一个游戏框架就可以了,那么难的是,你如何去修改你想要的类型。
¥29.00
¥498.00
¥299.00
¥399.00