那么这一节我们就来学习一下,如何运用java程序设计创建移动图形,希望大家能够好好学习这个课程,并且能够在这个基础上进行修改代码。
在上一节的教程中,我们学会了基本绘图方法,基本思路是先创建一个窗体框架(Frame),然后创建一个面版(Panel),在面版中画图,再将面版装入窗体中。上节我们画的是静态的图片,这一节我们主要练习移动图形。
学习目标:1.学会游戏基本框架
2.学会键盘控制代码
一.物体的运动方式。
我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。
1.新建一个项目,假设名称是pp,并在里面新建一个类pp.
在pp类中代码如下:
import java.awt.*;
import java.awt.event.*;
public class pp{
public pp() {
Frame app = new Frame("DrawBall2");
//监视关闭窗体事件
app.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
}
});
app.setLocation(100, 100);
MyPanel drawB = new MyPanel(); //实例化MyPanel对象
app.add(drawB, BorderLayout.CENTER); //在窗体中间显示画版
app.pack();//运行app中的pack方法,动态调整frame的大小,使frame中的组件都可见
app.setVisible(true);
drawB.gameStart (); //运行app中的gameStart方法
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new pp();
// TODO code application logic here
}
}
新建一个类,类名为MyPanel, 代码为:
import java.awt.*;
import java.awt.image.*;
import java.util.*;
/**
*
* @author Administrator
*/
public class MyPanel extends Panel implements Runnable {
private int x; //这里定义变量
private int y;
private int diameter;
private int width;
private int heigth;
private Image im;
private Graphics dbg;
private Thread gamethread;
private static final int FPS=50;
public MyPanel() {
x=50;//下面给变量赋初值
y=50;
diameter=100;
width=600; //窗口的宽度
heigth=500;//窗口的高度
setBackground(Color.pink);//设置画版背景色
setPreferredSize(new Dimension(width, heigth));//设置组件的大小
}
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, heigth);
if (im == null) {
} else {
dbg = im.getGraphics();
}
}
dbg.setColor(Color.pink);//这里要和背景色一致
dbg.fillRect(0, 0, width, heigth);//用底色矩形填充画版,擦去图案
//这里加上画游戏的初始图形
dbg.setColor(Color.blue);
dbg.fillOval(x, y, diameter, diameter); //画出椭圆
}
public void gameUpdate() { //更新游戏逻辑
//这里加上重复的代码
x++; //让小球向右跑
}
public void run() {
long t1,t2,dt,sleepTime;
long period=1000/FPS; //计算每一次循环需要的执行时间,单位毫秒
t1=System.nanoTime(); //保存游戏循环执行前的系统时间,单位纳秒
while(true){
gameUpdate();
gameRender();
gamePaint();
t2= System.nanoTime() ; //游戏循环执行后的系统时间,单位纳秒
dt=(t2-t1)/1000000L; //本次循环实际花费的时间,并转换为毫秒
sleepTime = period - dt;//计算本次循环剩余的时间,单位毫秒
if(sleepTime<=0) //防止sleepTime值为负数
sleepTime=2;
try {
} catch (InterruptedException ex) { }
t1 = System.nanoTime(); //重新获取当前系统时间
}
}
public void gameStart(){
gamethread = new Thread(this);
gamethread.start();
}
}
对于上面的这两个代码只是一个框架,大家可以先运行一下,试一下游戏,然后再在这个基础上进行修改。
小编结语:其实,对于这个代码来说是非常简单的,那么后续我会给大家在这个JAVA的游戏设计的基础上,添加一些有趣的代码,对游戏进行修改,例如说:在图面上,画上两个小球,一个红色小球,起始位置在(50,50),半径80,向右运动等等,感谢大家的支持。
¥498.00
¥299.00
¥29.00
¥399.00