PHP从4.05版开始包含了Ming库,并由此取代了先前支持的模块libswf。Ming库由Dave Haden和他在Opaque.net的朋友们用C语言编写。它来自于一个用不同脚本语言支持Flash的项目,这里主要讨论PHP对它的支持。
你可以采取内置于PHP(在UNIX系统上)或者作为PHP模块两种方式来运行Ming。如果用前者,则有关函数都随时可用而无须对函数库实例化。如果照后者方案执行,那么你得需要恰当的库来调用指定的Ming,就如同使用PEAR模块然后访问库内的函数一般。后一种方法令你的网站无须装载页面上用不到的模块,当然,相比内置Ming的方式会带来轻微的性能损失。
你可以从Opaque.net免费下载Ming库。然后根据你的要求,按照Opaque网站指导构建和配置PHP。此外,PHP手册中也包含了详细的指导信息。
安装完Ming之后,你就可以在自己文档目录下的任何PHP脚本中调用Ming函数了,你可以轻松地使用对象的函数和属性来定义你的动画。PHP下有13种Ming对象,每一种对象都提供了部分Flash
4的功能,有些相应的命令则用来控制Publish Settings。现在就让我们看一看如何处理这些对象。
为了采用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业务需求的绝佳解决方案。