用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 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
PHP自定义函数实现数组比较功能示例
Oct 19 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python调用支付宝支付接口流程
2019/08/15 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python的移位操作实现详解
2019/08/21 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python实现滑雪游戏
2020/02/22 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
市级三好学生事迹材料
2014/08/27 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2015年路政工作总结
2015/05/22 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技