用Ming快速创建动态Flash

ZDNet软件频道 时间:2002-05-08 作者:BUILDER.COM |  我要评论()
本文关键词:FLASHMX PHP
PHP下的Ming令开发人员在没有多少经验的情况下掌握了创建动态Flash的技能。如果你早就熟悉Macromedia Flash,那你熟悉这套新东西可就更简单了。总得来讲,Ming是一种满足Flash业务需求的绝佳解决方案。
Macromedia Flash俨然已成为最广泛的Web动画工具,因为用户特别需要一点动画来点缀自己的网页。可是,采用ActionScript来创建Flash动画具有一定的局限性,于是Macromedia计划停止Flash Generator产品的开发转而通过Cold Fusion应用服务器提供对Flash MX的支持。这样一来,你的网站该向何处去呢?好在,PHP能帮你的忙。你可以轻松地采用Ming PHP库动态地产生Flash动画而且无缝地把它们集成到你的脚本中来。

PHP从4.05版开始包含了Ming库,并由此取代了先前支持的模块libswf。Ming库由Dave Haden和他在Opaque.net的朋友们用C语言编写。它来自于一个用不同脚本语言支持Flash的项目,这里主要讨论PHP对它的支持。


Ming库的使用和部署都很简单,而且可以完美地同任何PHP脚本集成。虽然这种库还被PHP组织当作实验项目(当前版本是0.2a),不过,它被广大开发人员使用却已经超过1年了。在线的教程示例帮助都是你的良师益友。Ming的函数对Flash和PHP开发人员来说都相当熟悉。采用Ming和PHP,你不但可以令自己的网站花样百出,而且大大降低了实现Flash的工作量。
部署Ming

你可以采取内置于PHP(在UNIX系统上)或者作为PHP模块两种方式来运行Ming。如果用前者,则有关函数都随时可用而无须对函数库实例化。如果照后者方案执行,那么你得需要恰当的库来调用指定的Ming,就如同使用PEAR模块然后访问库内的函数一般。后一种方法令你的网站无须装载页面上用不到的模块,当然,相比内置Ming的方式会带来轻微的性能损失。

你可以从Opaque.net免费下载Ming库。然后根据你的要求,按照Opaque网站指导构建和配置PHP。此外,PHP手册中也包含了详细的指导信息。

安装完Ming之后,你就可以在自己文档目录下的任何PHP脚本中调用Ming函数了,你可以轻松地使用对象的函数和属性来定义你的动画。PHP下有13种Ming对象,每一种对象都提供了部分Flash 4的功能,有些相应的命令则用来控制Publish Settings。现在就让我们看一看如何处理这些对象。

创作Flash动画

为了采用Macromedia Flash创建SWF动画,你首先得创建对象symbols。Flash有三种类型的符号(symbols):

  • 图像
  • 电影剪辑
  • 按钮

定义了符号之后,你就可以把它们的拷贝放到电影画布上来。而每一个这样的拷贝都被叫做实例,你可以拥有自己希望数量的实例。现在你可以定义在电影的每一帧上这些对象的行为。也就是定义已创建的这些符号实例的活动和移动。最后,你需要定义电影参数(比如大小和背景颜色等),调整Publish Settings,在必要的时候还要输出.swf 文件。

采用PHP模块Ming来创建Flash动画也是一样的道理,同样可以实现SWF格式各个方面的处理功能,你首先要创建自己的符号,也就是PHP对象的实例,然后定义这些对象在电影画布中的位置或者相互之间的关系。接着你需要定义每个帧内这些对象的移动和活动,最后定义电影自身的参数。你可以把自己创建的SWF直接输出到用户的浏览器或者把它保存为.swf文件供以后使用。

使用Macromedia的优点是它具有图形用户界面。不过,采用Ming来创建你的Flash却能令你获得更为简单的对象控制(一旦你熟悉了怎么操作)或者直接产生原始的.swf 源文件。这种方式提供了重用和再集成的多种可能,同时,对象的条件包含以及ActionScript中有限制的其他Flash动态元素都得到了大大的丰富,令你的选择余地相当大。

动画创建

为了更好地演示创建SWF动画的过程,让我们通过一个采用Ming的示例PHP脚本进行说明。单击这里可以查看该脚本的执行效果(底部的红色框是按钮)。

一开始先让我们创建一个新的符号。Ming模块中的SWFShape()对象控制着绘图工具,而对象的各种方法则以一种LOGO类的方式控制着绘画的内容。
<?PHP
$square = new SWFShape();
 
$sqfill = $square->addFill(0, 0, 0xff);
$square->setRightFill($sqfill);
 
$square->movePenTo(-250,-250);
$square->drawLineTo(250,-250);
$square->drawLineTo(250,250);
$square->drawLineTo(-250,250);
$square->drawLineTo(-250,-250);

现在我们可以用到电影剪辑中的形体同时定义其活动:
$sqclip = new SWFSprite();
$i = $sqclip->add($square);
$i->setDepth(1);
$sqclip->setframes(25);
$sqclip->add(new SWFAction("stop();"));
 
$sqclip->nextFrame();
$sqclip->add(new SWFAction("play();"));
 
for($n=0; $n<24; $n++) {
$i->rotate(-15);
      $sqclip->nextFrame();
}


接着创建另一个形体并把它用作按钮。我们没有为每一个按钮行为(over、down、up和release)创建一个单独的形体。我创建了一个函数自动地绘制形体:
function rect($r, $g, $b)  {
$s = new SWFShape();
$s->setRightFill($s->addFill($r, $g, $b));
$s->drawLine(500,0);
$s->drawLine(0,500);
$s->drawLine(-500,0);
$s->drawLine(0,-500);
return $s;
}
 
$b = new SWFButton();
$b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT);
$b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER);
$b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN);
 
$b->addAction(new SWFAction("setTarget('/box'); gotoandplay(2);"), SWFBUTTON_MOUSEDOWN);


然后我们定义电影,并放置电影剪辑(sprite)和电影中的按钮:
$m = new SWFMovie();
$m->setDimension(4000,3000);
 
$i = $m->add($sqclip);
$i->setDepth(3);
$i->moveTo(1650, 400);
$i->setName("box");
 
$i = $m->add($b);
$i->setDepth(2);
$i->moveTo(1400,900);


最后把结果输出到浏览器:
header('Content-type: application/x-shockwave-flash');
$m->output();
?>


最后产生的结果是按下按钮之后即播放电影剪辑。正如你看到的那样,用Ming创建SWF输出结果的过程同Macromedia Flash是一样的。我们只是没有用到GUI而已,从而令我们掌握了更大程度的电影创作灵活性

小结

PHP下的Ming令开发人员在没有多少经验的情况下掌握了创建动态Flash的技能。如果你早就熟悉Macromedia Flash,那你熟悉这套新东西可就更简单了。位图和字体的处理稍微笨拙些。总得来讲,Ming是一种满足Flash业务需求的绝佳解决方案。

责任编辑:炒饭

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134