PHP-php与flash交互流程

PHP-php与flash交互流程

虐人心 发布于 2017-09-11 字数 180 浏览 1191 回复 5

一直对php和flash之间的交互感兴趣,之前没参与过类似的项目。对php如何发送或接收数据到flash;而flash又是怎么接收数据和发送数据的?欢迎在一线与游戏直接接触的同事赐教,非常感谢!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

甜柠檬 2017-11-04 5 楼

flash与php通信代码例子
flash代码:
var loader:URLLoader = new URLLoader();

var url:URLRequest = new URLRequest("test.php");

url.method = URLRequestMethod.POST;

var values:URLVariables = new URLVariables();

values.message="hello im flash!";
url.data = values;

loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,loaded);
function loaded(e:Event) {
out1.text=loader.data;
//outPut: phpMessage=im php message!&flashMessage=hello im flash!
out2.text=loader.data.phpMessage;
// im php message!
out3.text=loader.data.flashMessage;
// hello im flash!
out4.text=loader.data.dbMessage;
}
loader.load(url);

php代码:
<?php
//这里都是有关数据库的操作
//===================================
Define(’DATABASE_SERVER’, ’localhost’);
Define(’DATABASE_USERNAME’, ’root’);
Define(’DATABASE_PASSWORD’, ’root’);
Define(’DATABASE_NAME’, ’flextest’);
$link=@mysql_connect(DATABASE_SERVER,DATABASE_USERNAME,DATABASE_PASSWORD);
@mysql_select_db(DATABASE_NAME,$link);
$result=@mysql_query("Select * from users");
$user=@mysql_fetch_array($result,MYSQL_ASSOC);
//echo $user[’userid’];
$dbvar=$user[’userid’];
//===================================
//接收flash传进来的数据
$flashData = $_POST[’message’];
//给flash发送的数据
$phpMessage = ’im php message!’;
echo "phpMessage=$phpMessage&flashMessage=$flashData&dbMessage=$dbvar";
?>

其实就这么简单!

晚风撩人 2017-10-17 4 楼

我之前做过一个类似与悟空识字的小孩的一个软件,就是你说的这种类型:
1,首先控制flash动画的是actionscrpt这个语言
2,php这边在逻辑处理完后可以如果需要输出就直接可以echo一个东西,我以前是echo一个xml字符串出来给as接受,然后as解析控制flash
3,如果as需要请求php服务端就直接调用as语言的http类直接发送就可以,php还是常规的接受参数方式,不过最好相互确认一个传输数据格式
4,像登录,注册这种需要保持状态的就尽量采用服务端的缓存机制去处理了

泛泛之交 2017-09-23 3 楼

1、AMFPHP:php下可以用AMFPHP框架使用flash的母语AMF格式通讯。
但AMF格式太封闭了。从开放通用的精神不建议使用

2、ZendAMF:这个是AMFPHP的另外一个分支成员,也可以一试。

3、也可以用flash向php服务端发送格式为xml或json的http请求来通讯。推荐使用这个,因为比较简单。使用起来也方便。

归属感 2017-09-22 2 楼

php和flash的交互有多种方式,目前最常用的还是AMFPHP,毕竟AMF是Adobe自己推出的规格,在压缩比例上,都会有很好的优化。目前社交游戏中更加体现了这个黄金组合的魅力。

直接上代码`//flash跟amfphp通信的简单例子
package {

import flash.display.MovieClip;
import fl.events.*;
import flash.events.*;

import flash.text.TextField;

import flash.net.NetConnection;

import flash.net.Responder;

 public class Main extends MovieClip {
private var gateway:String = "http://192.168.1.166/flashtest/as2php/amfphp/gateway.php";//amfphp gateway.php文件路径
private var connection:NetConnection;
private var responderSet:Responder;

private var responderGet:Responder;

 public function Main() {
//注册鼠标事件
btnSet.addEventListener(MouseEvent.CLICK, setData);
btnGet.addEventListener(MouseEvent.CLICK, getData);
//设置responder
responderSet = new Responder(onResultSet, onFault);
responderGet = new Responder(onResultGet, onFault);
connection = new NetConnection;
//链接gateway
connection.connect(gateway);

}

 //发送数据给amfphp
public function setData(_evt:MouseEvent):void {
//获取输入框内的数据
var info1 = txtInput1.text;
var info2 = txtInput2.text;
var info3 = txtInput3.text;
//调用amfphp的函数
connection.call("EasyAMF.setData", responderSet, info1,info2,info3);
txtResponse.text = "Sending Data to AMFPHP";

}

 //接收来自amfphp的数据
public function getData(_evt:MouseEvent):void {
connection.call("EasyAMF.getData",responderGet);
txtResponse.text = "Geting data from AMFPHP";

}

 //成功调用amfphp函数后的处理函数
private function onResultSet(result:Object):void {
txtResponse.text = String(result);

}

 private function onResultGet(result:Object):void {
var aryRs:Array=new Array(); //用一个数组来接收返回的记录
aryRs=result["serverInfo"]["initialData"];
rsinput1.text=aryRs[0][1]; //显示数据
rsinput2.text=aryRs[0][2];
rsinput3.text=aryRs[0][3];

}

 //调用amfphp函数失败后的处理函数
private function onFault(fault:Object):void {
txtResponse.text = String(fault.description);
}
}

< ?php
class EasyAMF
{
public function EasyAMF(){

 global $host,$dbTable, $dbPass,$dbId;
$host = "localhost";
$dbId = "root";
$dbPass = "";

$dbTable = "amfphp";

 $dblink = mysql_connect($host,$dbId,$dbPass);
mysql_select_db($dbTable);
mysql_query("SET NAMES UTF8");
if(!$dblink)
{
die('Connection Impossible:' . mysql_error());
}
}
public function setData($info1,$info2,$info3)
{
$sql="INSERT INTO info (id ,info1 ,info2 ,info3)VALUES (NULL , '$info1', '$info2', '$info3');";
$rs=mysql_query($sql);
if(!$rs==1){
return "failed";
}else{
return "success";
}
}
public function getData()
{
$sql="SELECT * FROM info ORDER BY id DESC LIMIT 1";
$rs=mysql_query($sql);
return $rs;
}

}
?>

甜柠檬 2017-09-15 1 楼

难道双方不是通过socket或者走http通信吗?数据交互格式自定义一下,序列化协议可以选择json或者protobuf之类的。