|
介绍 最近在做一个游戏项目时,我面临富于挑战性的建造一个面向对象的位图文字显示和动画系统的要求。我开始设计这个动画系统时,我意识到一个测试脚本极好方法,就是用我的脚本再创造全球影迷立刻可认识的视觉效果的动画系统:看上去象“骇客帝国”电影中的“熔化文字”的效果。
此主题相关图片如下:
 《骇客帝国》(The Matrix)电影镜头
“骇客帝国”风格的动画 这个熔化文字动画有几个关键的特点让它看上去与众不同。显而易见,第一个特点是出现沿着屏幕垂直移动的文字。这不是通过文字自身移动取得的,而是按顺序一个接着一个使每个字符显示出来。基本上和打字动画效果一样。其次是字符随机循环穿插出现日文汉字。虽然应当指出的是所有字符并不是周期性出现的,有些是静止的。第三是当字符串在屏幕上开始向下移动时,字符发出白色的辉光。最后一个特点是完成的效果看上去字符串是随机的长度并且动画速度也是随机的。
很明显director的文本和域文本演员没有完成这个任务的能力。同样很显然的是这个动画上有许许多多字符串密集随机出现,编辑非常困难。并且会负面影响文件存档的尺寸。为总谱中的每个字符使用脚本将是一个可能的解决办法,但又会要求有非常多的脚本,并且要在顶上增加混合效果,这也许会让动画变得很缓慢。 幸好有一个快速的相关解决方案:这是Image Lingo的工作。
Image Lingo和位图文字 Image Lingo解决方案的核心是copyPixels函数, 可以用这个函数从位图字体图像中拷贝字符到显示图像中,copyPixels也有几个相关的函数,可以用这些函数在显示文字时变化色彩、使用Alpha效果。首先需要生成包含动画所需字符集的图像。
此主题相关图片如下:

这个位图文字图像是使用Photoshop创建的,用一种日文汉字字体把所有字符以10*14像素的矩形整齐的排在一起,重要的是要注意到在这幅图像内的象素不是复制到显示图象的实际的象素。这个灰度层次的图像将被当做mask应用到一个单独颜色的图像,.实际上这些像素在彩色图像中被拷贝到显示的图像中去。
下面是使用copyPixels函数的语法: displayImage.copyPixels (colorImage, targetRect, sourceRect, [#maskImage: maskImage, #blendLevel: blendLevel]) displayImage是写源图像的对象。 colorImage是填充RGB颜色文字的image对象。 targetRect是写显示图象的区域。 sourceRect是拷贝位图字体的区域。 maskImage是作为mask的位图字体的image对象。 blendLevel是透明度的级别。
面向对象的分析 现在有了显示位图文字的方法,下一个任务是设计动画系统。面向对象分析该问题发现位图文字动画首先可以分成三个基本对象:Char Display、String Display和Panel Display。
此主题相关图片如下:

Char Display对象包含执行copyPixels函数把字符写入显示演员的的必要的信息。String Display对象包含使用Char Display对象列表初始化的显示属性。.Panel Display对象也同样有String Display对象列表初始化的显示属性。 更进一步分析发现除显示对象的需求之外还有和显示对象相应的负责控制和造成动画的需求。动画对象可分出下一个层级与显示对象相对应,.由Char Animation、String Animation和Panel Animation组成。 对象构架的设计的最终分析结果:
此主题相关图片如下:

[1] [2] 下一页
|