此类动画通常是使用一种 Flash 的开发工具编译的文件,在命令行中运行这段代码将生成文件 hello.swf

清单 2 显示了使用 Ming 库实现的 HelloWorld 示例,在命令行中运行这段代码将生成文件 hello.swf,Web 2.0 引入了 Rich Internet Application,一种用于构建 Rich Internet Application(RIA)的方法就是使用动态,此类动画通常是使用一种 Flash 的开发工具编译的文件,Flash Player 还需要使用一个 Flash

在命令行中运行此脚本并在浏览器中查看 image.swf,结果如图 4 所示。

Web 2.0 引入了 Rich Internet Application。但 Rich Internet Application
的含义是什么?通常,它意味着向应用程序中添加具有高度响应能力的交易操作。具体来说,它意味着可以即时更改页面中的小部件、Web
表单和报告,而无需从服务器中检索新页面。

Web 2.0 引入了 Rich Internet Application。但 Rich Internet Application
的含义是什么?通常,它意味着向应用程序中添加具有高度响应能力的交易操作。具体来说,它意味着可以即时更改页面中的小部件、Web
表单和报告,而无需从服务器中检索新页面。一种用于构建 Rich Internet
Application的方法就是使用动态 HTML,它是 Ajax、Javascrīpt、层叠样式表和
HTML 的组合。但是 DHTML 并不是向 Web
应用程序中添加互动操作的惟一方法。另一种重要方法是使用 Adobe Flash
Player,使用它为 Web 站点添加交互操作已经有十年的历史。第一版的 Flash
曾是用于创建动画图片的工具,而最新版本的 Flash
已经可以托管一个完整的界面,可用于控制 Web 服务访问并使用
ECMAscrīpt来提供完整的脚本支持。了解 FlashFlash Player 是集成到运行
Microsoft Windows、Mac OS X 和 linux 的计算机的 Web
浏览器中的一个插件。截至本文完稿时,最新版本的 Flash Player 是
V8。它是可以免费获得的,大多数浏览器都附带安装了此插件。它十分流行并且具有优秀的客户机渗透力
而这种渗透力随着 YouTube 和 Google Video
这类服务的出现得到了提高,这些服务都使用 Flash 显示视频流。Flash Player
只是天平的一端。要发挥作用,Flash Player 还需要使用一个 Flash
动画。此类动画通常是使用一种 Flash 的开发工具编译的文件,其文件扩展名为
.swf。但正如您将在本文中看到的那样,还可以使用 Ming
库用几乎与动态创建图片相同的方法来动态构建 .swf 文件,并在 Web
服务器上绘制图形。Ming 库利用由 php 代码构建的对象和方法在新的 .swf
文件中构建操作代码。您可以通过两种方法中的任意一种方法来查看 Web
站点中的 .swf 文件。第一种方法只需导航到 .swf 文件的 URL。这样做将把 Web
服务器的整个内容区域替换为 Flash
动画。此方法便于进行调试,但主要的用法还是将动画嵌入到 HTML Web 页面的
object 标记中。该 object 标记然后再通过 URL 引用 SWF 动画。object
方法的优点在于您可以把动画放在页面的任意位置,并可通过 Javascrīpt
代码进行动态控制,就像处理页面中的任何其他元素一样。清单 1
显示的是一个引用 SWF 动画的 object 标记的示例。清单 1. 嵌入式 Flash 动画
OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000codebase=#
version=6,0,40,0WIDTH=550 HEIGHT=400PARAM NAME=movie
VALUE=lines.swfEMBED src=lines.swf WIDTH=550
HEIGHT=400TYPE=application/x-shockwave-flashPLUGINSPAGE=这组标记将引用一个名为
lines.swf 的动画。

               
<?php
$f = new SWFFont( '_sans' );

$pt = new SWFTextField();
$pt->setFont( $f );
$pt->setColor( 0, 0, 0 );
$pt->setHeight( 400 );
$pt->addString( '1000' );

$tt = new SWFTextField();
$tt->setFont( $f );
$tt->setColor( 192, 192, 192, 90 );
$tt->setHeight( 350 );
$tt->addString( 'Points' );

$m = new SWFMovie();
$m->setDimension( 2500, 800 );

$pts = $m->add( $pt );
$pts->moveTo( 0, 0 );

$tts = $m->add( $tt );
$tts->moveTo( 1300, 200 );

for( $i = 0; $i < 10; $i++ ) {
 $m->nextframe();
 $pts->scaleTo( 1.0 + ( $i / 10.0 ), 1.0 + ( $i / 10.0 ) );
}

$m->save( 'text.swf' );
?>

我只是触及了 Ming
库可为您提供的操作的表面。在这里我没有展示交互部分,在交互部分您可以将简单的脚本与元素连接起来。(但是,如果换成是交互操作,如果您有一个十分复杂的
Flash 动画,则可能需要考虑使用 Flash 开发工具来构建 Web 应用程序内与 Web
服务对话的 Flash 动画。)

此脚本在开始时读取了本地的 .jpeg 文件(在本例中,是我女儿 Megan
的照片)。然后创建一个矩形,并在其中填充图片。在那之后,它在10
帧处使用了位移效果使图片稍微移动。

结束语

构建更加复杂的 Flash 动画的另外一种选择是使用诸如 Adobe Flex 或 Laszlo
之类的制作工具,这两种工具都提供了用于为 Flash 动画的用户界面布局的 XML
语法以及一个更轻松地例程,可用于开发为界面提供互动操作的 JavaScript。

第一版的 Flash 曾是用于创建动画图片的工具,而最新版本的 Flash
已经可以托管一个完整的界面,可用于控制 Web 服务访问并使用
ECMAScript(JavaScript 的正式版本)来提供完整的脚本支持。

图 4. 生成的图片动画
图片 1

您可能会注意到,我有一个名为 $pt 的变量,该变量具有文本
“1000”。随后当我把 $pt 添加到动画中时,获得了通过 add()
方法返回的名为 $pts 的新对象。该对象是
SWFDisplayItem,表示子图形的实例。然后我可以围绕动画框架的表面逐帧移动实例。这有点儿混乱,但我可以拥有同时移动的多个版本的
“1000” 文本子图形或 “points” 文本子图形。

文本 “1000” 开始时很小,大小为 350 个点。然后使用 scaleTo()
方法使其增大为 750 个点,方法是对动画对象使用 nextframe() 方法。

              
<?php
$m = new SWFMovie();
$m->setDimension( 300, 300 );

$s = new SWFShape();
$s->setLine( 5, 0, 0, 0 );
$s->movePenTo( -100, -100 );
$s->drawLineTo( 100, 100 );
$ts = $m->add( $s );

$ts->moveTo( 150, 150 );

for( $i = 0; $i < 100; $i++ ) {
 $ts->rotate( 10 );
 $m->nextframe();
}

$m->save( 'rotate.swf' );
?>

其中有一组映射到 SWF
动画中的数据类型的对象:子图形、图形、文本、位图等等。在本文中,我使用了预编译的扩展
php_ming.dll 库用于 Windows 版本的 PHP。

在本例中,我从 -100, -100 到 100, 100
画了一条直线。这将把直线的中心放在坐标 0,0
处。这样,当我在旋转图形时,直线的中心将发生旋转。

清单 5. 旋转直线

清单 2 显示了使用 Ming 库实现的 HelloWorld 示例。

清单 2. Hello.php

要理解其工作原理,需要了解一点 Flash 制作动画的方法。Flash
中的动画就像电影中的动画一样运行:按帧运行。子图形将按帧在动画框架中移动。一个主要差别是
Flash 不获取每帧的快照。它存储子图形对象在每帧的状态。

              
<?php
$img = new SWFBitmap( file_get_contents( 'megan.jpg' ) );

$s = new SWFShape();
$imgf = $s->addFill( $img );
$s->setRightFill( $imgf );
$s->movePenTo( 0, 0 );
$s->drawLineTo( $img->getWidth(), 0 );
$s->drawLineTo( $img->getWidth(), $img->getHeight() );
$s->drawLineTo( 0, $img->getHeight() );
$s->drawLineTo( 0, 0 );

$m = new SWFMovie();
$m->setDimension( $img->getWidth() * 2, $img->getHeight() * 2 );
$is = $m->add( $s );
$is->moveTo( $img->getWidth() / 2, $img->getHeight() / 2 );

for( $i = 0; $i < 10; $i++ )
{ 
$is->skewx( 0.02 );
$is->skewy( -0.03 );
$m->nextframe();
}

$m->save( 'image.swf' );
?>

当我向动画中添加图形时,将移动返回到框架中心的 SWFDisplayItem。然后用
rotate() 方法使它旋转并每旋转一周就增大其框架。

标记还把 Flash Player 的高度和宽度分别指定为 550 像素和 400
像素。非常值得注意的是,Flash
动画中的图形都是基于矢量的,这意味着当您使用 Flash
命令绘制线条和文本时,那些元素都被存储为坐标并且按照匹配显示区域的比例进行缩放。如您所见,Flash
动画有自己的坐标系统,您可以按照适合自己的方法使代码尽可能整洁。

接下来要处理的是矢量图形。首先仅绘制一条简单的直线,它从框架的左侧顶部到右侧底部。

要理解其工作原理,需要了解一点 Flash 制作动画的方法。Flash
中的动画就像电影中的动画一样运行:按帧运行。子图形将按帧在动画框架中移动。一个主要差别是
Flash 不获取每帧的快照。它存储子图形对象在每帧的状态。

绘制一些图形

在命令行中运行此脚本,然后查看输出的 .swf 文件,效果如图 3 所示。

您可能会注意到,我有一个名为 $pt 的变量,该变量具有文本
“1000”。随后当我把 $pt 添加到动画中时,获得了通过 add()
方法返回的名为 $pts 的新对象。该对象是 SWFDisplayItem
表示子图形的实例。然后我可以围绕动画框架的表面逐帧移动实例。
这有点儿混乱,但我可以拥有同时移动的多个版本的 “1000” 文本子图形或
“points” 文本子图形。

回页首

在命令行中运行这段代码将生成文件 hello.swf。当我在 Web
浏览器中打开该文件时,看到了图 1 所示的结果。

接下来要处理的是矢量图形。首先仅绘制一条简单的直线,它从框架的左侧顶部到右侧底部。

让文本动起来

给我留下深刻印象的两个 Flash SWF 是 XML Chart 和 XML Gauge,可在
maani.us 获得(请参阅
参考资料)。使用动画就可以轻松地为
Web 站点提供动态的规格和图形,您只需在 PHP 应用程序中创建 XML 页面。

好的 —— 这十分简单,也不怎么令人激动。那么我做了什么?创建了一个新的
SWFShape
对象,然后向其中添加了一些笔触移动和直线。然后我将其作为子图形添加到了动画中。

 

               
<?php
$m = new SWFMovie();
$m->setDimension( 300, 300 );

$s = new SWFShape();
$s->setLine( 5, 0, 0, 0 );
$s->movePenTo( -100, -100 );
$s->drawLineTo( 100, 100 );
$ts = $m->add( $s );

$ts->moveTo( 150, 150 );

for( $i = 0; $i < 100; $i++ ) {
 $ts->rotate( 10 );
 $m->nextframe();
}

$m->save( 'rotate.swf' );
?>

清单 3. Text.php

为了让它变得更有趣,我使用了与刚才文本中使用的相同的帧式动画。但在本例中,我用下面所示的代码使这条直线围绕动画的中心旋转。


此过程类似于使用 PHP 中的 ImageMagick 库来构建位图。对于所有 Ming
示例,我都将使用 save 方法,但您可以根据喜好来选择是否使用 save 方法。

绘制一些图形

图 2. text.swf 文件
图片 2

必须指出的是,Ming 仍处于开发阶段。截至本文完稿时,库的版本是
V0.4,并且较老版本中的一些命令在最新版本中不能使用。我使用了 V0.4
撰写本文,因此,要使用这段代码,您需要使用这个版本。

使用图片

这组标记将引用一个名为 lines.swf 的动画。内部的 <embed> 标记用于确保
Flash 动画可以在安装了插件的各种浏览器中播放。

继续移动

Flash Player 是集成到运行 Microsoft® Windows®、Mac OS X 和 Linux®
的计算机的 Web 浏览器中的一个插件。截至本文完稿时,最新版本的 Flash
Player 是
V8。它是可以免费获得的,大多数浏览器都附带安装了此插件。它十分流行并且具有优秀的客户机渗透力
—— 而这种渗透力随着 YouTube 和 Google Video
这类服务的出现得到了提高,这些服务都使用 Flash 显示视频流。

在本例中,我从 -100, -100 到 100, 100
画了一条直线。这将把直线的中心放在坐标 0,0
处。这样,当我在旋转图形时,直线的中心将发生旋转。

此脚本在开始时读取了本地的 .jpeg 文件(在本例中,是我女儿 Megan
的照片)。然后创建一个矩形,并在其中填充图片。在那之后,它在10
帧处使用了位移效果使图片稍微移动。