用PHP动态创建Flash动画

Macromedia 公司出品的 Flash 动画软件现已经成为Web页面上非常流行的表现工具,网站开发者利用它引起浏览者的兴趣。然而不幸的是,仅仅使用ActionScript创建动画受到很大的限制,Macromedia已经宣布,打算放弃Flash Generator产品,转而采用支持Flash MX的Cold Fusion,我们的网站将向何处去呢?现在,我们可以利用Ming PHP库来轻松地动态创建Flash动画,并且和我们的代码无缝集成。我们可以根据数据库里的数据创建出各种不同效果的动画。
Ming 动画库最初出现在PHP4.05版本里,替代了以前版本的LibSwf模块。Ming 库采用C编写,支持多种语言,下面先看一下如何利用PHP来制作动画。该库使用简单,和 PHP 紧密集成,但是,该库仍然处于实验阶段,目前的版本是0.2a,在线的教程、例子、和帮助手册可以让我们方便地学习,Ming里的函数组织的很有条理,方便PHP和Flash开发者查找。使用 PHP和Ming库,不但让我们的网站有华丽的装饰,而且可以减少开发Flash动画的费用和繁复的劳动。
使用Ming库有两种方式,我们可以内嵌到PHP里(对Unix平台而言),也可以把它作为一个PHP模块来运行,里面的函数支持所有的平台,使用时也无需实例化。如果我们把Ming库作为PHP模块来运行的话,我们必须明确地调用Ming库,和使用其他模块一样,然后使用该库里的函数。由于使用前必须先加载模块,与把Ming作为内部函数编译的方式相比,要有一点性能的下降。
Ming库是完全免费的,我们可以到创作者的网站下载,地址是:http://www.opaque.net/ming/,该网站有详细的使用手册和帮助,在使用前,请先看看安装和配置说明,地址是:http://www.opaque.net/ming/install.html。另外,在PHP网站上也有使用手册和详细说明,地址是:http://www.php.net/ming。
一旦我们正确安装和配置了Ming库,我们可以创建一个PHP对象,从PHP里调用Ming的函数,通过调用函数和属性,就可以定义我们的动画了。在PHP模块里有13个对象,提供了Flash的一些功能,也有几个命令可以来控制发行时的参数设定。下面就看看如何利用它来创建动画。
使用Macromedia Flash创建SWF格式的动画,我们先创建一些符号,Flash有三种类型的符号:图形、动画剪辑、按钮。一旦我们创建了这些符号,我们就可以把它们复制到场景里,每一个拷贝称为一个实例,可以放任意多的实例到我们的场景里。接下来就可以定义这些对象的行为了,也就是定义动作和运动轨迹,也可以定义动画的参数,如尺寸大小和背景颜色,如果需要,可以保存成.SWF文件。
利用PHP的Ming库创建Flash动画,和Macromedia Flash一样,必须先创建一些符号,这些符号就是PHP对象的实例,然后定义这些对象在动画场景里的位置和相互关系,接着定义对象在每一帧里的动作,最后定义动画自己。我们可以直接把SWF直接输出到浏览器,也可以保存成SWF格式的文件,以备后用。Flash的优点就是图形化的用户接口,利用Ming库不但可以更加简单的控制对象,而且具有无限的扩展性和再用性。
下面我们就用一个完整的例子来看看如何使用Ming库:

<?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();
}

/* 下面创建按钮 */

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

/* 下面创建动画,并添加上面的符号和按钮 */

$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();
?>

好了,在你的机器上运行一下看看,是不是和用Flash创建的一样!要得到更多的函数说明,请参考操作手册。

(0)

相关推荐

  • PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间

    PHP前言: •动态地创建属性和方法 •对象的复制 •对象的比较 •加载指定的文件 •自动加载类文件 •命名空间 示例 1.类的相关知识点 3(动态地创建属性和方法) class/class3.php <?php /** * 类的相关知识点 3(动态地创建属性和方法) */ // 用于演示如何动态地创建属性(这就是 php 中所谓的重载) class Class1 { // __set 魔术方法,当设置的属性不存在或者不可访问(private)时就会调用此函数 public function _

  • php使用变量动态创建类的对象用法示例

    本文实例讲述了php使用变量动态创建类的对象.分享给大家供大家参考,具体如下: 这是一个能用变量动态创建类的对象的用法,就是根据$pay_code变量值来创建对象. 例如下例就是创建类T的一个对象$payment.然后就可以使用了.咋一看像是个新的知识点,其实不然,只不过是编程中的一个技巧而已. $pay_code='T'; $payment = new $pay_code(); echo $payment; echo $payment->ep(); class T{ function ep()

  • PHP 动态随机生成验证码类代码

    下面是效果图,这个效果图是没有开启干扰码的效果图 下面是类代码 复制代码 代码如下: <?php /************************************************ //FILE:ImageCode //DONE:生成动态验证码类 //DATE"2010-3-31 //Author:www.5dkx.com 5D开心博客 *********************************************************************

  • PHP通过反射动态加载第三方类和获得类源码的实例

    使用反射动态加载第三方类 用反射加载第三方类用处在于: 使用XML或其他配文件配置要加载的类,从而和系统源代码分离. 对加载的类进行类检查,是加载的类符合自己定义的结构. <?php abstract class Module { #核心Module类库 function baseFunc() { echo "I am baseFunc"; } abstract function execute(); } class ModuleRunner { private $configD

  • PHP动态创建Web站点的方法

    PHP有4个用于使用外部函数的函数:include().include_once().require()和require_once(). 为了使用它们,PHP脚本中将包括如下代码行: include_once('arr.php'); require('/path/to/filename.html'); 两种使用外部函数的区别: 使用起来完全一样,只是在出错时会有所不同:include()函数不工作,就会向Web浏览器打印一个讲稿,但是脚本会继续运行,如果require()失败,就会打印一个错误,

  • 如何使用动态共享对象的模式来安装PHP

    PHP 通常被安装在 Linux/Unix 操作系统上,并且搭配 Apache 服务器一起使用.在将 PHP 与 Apache 服务器一起安装的时候,你有三种不同的安装方式可以选择:静态模块,动态共享对象(Dynamic Shared Object, DSO)以及 CGI 程序执行文件. 在这里我建议大家使用动态共享对象的模式来安装 PHP,这是因为这种安装方式为日后的维护与升级提供了极大的便利.假设你一开始安装 PHP 的时候,只加入了PHP 的数据库相关模块.几天以后你决定再加装 PHP 的

  • 一个ASP创建动态对象的工厂类(类似PHP的stdClass)

    最近整理ASP/VBScript代码,发现过去的一个ASP实现的MVC框架,可惜是个半成品,效率也成问题,不过发现里面有些我写的代码,感觉还稍稍可以拿出来见人,于是今天作此文以记之. 说是ASP,其实和VBScript也脱不了干系,VBScript语言传承于Visual Basic,VB的语法灵活度已经不尽如人意了,VBS作为其子集可想而知.神马反射.自省等先进的技术,微软在.NET中才引入.作为被抛弃的技术,也不奢望微软能够提供支持,于是顽固守旧的程序员只有绞尽脑汁的去模仿实现一些类似的功能.

  • PHP使用方法重载实现动态创建属性的get和set方法

    在PHP中,我们不能够直接通过方法名相同,签名不同的方法来实现方法重载,因为PHP是弱数据类型,不能很好的区分签名.但是,可以在PHP的类中运用__call()方法来实现方法重载.当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数. 下面的例子是使用PHP的方法重载来动态创建get和set方法.(在面向对象编程中,一个类中的属性会使用get和set来赋值,但

  • PHP使用GIFEncoder类生成gif动态滚动字幕

    今天在公司,经理让做一个滚动字幕.但是,不许生成gif图片.所以上网找了GIFEncoder这个类库.确实很好用,但是,应用过程中也出现了一些问题,现在写在这里,以供后来人参考,少走弯路. 文字滚动分为两种情况.第一种为水平滚动: 复制代码 代码如下: <?php require_once("GIFEncoder.class.php"); $count=0;   //设置默认计数器 while(true){     $str = $_REQUEST['str'] ? $_REQU

  • PHP使用GIFEncoder类生成的GIF动态图片验证码

    相信很多人都想过如何用PHP生成GIF动画来实现动态图片验证码,以下是实现过程. ImageCode函数通过GIFEncoder类实现的GIF动画的PHP源代码,有兴趣的朋友可以研究一下. 效果如图: 复制代码 代码如下: /**   * ImageCode 生成GIF图片验证   * @param $string 字符串   * @param $width 宽度   * @param $height 高度   * */   function ImageCode($string = '', $w

  • php 动态执行带有参数的类方法

    官方手册给出了以下范例: 复制代码 代码如下: <?php // 使用了NameSpace的例子 namespace Foobar; class Foo { static public function test() { print "Hello world!\n"; } } call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0 // Hello world! call_user_func(array(__

  • php运行时动态创建函数的方法

    本文实例讲述了php运行时动态创建函数的方法.分享给大家供大家参考.具体分析如下: 一般的语言函数必须定义了在运行,而php支持在运行时动态创建函数,下面是一个简单的范例,在运动时根据不同的条件创建函数$a <?php if (count($_POST) > 0) { $prepped = create_function('$a', 'return trim($_POST[$a]);'); } elseif (count($_GET) > 0) { $prepped = create_f

随机推荐