Java:在二维动画中使用基于图像的路径2011-08-31 IBM 在二维(2D)动画中,通常需要按预定义的模式(有时称为 控制路径)在一个 2D 区域内移动对象。这种动画需要解决两个问题:如何指定对象要遵循的控制路径。如何沿着所选的路径移动对象。在本文中我们将为您展示如何用无损图像、Swing 技术和基于 Java 的动画引 擎解决这些问题。我们将首先绘制所需要的动画对象轨道,然后用动画引擎驱动 对象沿着定义的控制路径运动。可以容易创建和处理无损图像(在 下面说明),而且可以根据需要对使用它 们的技术进行细致的调节。我们将利用一个示例动画序列,介绍如何用不同的颜 色集创建复杂的运动序列。我们还将介绍如何处理图像以提取出所需要的控制路 径、将控制路径与背景图像分层、为动画序列创建对象(Swing GUI 组件),并 驱动这些对象沿着定义的控制路径运动以完成动画过程。注:本文假定读者有 Java 一般编程、特别是 Swing GUI 构造的知识。如果 有在 Java 平台中利用 Java 2D 操纵图像的经验则更好。什么是无损?无损图像(lossless image)是永久保留了所有图像像素的图像。这种图像必 须能够存储为或者恢复成与原件完全一样的复制品。可以使用不同的应用程序创始无损图像,包括 Microsoft Paint、Jasc Paint Shop Pro 和一些定制的应用程序。可以将这些图像存储到文件中,也可以只在内 存创建它们。图像必须是无压缩的,或者是使用无损压缩算法如 zip 压缩进行压 缩的。典型的无损图像格式包括 Microsoft 的 Bitmap (BMP) 和 Portable Network Graphics (PNG) 格式。有损压缩算法,比如通常用于 GIF(Graphics Interchange Format)和 JPEG(Joint Photographic Experts Group) 文件的压 缩算法,不适用于本文所描述的动画技术。完全是控制问题控制路径 的最一般化的定义是通过任意 n 维空间时,在特定位置和时间所要 采取的行为。我们将控制路径定义为一个或者多个对象穿过一个 2D 空间时所采 取的路径。通过将对象的位置映射到该位置的行为来表示控制路径。然后程序遍 历所定义的对象、在映射中查找对象在该位置上的行为、并让对象执行所指定的 行动。对所有控制路径—— 除去最简单的—— 在代码中建立这样一个映射都是 耗费时间和容易出错的,因此使用一个绘图程序更合适。控制路径可以是 不随时间变化的(time invariant),在这种情况下是静态 的,也可以是 随时间变化的(time variable),在这种情况下是动态的。如果 无损图像包含在一个图像文件中,那么它就是不随时间变化的,或者说是静态的 。如果无损图像是包含在 RAM 中并直接使用的,那么它就是随时间变化的,或者 说是动态的。在本文中我们讨论的是静态控制路径。使用正确的编辑程序,可以 更容易地生成静态图像,尽管所定义的行为类型也会在某种程度上影响这个过程 。让我们度过一个狂热的夜晚!学习动画的一个好方法是自己动手实践。我们将在本文其余部分使用一个动画 的例子来阐明所讨论的概念。我们的例子是一个动画的火灾逃生序列,我们将生 成控制路径以表示几个人物的逃生路径。我们将使用图 1 中的部分平面图作为背 景图像。可以在 图 6中看到完整的背景图像。图 1. 背景图像的一部分