用PHP动态创建Flash动画


Posted in PHP onOctober 09, 2006

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创建的一样!要得到更多的函数说明,请参考操作手册。

PHP 相关文章推荐
提问的智慧(2)
Oct 09 PHP
浅谈PHP语法(1)
Oct 09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
PHP多文件上传类实例
Mar 07 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 PHP
一个odbc连mssql分页的类
Oct 09 #PHP
拼音码表的生成
Oct 09 #PHP
用PHP和MySQL保存和输出图片
Oct 09 #PHP
PHP生成带有雪花背景的验证码
Oct 09 #PHP
一个可查询所有表的“通用”查询分页类
Oct 09 #PHP
Get或Post提交值的非法数据处理
Oct 09 #PHP
用Socket发送电子邮件
Oct 09 #PHP
You might like
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
Jquery性能优化详解
2014/05/15 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
javascript运动详解
2015/07/06 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
python中base64加密解密方法实例分析
2015/05/16 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
农药学硕士毕业生自荐信
2013/09/25 职场文书
商务日语毕业生自荐信范文
2013/11/14 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
python中%格式表达式实例用法
2021/06/18 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技