动画技术
自由降落动画
了解了一些基本概念后,下面我们就开始我们的实质性的工作。我们设计一个球从屏幕顶上降落到屏幕下面,程序实现比较简单,但是这是游戏动画中不可少的一部分。在开始之前我们来看看我们的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进行操作完成的。
当我们应用程序的逻辑要对系统界面进行更新时,调用 repaint() 方法来通知AWT线程进行刷新操作。repaint() 方法实际会让 AWT线程去调用另外一个方法,update。update方法在默认情况下会做两件事,一是清除当前区域内容,二是调用其 paint()方法完成实际绘制工作。paint、repaint、update 三个方法关系如图所示:
但是如何让我们的圆运动呢?这里我们利用函数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游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程
游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java游戏编程java
JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门
Java游戏编程(游戏开发与编程序列).rar Java游戏编程(游戏开发与编程序列).rar
这其实是我的Java游戏编程学习笔记,现在正在学习Java游戏编程,但从网上找到的学习文章都不太满意,所以我在一边学习一边整理,想尝试着整理出一篇较为完整实用的学习材料。我现在学的是基于窗口界面的应用程序的...
《Java 2游戏编程》([美]Thomas Petchel著 晏利斌,孙淑敏,邵荣翻译).pdf
Java游戏编程原理与实践教程加随书源代码,Java游戏编程原理与实践教程PDF和源代码一起
Java游戏编程读书笔记,Java游戏编程读书笔记
java游戏编程原理与实践教程pdf+源代码 陈锐、夏敏捷、葛丽萍主编
JAVA游戏编程. 全部课程资料
想学JAVA游戏编程吗?快来了解下吧!这个资源是Java初学者的极品教程,讲的简单透彻。
java游戏编程光盘源代码!~
JAVA游戏编程源代码
描写关于java 的游戏编程方面的常见知识,为java游戏开发者入门提供很好的领路文档!
Java2游戏编程源码 第四章 很好的学习Java和简单游戏编程的书籍
Java游戏编程开发教程
在百科里搜索“Java游戏编程” (http://baike.baidu.com/view/647813.htm),就能发现一部好书——《Java游戏编程》,是深入学习java可望而不可求(难买)的好书
Java游戏编程.....
Java2游戏编程01,02,03已上传 共9个 文件太大分割了