Yooge.Net - 甬派设计

投递文章 投稿指南 甬派设计公告: 新风格大家是否习惯?模板是否兼容?欢迎大家测试。问题反馈: QQ:285559800   邮箱:yooge.n...
搜索: 您的位置甬派设计 >> 网站开发 >> php教程 >> 查看资讯

使用PHP 快速生成Flash 动画

2008-5-06 00:36   来源: 本站原创   作者:webmaster   【 评论:5

核心提示:Web 2.0 引入了 Rich Internet Application。但 Rich Internet Application 的含义是什么?通常,它意味着向应用程序中添加具有高度响应能力的交易操作。具体来说,它意味着可以即时更改页面中的小部件、Web 表单.

@s:y v%@CIWeb 2.0 引入了 Rich Internet Application。但Rich Internet Application的含义是什么?通常,它意味着向应用javascript:;" onClick="javascript:tagshow(event, '%B3%CC%D0%F2');" target="_self">程序中添加具有高度响应能力的交易操作。具体来说,它意味着可以即时更改页面中的小部件、Web 表单和报告,而无需从服务器中检索新页面。

[J*AK pzfi

^o1]'lvzj4?6M一种用于构建 Rich Internet Application(RIA)的方法就是使用动态 HTML(Dynamic HTML,DHTML),它是 Ajax、JavaScript、层叠样式表(Cascading Style Sheet,CSS)和 HTML 的组合(请参阅 参考资料)。但是 DHTML 并不是向 Web 应用程序中添加互动操作的惟一方法。另一种重要方法是使用 Adobe Flash Player,使用它为 Web 站点添加交互操作已经有十年的历史。甬派设计)FtuY3}#I^ T

甬派设计-CW!J+z"|

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

甬派设计9c|2Um0c D @

了解 Flash甬派设计(Q-\4G8ze)bx {F1e-\^

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

5@fA n!Y&T"|N7E:S甬派设计EM5d'_7Cn5`

Flash Player 只是天平的一端。要发挥作用,Flash Player 还需要使用一个 Flash 动画。此类动画通常是使用一种 Flash 的开发工具编译的文件,其文件扩展名为 .swf。但正如您将在本文中看到的那样,还可以使用 Ming 库用几乎与动态创建图片相同的方法来动态构建 .swf 文件,并在 Web 服务器上绘制图形。Ming 库利用由 PHP 代码构建的对象和方法在新的 .swf 文件中构建操作代码。

&\@4ySE4^m

3l:@!c#u] ?$|.^您可以通过两种方法中的任意一种方法来查看 Web 站点中的 .swf 文件。第一种方法只需导航到 .swf 文件的 URL。这样做将把 Web 服务器的整个内容区域替换为 Flash 动画。此方法便于进行调试,但主要的用法还是将动画嵌入到 HTML Web 页面的<object>标记中。该<object>标记然后再通过 URL 引用 SWF 动画。<object>方法的优点在于您可以把动画放在页面的任意位置,并可通过 JavaScript 代码进行动态控制,就像处理页面中的任何其他元素一样。甬派设计6_y A5IkW'WEQ

甬派设计9\}@#rr9VF.U

清单 1 显示的是一个引用 SWF 动画的<object>标记的示例。甬派设计fIS)Y9YM5j

甬派设计y\/OXE

)|;{x|.t&C清单 1. 嵌入式 Flash 动画
;u)[z4N t)D R(LJ)})v
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#        version=6,0,40,0"WIDTH="550" HEIGHT="400"><PARAM NAME="movie" value="http://my.chinaz.com/lines.swf"><EMBED src="http://my.chinaz.com/lines.swf" WIDTH="550" HEIGHT="400"TYPE="application/x-shockwave-flash"PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
甬派设计 z:j8lE)G

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

%h[B2?-]'[

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

*Ma+?|7ow4zq

'RiM0^+SMing

h,dCEn&GN,bq

2x{ CnE }-~!M2N本文中提供的使用 Flash 动画的第一种方法是使用 Ming 库动态生成它们。Ming 库是一个 PHP 库,其中有一组映射到 SWF 动画中的数据类型的对象:子图形、图形、文本、位图等等。我将不讨论如何构建和安装 Ming,因为其操作是特定于平台的而且并不特别简单(请参阅 参考资料)。在本文中,我使用了预编译的扩展 php_ming.dll 库用于 Windows 版本的 PHP。

,G]B%LH.a6e

2c4Uw"neS!r-T必须指出的是,Ming 仍处于开发阶段。截至本文完稿时,库的版本是 V0.4,并且较老版本中的一些命令在最新版本中不能使用。我使用了 V0.4 撰写本文,因此,要使用这段代码,您需要使用这个版本。甬派设计 K]-pa'L,lTx

甬派设计Z.bN5yu

清单 2 显示了使用 Ming 库实现的 HelloWorld 示例。甬派设计 p7s S^$G m |b

甬派设计i({#Qs `


6wr'\"xr ],_F甬派设计&fI3c;o+IC(H
清单 2. Hello.php
fyxr:m/Q$o

<?php$f = new SWFFont( '_sans' );$t = new SWFTextField();$t->setFont( $f );$t->setColor( 0, 0, 0 );$t->setHeight( 400 );$t->addString( 'Hello World' );$m = new SWFMovie();$m->setDimension( 2500, 800 );$m->add( $t );$m->save( 'hello.swf' );?>
甬派设计'y8n0j}4x _0A0|

!~I3uuO-o9eW#D甬派设计5Q{*A)Q \^ {4]'\k

在命令行中运行这段代码将生成文件 hello.swf。当我在 Web 浏览器中打开该文件时,看到了图 1 所示的结果。甬派设计 u@!?q gN$T Z"K[

]*@7El#{ HEJV甬派设计t%dZ'z4hy
甬派设计4Lq\na&j1cwVd
图 1. 使用 Ming 的 HelloWorld 示例
6]t)o|u"D'W;m,pC 
pF0Ou N X(K._y回过头来查看这段代码,我做的第一件事是创建指向一个内置字体(_sans)的指针,然后创建文本字段,设定字体、颜色和大小,最后为其提供一些文本内容(“Hello World”)。再接下来创建了一个SWFMovie对象并设定其尺寸。最后,向动画中添加了文本元素并将动画保存到文件中。

9c K*n1}&w:S.k? i*]甬派设计} f%V/CZ~Y

作为直接构建文件的替代性方法,也可以使用下面的代码,使 SWF 动画像页面那样输出,而无需使用 save 方法:

.C-X,Nc%_ |%m-p

]Z)Qh2rP)D

header( 'Content-type: application/x-shockwave-flash' );$m->output( );

Y_-XE/W甬派设计9~-S.N m"k6f!]w I7Zp

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

OnJ2?0Rd'C

]`4?GP^-[让文本动起来

m6dX1o#_甬派设计1^} G0W@

只是将一些文本放入 Flash 动画中是没有多大意义的,除非您能让它动起来。因此我整合了清单 2 中的示例,它包括两段文本:一部分开始很小后来变得越来越大,而另一部分保持静态。甬派设计~ _8hL+t

bfDe1cZ[甬派设计-|$H.o#P|8y,wl,\

/G9drW6L)Oe U;M清单 3. Text.php甬派设计]IT'nT({5l

<?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' );?>

Wo0Wk;x|

-} J C'|{

/mHnE2y.nm~P在命令行中执行这段代码时,它将生成 text.swf。在 Web 浏览器中打开该文件时,我看到了图 2 所示的图片。

1R,V*mIP n5u,}甬派设计qH J,etn#Re$pER)F


|6Dj+zc9isV&t4p@$`甬派设计.?&T/a;]~N
图 2. text.swf 文件
7I0k'aQt@P lX4Vp
a*\g;n/dYS*EM
.T ckZP"})M }%r-x6af甬派设计,~e0] {Fl

甬派设计)r8[|9~+T

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

G'u#y_/xb

%gZ {Uv;w要理解其工作原理,需要了解一点 Flash 制作动画的方法。Flash 中的动画就像电影中的动画一样运行:按帧运行。子图形将按帧在动画框架中移动。一个主要差别是 Flash 不获取每帧的快照。它存储子图形对象在每帧的状态。甬派设计*gu6RP8V{S-w]*U

甬派设计%[c {k7k;B:F w

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

Xx#W!D-H0`d$rn$|

R0H"ULJ6o9j绘制一些图形

O5LXY K]甬派设计:[ ?3Gv`Wl

接下来要处理的是矢量图形。首先仅绘制一条简单的直线,它从框架的左侧顶部到右侧底部。甬派设计7q't!ME'~%}dD4V

甬派设计LIF3j ~z `]u/F\

甬派设计9M7S6bPJJ

s5b ?]{!d清单 4. Line.php
'{,w#c e9k@

<?php$m = new SWFMovie();$m->setDimension( 300, 300 );$s = new SWFShape();$s->setLine( 10, 0, 0, 0 );$s->movePenTo( 10, 10 );$s->drawLineTo( 290, 290 );$m->add( $s );$m->save( 'line.swf' );?>
甬派设计D/QE0UGn Q
甬派设计1E^/l7d^%w9}(_

k"ysPK在命令行中运行此脚本,然后查看输出的 .swf 文件,效果如图 3 所示。甬派设计_:Q9Ih0S4ef ^

LlX'~xN
(fl#OPj CO(K`甬派设计/y f$tL+Au0|[q9u
图 3. 绘制简单的直线甬派设计_x)W I`xo;f6s
甬派设计O(eFT-_

1~PW&@%b4f&w@g

7hmyiE2z6i甬派设计#so,w"A S3Qt Yb??F'C9u@

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

7uFpWA

?hZ@;G!I\为了让它变得更有趣,我使用了与刚才文本中使用的相同的帧式动画。但在本例中,我用下面所示的代码使这条直线围绕动画的中心旋转。甬派设计}M5^ T;n`Y

甬派设计:P,X,J[X

甬派设计/[| O3R @x N
甬派设计5iDuU Xq3s
清单 5. 旋转直线甬派设计n#L%\%l b c3{.FO

<?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' );?>

3V d$M6z y

-B/_)DHX0j

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

b)kN*h(k2}5q y甬派设计5JS nm,I7L

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

+t,H{7R!L-I"x%Q

O Wh z%\+@z T使用图片甬派设计O k+S P(k i L^

甬派设计rToM)qlsF

文本和诸如直线、圆、弧、曲线和矩形之类的简单矢量图形都是十分优秀的,但在理想的情况下,您必须能访问这些 Flash 动画中的图片。值得庆幸的是,Ming 库使您可以轻松的使用图片,如下所示。

w;Bt,I2h%H1c.q

8_Vw1z V{
z;L^5y;Z%l-C J6C{
fgCKH清单 6. 使用图片甬派设计X ~w Eq/q+j

<?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' );?>
甬派设计9_ c5mOl2C
甬派设计7a:v)R5MD

+SK| y0z8u/l在命令行中运行此脚本并在浏览器中查看 image.swf,结果如图 4 所示。甬派设计?y9EH3W1^

甬派设计8h;^']._;OPFB

甬派设计X|6\]}sg-[

}E$q mP ]图 4. 生成的图片动画甬派设计 y9V+v0b nx"F"_Z}p

l'XVZp!@(w x
#@gq\$f(LT:S i

E6?_b3W@.K'y

j8w$Vw$b8CJ此脚本在开始时读取了本地的 .jpeg 文件(在本例中,是我女儿 Megan 的照片)。然后创建一个矩形,并在其中填充图片。在那之后,它在10 帧处使用了位移效果使图片稍微移动。甬派设计X:D+F*m.jYI U@\Z

"G7u1Q-K$l继续移动甬派设计;s u:hEK`:u

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

i0QUH&C

Q cFN/j0cH*xh s`5`8am构建更加复杂的 Flash 动画的另外一种选择是使用诸如 Adobe Flex 或 Laszlo 之类的制作工具,这两种工具都提供了用于为 Flash 动画的用户界面布局的 XML 语法以及一个更轻松地例程,可用于开发为界面提供互动操作的 JavaScript。甬派设计#xLu-W.X3Z

甬派设计5Do{)k.i/g:Z'S

XML Chart 和 XML Gauge甬派设计ZK#tAM

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

-P7q*dc K|h第一步是从站点下载 SWF。然后将其嵌入到 Web 页面的<object>标记中并将 URL 提供给 XML 数据摘要。制作一个 PHP 页面按照控制所需的格式导出 XML。这些动画的 XML 格式在站点中得到了详细说明并且非常易于创建。

2G?J9Z%PPE甬派设计&{.[7Xc]{d"vw d

结束语甬派设计8kCm#an#u Xc;\o

甬派设计o,UFP2Z!Z2yS j

Flash 带来了一种机会,使您可轻松将大量交互操作添加到 Web 应用程序。就像一些小部件样式的控件一样,从微不足道开始,变得越来越流行。XML Chart 和 XML Gauge 提供了机会让您在投入大量时间了解 Ming、Flex 或 Laszlo 之前先尝试使用这些类型的 Flash 小部件。无论如何,值得花时间去了解 Flash 及其功能来扩展 Web 2.0 PHP 应用程序的功能及交互操作。

JE |M"W@xK

468*60 AD

  您看到此篇文章时的感受是:
0
0
0
1
0
0
0
0
欠扁 支持 很棒 找骂 搞笑 软文 不解 吃惊
0
顶一下
0
踩一下

Tags: flash   PHP   php   动画   Flash  
责任编辑:甬派设计
  • 查看: 28次
  • 上一篇:
  • 下一篇:
  • 请文明参与讨论,禁止漫骂攻击。  验证码: seccode
    评论总数:5 [ 查看全部 ] 网友评论
    • Guest
      来自: 116.23.159.78 的 Guest 2008-10-26 14:03:02 评论道:
      ???
      删除   引用  
    • Guest
      来自: 218.65.213.54 的 Guest 2008-10-21 21:33:45 评论道:
      http://diy.yuluy.com/
      删除   引用  
    • Guest
      来自: 218.65.213.54 的 Guest 2008-10-21 21:33:29 评论道:
      删除  
    • Guest
      来自: 121.20.236.47 的 Guest 2008-10-17 14:27:10 评论道:
      删除  
    甬派设计 - 交流论坛 - 快捷面板 - 站点地图 - 友情链接 - 空间列表 - 站点存档 - 联系我们