Java游戏编程初步

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java游戏编程初步

现在流行的游戏似乎都是用C或C++来开发的。在java平台上几乎没有很大型及可玩的流行游戏。由于java是个新生语言,他的许多特性还有待大家的发掘,但是我们不能否认Java 在游戏编程方面的强大性。本文将带领大家一步一步学习编写Java游戏。最终打造属于自己的Java游戏。

在开始之前我们得确认你已经安装了Java JDK,并已经安装了浏览器软件如IE。本章是以Internet为开发对象,一步一步教大家认识Java的Thread、Applets….以及游戏编程要注意的一些方方面面。并在每一小部分附上了相应的源代码以供大家参考,最后我们还会对我们的游戏程序进行指导性的提示。在文章中我们还穿插了很多建设性的问题,让读者参与到我们的开发中来。但是由于本章指在带领大家进入这个门槛,大部分知识并不会很详细说明,有兴趣的读者可查阅相关的资料补充。在开始之前我们还得确认你已经知道类,继承和java语言的一些基本属性了。

基本applet

Applets是一种Web浏览器上的小程序,由于applet对系统而言绝对安全,所以它做的事比aaplication有限,但是对于客户端的程序,applets仍然是个很强大的工具。为了浏览和运行方便,我们就以applet为开发对象。

开发Applets程序,我们得继承Applet类,并覆写必要的函数,下面几个函数控制了Web页面上的applet生成与执行。

所有的applet文件源文件名和java应用程序一样都是.java为扩展名,编译后的执行文件扩展名为.class,由于在applet中已经没有了main()函数,它是和html自动集成,所以我们要执行applet,要在html源文件中放入一特定的标签(tag),才能告诉网页如何装载并执行这个applet,这里有一点要注意,我们执行的网页必须能执行java程序。

普通Html 源码格式

<HTML>

<APPLET CODE="HelloWorld.class" WIDTH=300 HEIGHT=500>

</APPLET>

</HTML

<applet code ="HelloWorld.class" width=300 height=500>这行即applet的执行处。

applet 执行文档为="HelloWorld.class" 告诉网页”applet ”扩展文件为HelloWorld.class

width 和height 告诉浏览器这个显示的applet的大小

有关标签(tag)的说明,大家可在网上找到很多相关的说明文档。

线程

由于apllet,java应用程序的执行都和线程有关。我们来大概了解一下线程的概念。

线程也称为轻型进程(LWP)。每个线程只能在单个进程的作用域内活动、协作和数据交换,并且在计算资源方面非常廉价。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java 编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。

Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从Thread 类导出的新类。程序员必须覆盖Thread 的run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用Thread 的start() 函数,该函数再调用run()。

但是使用Thread类实现线程,增加了程序的类层次,所以一般程序员都由另一个java 线程接口Runnable接口来实现,Runnable接口只有一个函数run(),此函数必须由实现了此接口的类实现。

线程中有几个重要的方法是我们得了解:

Thread.start(): 启动一个线程

Thread.stop(): 停止一个线程

Thread.sleep(time in milliseconds): 暂停线程在一个等待时间内。

动画技术

自由降落动画

了解了一些基本概念后,下面我们就开始我们的实质性的工作。我们设计一个球从屏幕顶上降落到屏幕下面,程序实现比较简单,但是这是游戏动画中不可少的一部分。在开始之前我们来看看我们的applet开始语句。

import java.awt.*;

import java.applet.*;

public class Ball

extends Applet implements Runnable

{

public void init() { }

public void start() { }

public void stop() { }

public void destroy() { }

public void run () { }

public void paint (Graphics g) { }

}

在开始函数中我们要新建程序的主线程,并启动这个线程。一旦做好这些准备工作以后,当applet第一次被显示时,就会创建线程对象的一个实例,并把this对象作为建构方法的参数,之后就可以启动动画了

public void start ()

{

// 定义一个新的线程

Thread th = new Thread (this);

// 启动线程

th.start ();

}

现在我们来看看线程的run方法,它在循环while(),中每隔20毫秒重画动画场景。sleep 这个方法很重要,如果在run循环中没有这部分,圆的重画动作将执行得很快,其他方法将得不到有效执行,也即我们在屏幕上将看不到球的显示。

public void run ()

{

//

while (true)

{

// 重画applet画面

repaint();

try

{

// 暂停线程20毫秒

Thread.sleep (20);

}

catch (InterruptedException ex)

{

}

}

}

我们接着读下去之前,有几个问题需要回答。你也许会问,浏览器调用Java小程序的start和stop方法吗? run 方法是如何被调用的? 情况是这样的,当浏览器启动了一个内部线程时,就相应地启动了applet 的运行。当网页显示时,就启动了applet的start 方法。Start方法创建一个线程对象,并把applet自身传送给线程,以实现run方法。

此时,两个线程在运行:由浏览器启动的初始线程,以及处理动画的线程。快速查看applet的start方法,可以知道它创建了线程,并启动了它。类似地,当网页被隐藏后,applet 的stop方法就调用了线程的stop方法。

注意:在Applets和Threads中的start/stop子程序

在Applet 和Thread 两个类中都有start和stop方法,但它们的功能不同。一旦Applet 显示时,就调用applet的start方法,一旦applet 隐藏时,就调用applet的stop 方法。相反,线程的start方法将调用run方法,线程的stop方法将停止正在执行的线程。

public void paint(Graphics g);

paint() 方法所传入的参数——java.awt.Graphics 对象将是一个经裁剪的相关显示区的图像代表(而不会是整个显示区)。我们对圆球图形元素的绘制就是在通过重写paint()方法,在其中对传入的Graphics 对象g进行操作完成的。

相关文档
最新文档