php生成flash动画实现代码
有一组被映射到SWF动画数据类型的对象:图、图形、文本、位图,等等。在这篇文章中,我使用预编译的扩展php_ming.dll图书馆为PHP的Windows版本。清单2显示了HelloWorld例子使用Ming库。
清单2。hello.php
< PHP
$ F =新swffont('_sans);
$ T =新swftextfield();
$ T ->设置字体($);
$ T ->设置颜色(0, 0, 0);
$ t > SetHeight(400);
$ T ->向此路径添加文本字符串('Hello World);
$ M =新SWFMovie();
$ M -> setdimension(2500, 800);
添加$(t);
$ M ->保存(你好。SWF);
>
在命令行中运行此代码将在Web浏览器中生成文件hello.swf.when我打开文件,我看到如图1所示的结果。
图1。利用明HelloWorld例子
回首这段代码,我做的第一件事就是创建一个指向内置字体(_sans),然后创建文本框,设置字体、颜色和大小,最后提供一些世界你好。然后创建一个SWFMovie对象及其大小设置。最后,文本元素添加到动画和动画保存到文件。
作为直接构建文件的一种替代方法,您还可以使用以下代码使SWF动画输出像一个页面,而不使用保存方法:
头('content-type:应用/ x-shockwave-flash);
输出();
这个过程类似于一个在PHP图书馆建立一个位图的使用。所有明的例子,我将使用保存的方法,但是你可以选择是否使用保存的方法,根据你的喜好。
让文本移动
在Flash动画中添加一些文本是没有意义的,除非你能使它移动,所以我把清单2中的例子整合起来,其中包括两部分文本:一部分开始变得非常小,变得越来越大,而另一部分保持静止。
清单3。text.php
< PHP
$ F =新swffont('_sans);
Pt =新swftextfield(美元);
为PT ->设置字体($);
为PT ->设置颜色(0, 0, 0);
为PT -> SetHeight(400);
Pt('1000美元->向此路径添加文本字符串);
TT =新swftextfield(美元);
为TT ->设置字体($);
为TT ->设置颜色(192, 192, 192,90);
为TT -> SetHeight(350);
TT美元->向此路径添加文本字符串('points);
$ M =新SWFMovie();
$ M -> setdimension(2500, 800);
美元= M =添加($ PT);
$ PTS ->移至(0, 0);
(= $);
$ TTS ->移至(1300, 200);
($ i = 0;$ i < 10;$ + +){
$ M ->下一帧();
$ PTS ->规模(1 +($我 / 10),1 +($我 / 10));
}
$ M ->保存(SWF中。);
>
当这段代码是在命令行中执行,它将产生text.swf.when我在Web浏览器中打开该文件,可以看到如图2所示的画面。
图2。text.swf文件
1000的文字很小开始,大小为350点。然后规模()方法是用来增加到750点,该方法使用下一帧的动画对象的方法()。
为了理解它是如何工作的,你需要知道Flash是如何产生动画的。Flash中的动画就像电影中的动画一样:按帧运行。子图将在动画帧中由帧移动。一个主要的区别是Flash不需要每帧快照,它将子图对象的状态存储在每个帧中。
你可能注意到了,我有一个名为$ PT,具有文本1000。然后当我加了$ PT的动画,我有一个新的对象命名为$ PTS被添加()方法返回的对象。这是一个swfdisplayitem表示子图的一个实例。然后我可以移动的实例在动画帧的表面的框架。这是一个有点混乱,但我可以有1000个文本图或点文本子,同时移动多个版本。
画一些图形
接下来要处理的是矢量图形。首先,从框的顶部到右边的底部画一条简单的直线。
清单4。line.php
< PHP
$ M =新SWFMovie();
$ M -> setdimension(300, 300);
$ S =新swfshape();
$ S ->钓鱼(10, 0, 0,0);
$ S -> movepento(10, 10);
$ S -> drawlineto(290, 290);
添加$($ s);
$ M ->保存(行。SWF);
>
在命令行中运行这个脚本,然后查看输出SWF文件,如图3所示。
图3。画一条简单的直线
好的,它很简单,也不太令人兴奋。我做了什么一个新的swfshape对象被创建,然后运动和直线部分笔画被添加到它。然后我添加它作为一个图的动画。
为了使它更有趣,我使用了与我在文本中使用的相同的帧动画,但在这种情况下,我使用下面的代码使线围绕动画的中心旋转。
Listing 5. 一条直线
< PHP
$ M =新SWFMovie();
$ M -> setdimension(300, 300);
$ S =新swfshape();
$ S ->钓鱼(5, 0, 0,0);
$ S -> movepento(100 - 100);
$ S -> drawlineto(100, 100);
美元= M -加(美元);
为TS ->移至(150, 150);
($ i = 0;$ i < 100;$ + +){
旋转(10);
$ M ->下一帧();
}
$ M ->保存('rotate .swf);
>
在这种情况下,我画出一条直线,从100、100到100、100。这地方的中心线的坐标:0.so,当我旋转的身影,的中心线旋转。
当我添加图形的动画,我搬回在框架中心的swfdisplayitem。然后旋转()方法用于旋转和增加帧每旋转一周。
使用图片
文本和简单的矢量图形,如直线、圆、弧、曲线和矩形都是优秀的,但在理想情况下,你必须能够访问这些Flash动画中的图片。幸运的是,明库可以让你轻松使用图片,如下所示。
清单6。使用图片
< PHP
img =新swfbitmap美元(file_get_contents('megan .jpg));
$ S =新swfshape();
imgf =美元美元的-> 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 =新SWFMovie();
$ M -> setdimension($ IMG -> getWidth()* 2,$ IMG -> getHeight()* 2);
$ $ =;
美元-> MoveTo($ IMG -> getWidth() / 2,$ IMG -> getHeight() / 2);
($ i = 0;$ i < 10;$ + +)
{
美元-> skewx(0.02);
美元-> skewy(- 0.03);
$ M ->下一帧();
}
$ M ->保存(图像,SWF);
>
命令行中运行此脚本,看看image.swf浏览器,如图4所示。
图片4。由图形动画生成
这个脚本在开始时读取本地jpeg文件(在这个例子中,是我女儿梅甘的照片),然后创建一个矩形填充图片,然后使用10帧的位移效果稍微移动图片。
继续向前
我刚才接触了明的表面,可以为你提供操作。在交互部分,你可以把简单的脚本和元素连接起来,但是,如果你把它转换成交互式操作,如果你有一个非常复杂的Flash动画,你可能需要考虑使用Flash开发工具来构建Flash动画,在Web应用程序中与Web服务对话。
另一种构建更复杂flash动画的选项是使用诸如Adobe Flex或拉斯洛之类的工具,这两种工具都为用户提供了界面布局,对于flash动画的XML语法和一个比较容易的例程,可用于开发界面,提供javascript的交互操作。