快速业务通道

Java游戏编程初步 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
t()方法完成实际绘制工作。paint、repaint、update 三个方法关系如图所示:

Java游戏编程初步 - 编程入门网

但是如何让我们的圆运动呢?这里我们利用函数Graphics 类的fillOval函数来设置了圆的起始位置x,y。现在我们只要在线程run方法中每单位时间增大y的值,线程将在每一个单位时间内重画圆的位置。每单位时间y值越大,下降的速度就会越快。在屏幕上我们就将看到这个圆球做自由降落运动。 如下代码所示:

while (true) { // 设置动画移动速度 y +=1; } public void paint (Graphics g) { //设置球的颜色 g.setColor (Color.blue); // 从x,y位置处画一个实心的圆 g.fillOval (x , y, 2 * r, 2 * r); }

在这之前我们需要在开始处设置一些变量,定义好x,y的默认位置值。r 在此处是我们画的圆的半径大小。

int x = 100; int y = 20; int r = 10;

我们的自由降落的动画就完了。是不是很简单,如果还有地方不明白,大家可在此处下载完整的代码及应用程序。看看真实的演示效果和代码。下面每一部分我们也将在最后附上相应的源代码及应用程序下载。如果大家有兴趣,可改变y的值,及x的值,你会得到不同的下降效果。

Java游戏编程初步(4)

时间:2011-01-24

双缓冲,消除闪烁

大家可能注意到了上面例子中的我们下降的圆看起来不是很清晰,带着很严重的闪烁。这种现象在写游戏程序中是普遍存在的现象。这是由于我们的repaint()函数导致的结果,由于它在调用paint()函数前会自动清除屏幕,所以在一个毫秒内我们会看到一个空白的屏幕,在快速的变换操作中就出现了闪烁现象。

解决这种闪烁现象有几种方法,下面是两种方法的列举说明,其他的方式大家可以自己尝试。

第一种:我们始终不清除屏幕显示,但是这个方法会带来个附作用,我们下降的圆不在是一个圆了,而是一条直线,因为它的下降过程中没有了断点,保留了所有的圆球的影象。我们只要在Ball.java内加上如下代码update(Graphics g) {paint(g)},你就会看到一条很长的线拉出来。有兴趣的朋友可以试试。

第二种:使用双缓冲机制(Double buffering)

现在大部分的游戏都是采用双缓冲机制来解决屏幕的闪烁现象,我们就以此为例来进行说明,有关缓冲区及相关缓冲机制的概念,大家可参考附录的缓冲说明。

而我们的程序中简单的说就是在显示我们想要的图画之前,把所有的图画先在后台绘制好并存放到相应的图像变量中去。当需要显示时直接复制到前台屏幕就可以了。

具体实现:

1.首先我们用createImage方法新建一后台图像类变量

2.然后使用getGraphics()方法得到当前图像的图形关联

3.在后台处理所有相关的处理,如清除屏幕,后台绘画等等

当完成所有的后台工作后,复制已经绘制好的图像到前台,并覆盖前台的存在图像。这样我们的所有操作都是在后台前行,在屏幕显示新的图像前,这些内容都已经存在于后台了。所以你也将在任何时刻都看不到空屏幕的存在。也即代表闪烁消除了。

下面我们来看看相关的代码说明:

在开始之前我们得先在程序的开始部分声明两个实例变量用来存储后台图画。如下:

private Image bgImage; private Graphics bg;

然后我们利用update()方法来实现双缓冲机制。

Update()方法要实现下面三个步骤:

1.清除屏幕上的组件

2.设置相关联组件的前景色

3.调用paint方法重画屏幕

public void update (Graphics g) { // 初始化buffer if (bgImage == null) { bgImage = createImage (this.getSize().width, this.getSize().height); bg = bgImage.getGraphics (); } // 后台清屏,即设置圆球组件和后台一样的颜色,大小 bg.setColor (getBackground ()); bg.fillRect (0, 0, this.getSize().width, this.getSize().height); // 绘制相应的元素组件 bg.setColor (getForeground()); paint (bg);

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号