您的位置:首页 > 编程语言 > Java开发

JAVA游戏编程学习笔记(二)

2015-11-03 00:00 465 查看
接上篇笔记,前一节我们在Java窗口中画出了图形,这次我们让它动起来。

在场景里的元素有几个属性:比如坐标x y,大小width height。

g.fillRect(150, 150, 100, 100); 当我们画图形的时候,改变他的参数属性值,这个图形的大小及位置就会发生改变,动画包括:元素本身的变化,及位置的变化。若我们把方法里的参数改成变量,然后在不停的重新绘图,就会产生动画了。

我们逐一来实现:

1.重新绘制游戏窗口

这个Java提供重绘窗口的方法:

public void repaint()


重绘此组件。
如果此组件是轻量级组件,则此方法会尽快调用此组件的
paint
方法。否则此方法会尽快调用此组件的
update
方法。

使用后会重新使用paint方法来重新绘制窗口。

2.动画是一个连续的动作,而且很快,所以我们需要一个循环的操作,比如:

while(true){
/**
代码
*/
}

我们在循环中改变动画的元素的尺寸坐标,就会产生动画了!

当然要加入一个动画的时差,每个动画片子之间需要有一个时间间隔,不然的话......

Thread.sleep(30);整好满足我们的需求,sleep是一个线程休眠,短短的休眠时间正好满足动画的需求。

我们来试试吧:

继续使用上节的代码,不过我们在class里加入了动画元素的属性:x,y,width,height;

添加一个做动画的方法,在这个方法里,我们初始化了元素的属性,while中进行动画的演变,及条件判断,代码如下:

/**
* 动画绘制方法。
*/
public void draw() {
x = 50;
y = 50;
width = 100;
height = 100;
//动画变化转折点
boolean isW = true;
boolean isH = true;
//不停的循环动画
while (true) {
//方形一直下落,知道屏幕底部,就回到顶部重新下落。
if (y < this.getHeight()) {
y++;
} else {
y = 0;
}
//缩小方形
if (width > 1 && isW) {
width--;
} else {
isW = false;
}

if (height > 1 && isW) {
height--;
} else {
isH = false;
}

//放大方形
if (width < 100 && !isW) {
width++;
} else {
isW = true;
}

if (height < 100 && !isW) {
height++;
} else {
isH = true;
}

try {
Thread.sleep(30);
} catch (InterruptedException ex) {
System.out.println(ex);
}
repaint();//重绘窗口
}
}

paint()里的绘制图形的方法参数也要修改一下:

@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), this.getHeight());//设置背景色。
g.setColor(Color.red);//设置画笔的颜色。
g.fillRect(x, y, width, height);//画方形,使用属性变量

}

最后记得在窗口初始化的init()里加上draw()方法,这样窗口显示的时候才会开始动画,我们来运行试试:



这个动画截屏有些帧速过大了,所以大家自己跑一下试试。

附源码:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

/**
* JAVA中的游戏窗口
*
* 让图形动起来。
*
* @author J_sky
*/
public class GameTest02 extends JFrame {

int x, y, width, height;

/**
* 空构造器
*/
GameTest02() {
}

/**
* 游戏窗口的初始化。
*/
void init() {

setBounds(100, 100, 400, 300);//设置窗口的大小及位置。
setTitle("GameTest 窗口!");//设置窗口标题
setVisible(true);//显示窗口
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口退出!
draw();
}

@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), this.getHeight());//设置背景色。
g.setColor(Color.red);//设置画笔的颜色。
g.fillRect(x, y, width, height);//画方形//画方形,使用属性变量

}

/**
* 动画绘制方法。
*/
public void draw() {
x = 50;
y = 50;
width = 100;
height = 100;
//动画变化转折点
boolean isW = true;
boolean isH = true;
//不停的循环动画
while (true) {
//方形一直下落,知道屏幕底部,就回到顶部重新下落。
if (y < this.getHeight()) {
y++;
} else {
y = 0;
}
//缩小方形
if (width > 1 && isW) {
width--;
} else {
isW = false;
}

if (height > 1 && isW) {
height--;
} else {
isH = false;
}

//放大方形
if (width < 100 && !isW) {
width++;
} else {
isW = true;
}

if (height < 100 && !isW) {
height++;
} else {
isH = true;
}

try {
Thread.sleep(30);
} catch (InterruptedException ex) {
System.out.println(ex);
}
repaint();//重绘窗口
}
}

public static void main(String[] args) {
new GameTest02().init();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java game