Adobe Flash场景编程
on (mouseEvent) {}“()”小括号中的mouseEvent参数是鼠标事件,常用的有以下几种鼠标事件:
Press 当鼠标指针经过按钮时按下鼠标。
release 当鼠标指针经过按钮时按下再释放鼠标按钮。
releaseOutside 当鼠标指针在按钮之内时按下按钮后,将鼠标指针移到按钮之外,此时释放鼠标按钮。
rollOut 鼠标指针滑出按钮区域。
rollOver 鼠标指针滑过按钮。
场景面板 窗口-》动作
编译文件 调试-》调试影片
控制-》测试影片
trace(infoUrl); //调试代码
首先下载AMFPHP
下载后,解压缩,把文件夹中的amfphp 文件夹拷贝到 APACHE服务器的网站根目录。
然后打开浏览器,输入
http://localhost/amfphp/gateway.php 确定
如果提示:
amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.
Note: If you're reading an old tutorial, it will tell you that you should see a download window instead of this message. This confused people so this is the new behaviour starting from amfphp 1.2.
说明安装成功。
打开网站根目录的AMFPHP文件夹,进入SERVICES文件夹,新建一个PHP文件 命名为HELLOWORLD.php
其中要注意的是 services 目录,这个目录就是放置我们把开发好的服务端代码的,你可以开发单个文件的服务直接放到此目录下,也可以专门建立一个目录存放你的服务端代码。
拷贝以下代码:
<?php class HelloWorld { function HelloWorld() { $this->methodTable = array ( "say" => array ( "access" => "remote", "description" => "Pings back a message" ) ); } function say($sMessage) { return 'You said: ' . $sMessage; } } ?>
保存!
在浏览器地址栏输入
http://localhost/amfphp/browser/ (或点击 Load the service browser )
回车
AMFPHP的项目管理器:
单击 HelloWorld
看到一下内容,就是HELLOWORLD项目具体内容:
在sMessage输入内容(比如"xiaoxiaocainiao"), 单击call按钮:
看到页面下方的提示结果:
好了,你已经初步学会安装AMFPHP并使用了。
新增一个Fla(这裡以AS3.0为例),动作面板输入:
import flash.net.*; // 新增一个NetConnection物件 var test:NetConnection = new NetConnection(); // 连上AMF gateway // 这裡每家AMF gateway的实作方法应该都有差别,细节请记得看该实作说明 test.connect('http://127.0.0.1/amfphp/gateway.php'); // 准备一个Responder物件来接收事件,用法及参数请参考F1说明 var returnResult:Responder = new Responder(ok, ng); function ok(res:Object):void { trace(res); } function ng(res:Object):void { trace(res); } //以上,我做了ok跟ng两个简单小function,分别是trace出它们接收到的物件 test.call('HelloWorld.say', returnResult, 'hi, flash'); // 这裡是最重要的动作,就是直接用call这个方法 // "呼叫"在gateway上面的callme这个服务裡的callmeplease这个方法 // 第二个参数是接收反应的responder,第三个参数是给callmeplease的参数
以上,HelloWorld.say 会把”hi, flash”传给AMF gateway,然后gateway回传”You said:hi, flash”回来给flash。顺利的话,Ctrl + Enter执行,就会在output视窗看到输出的东西了。就这样,你的Flash已经可以跟各家有支援AMF的gateway”对谈”了
这里顺便介绍下几个标签页中对应的数据信息
Info: 调用执行情况(调用执行时间等信息)
Results: 返回结果
Tree: 以树的方式显示结果
Recordset view: 数据集结果观察器
Trace: 调试信息返回观察器
给函数加几个传入参数,并返回一个数组,看看会是什么样子的
<?php class terry_services { function dosmth($obj, $param2, $param3) { $return_array = array (); $return_array ['get_obj'] = $obj; $return_array ['get_p2'] = $param2; $return_array ['get_p3'] = $param3; return $return_array; } } ?>
上图可以看见三个参数,以及对应的输入框分别填写一些数据,执行看效果如下图:
好了,看见了数组返回结果了吗? 就是一个AS的对象,在AS3里可以当 数组用,也可以当对象用。我们再看看 Tree标签里显示的是什么
看到这里读者应该清楚这个工具的使用,以及服务端代码写法了吧。具体服务端的开发模式,这里不作介绍,以后看有需要再写吧。。。也许看到这里,大家有一个疑问,就是如果要传递一个对象,如何使用工具来调试呢?我把服务对象的方法 "dosmth" 修改成一开始的单参数结构
<?php class terry_services { function dosmth($obj) { return $obj; } } ?>
这个代码可以看出直接把对象返回给客户端的。我要告诉大家怎么使用这个工具来调试传入对象。
这里大家要知道一个概念 "JSON”,具体大家可以去查资料,大概意思就是 javascript 中的对象结构的串化的方式
如一个javascript数组:
a['one']='onev';
a['two']=2;
把这个数组串化(序列化)后的结果就是 {"one":"onev","two":2},其实就是用大括号,双引号,冒号来表示数组,传递后,并还原。
这里调试工具支持参数以 JSON 的方式传入,它会自动解析成数组对象,并传递到服务端。
好了~~ 服务端也知道怎么写了,参数也知道怎么传入了,对象也知道怎么调试了,接下来最后一步就是如何在客户端使用AFM协议和服务端的PHP代码进行通讯了。
AS3里有一个类 NetConnection,它是支持AMF协议的,AS3里它支持的AMF3协议。
主要使用到它的 connect方法和call方法
参数结构如下:
NetConnection.connect(服务地址)
NetConnection.call('目录 . 对象 . 方法名', 回调对象, 参数, [参数2], [参数3] ...)
这里 call 从第但个参数开始的参数,都是传给服务端的服务对象的方法的
看如下客户端的代码:
var callBack = new Object(); callBack.onResult = function(return_value:Object) { //... } var _nc: NetConnection = new NetConnection(); _nc.connect('http://www.example.com/amfphp/gateway.php'); _nc.call('terry_services.dosmth', callBack, param);
注意 connect 连接的是amfphp下 gateway.php (这个是固定的)
具体使用哪个服务对象以及方法,在 call 中的第一个参数指定,如果你的服务对象在更深级的目录总,则以 . (点) 来描述深度
如果 terry_services.php 的目录路径为 amfphp/services/ terry/terry_services.php 则这里 call的第一个参数为 'terry.terry_services.dosmth'
call 的第二个参数为服务端返回数据后,NetConnection 回调的对象,这个回调对象必须有一个固定的方法 onResult(param:Object);在这个方法里,你可以对服务端返回的数据进行处理。。。
基本上就是这样一个开发过程
AMFPHP预设的编码是不支援中文的(会出现乱码 ),不过只要修改一下gateway的程式码即可。
使用文字编辑器,开启AMFPHP资料夹的gateway.php,应该可以找到一段跟字码有关的:
$gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");
把它修改成:
$gateway->setCharsetHandler("utf8_decode", "UTF-8", "UTF-8");
或是如果你的PHP模組裡有iconv的話也可以這樣改:
$gateway->setCharsetHandler("iconv","UTF-8","UTF-8");
记得,不要改flash裡的useCodePage = true,虽然可能也ok,但这是走回头路….能使用Unicode就尽量使用它吧