PHP生成Flash动画的实现代码
SWF动画中有一组映射到数据类型的对象:子图形、图形、文本、位图等。在本文中,我为Windows版本的php使用了预编译扩展php_ming.dll库。清单2显示了一个使用Ming库实现的HelloWorld示例。清单2。Hello.php?PHP $ f=new SWffont(' _ sans ');$ t=new SWFTextField();$ t-SetFont($ f);$t-setColor(0,0,0);$ t-SetHeight(400);$ t-addString(' Hello World ');$m=新的SWFMovie();$m-setDimension(2500,800);$ m-add($ t);$ m-save(' hello . swf ');在命令行上运行这段代码将生成文件hello.swf当我在Web浏览器中打开该文件时,我看到了如图1所示的结果。1.HelloWorld使用明的示例。
回顾这段代码,我做的第一件事是创建一个指向内置字体(_sans)的指针,然后创建一个文本字段,设置字体、颜色和大小,最后为它提供一些文本内容(“Hello World”)。然后,创建一个SWFMovie对象并设置其大小。最后,将文本元素添加到动画中,并将动画保存到文件中。作为直接构建文件的替代方法,您也可以使用以下代码使SWF动画输出像页面一样,而无需使用save方法:header(' content-type : application/x-shock wave-flash ');$ m-output();这个过程类似于在PHP中使用ImageMagick库来构建位图。对于所有明的例子,我都会使用save方法,但是你可以根据自己的喜好选择是否使用save方法。移动文本在Flash动画中仅仅放一些文本没有多大意义,除非你能让它移动。所以我集成了清单2中的例子,它由两段组成:一段开始很小,然后变得越来越大,而另一段保持不变。清单3。Text.php?PHP $ f=new SWffont(' _ sans ');$ pt=new SWFTextField();$ pt-SetFont($ f);$pt-setColor(0,0,0);$ pt-set height(400);$ pt-AddString(' 1000 ');$tt=新的SWFTextField();$ TT-setFont($ f);$tt-setColor(192,192,192,90);$ TT-setHeight(350);$ TT-添加字符串('点');$m=新的SWFMovie();$m-setDimension(2500,800);$ pts=$ m-add($ pt);$pts-moveTo(0,0);$ TTS=$ m-add($ TT);$tts-moveTo(1300,200);for($ I=0;10美元;$ I){ $ m-next frame();$pts-scaleTo(1.0美元(i/10.0),1.0美元(I/10.0));} $ m-save(' text . swf ');当在命令行上执行这段代码时,它将生成text.swf当我在Web浏览器中打开该文件时,我看到了如图2所示的图片。2.text.swf文件。
文字“1000”开头很小,大小为350点。然后使用scaleTo()方法,通过在动画对象上使用nextframe()方法将其增加到750点。要了解它的工作原理,我们需要稍微了解一下Flash动画的方法。Flash中的动画运行就像电影中的动画一样:逐帧运行。子图形将在动画中逐帧移动。一个主要区别是闪存不会为每一帧拍摄快照。它存储每个帧中子图形对象的状态。您可能注意到我有一个名为$pt的变量,文本为“1000”。然后,当我向动画中添加$pt时,我得到了一个名为$pts的新对象,该对象由add()方法返回。这个对象是SWFDisplayItem,它表示子图的一个实例。然后,我可以围绕动画帧的表面逐帧移动实例。这有点混乱,但我可以有多个版本的“1000”文本子图形或“点”文本子图形同时移动。画一些图形的下一步是处理矢量图形。首先,从框架左侧的顶部到右侧的底部画一条简单的直线。清单4。Line.php?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 ');在命令行上运行该脚本,然后查看输出。swf文件。效果如图3所示。图3。画一条简单的直线。
好——,很简单,不太刺激。那我做了什么?创建一个新的SWFShape对象,然后向其中添加一些笔画移动和线条。然后我将其作为子图形添加到动画中。为了让它更有趣,我使用了刚才文本中使用的相同帧动画。但是在这个例子中,我使用下面显示的代码来围绕动画的中心旋转这条线。清单5。旋转一条直线?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-next frame();} $ m-save(' rotate . swf ');在这个例子中,我画了一条从-100,-100到100,100的直线。这将使线的中心位于坐标0,0处。这样,当我旋转图形时,直线的中心就会旋转。当我向动画添加图形时,我将SWFDisplayItem移回帧的中心。然后使用rotate()方法旋转它,并在每次旋转时增加它的帧。使用图片文本和简单的矢量图形(如直线、圆、圆弧、曲线和矩形)非常好,但是在理想情况下,您必须能够访问这些Flash动画中的图片。幸运的是,明图书馆让你很容易使用图片,如下图所示。清单6。用图片?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=新的SWFMovie();$ m-setDimension($ img-getWidth()* 2,$ img-getHeight()* 2);$ is=$ m-add($ s);$is-moveTo($img-getWidth()/2,$ img-getHeight()/2);for($ I=0;10美元;$ I){ $ is-skew x(0.02);$ is-skew y(-0.03);$ m-next frame();} $ m-save(' image . swf ');在命令行上运行该脚本,并在浏览器中查看image.swf。结果如图4所示。4.生成的图片动画。
这个剧本的开头,我看了一个本地的。jpeg文件(这里是我女儿梅根的照片)。然后创建一个矩形并用图片填充它。之后利用10帧的位移效果,让画面稍微移动。继续,我只是触及了明图书馆能为你提供的操作的表面。我在这里不展示交互部分,在这里你可以把简单的脚本和元素联系起来。(但是,如果是交互操作,如果有非常复杂的Flash动画,可能需要考虑使用Flash开发工具构建一个Flash动画,用于与Web应用中的Web服务进行对话。构建更复杂的Flash动画的另一种选择是使用Adobe Flex或Laszlo等制作工具,这两种工具都为Flash动画的用户界面布局提供了XML语法,并为开发为界面提供交互式操作的JavaScript提供了更简单的例程。
版权声明:PHP生成Flash动画的实现代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。