将Flash变量传递给PHP
我有一个用Visual Basic编写的简单独立应用程序,我正在使用PHP/javascript将其移植到基于浏览器的应用程序 最初的VB应用程序有一些简单的嵌入式flash游戏,带有令牌和点数计数器。令牌和点值作为变量在应用程序和游戏之间传递 我试图在PHP端口中实现相同的效果,而不使用actionscript中已经存在的变量修改actionscript代码 下面是从数据库加载值并使用FlashVars将该值发布到flash的Visual Basic代码:将Flash变量传递给PHP,php,javascript,flash,actionscript,variables,Php,Javascript,Flash,Actionscript,Variables,我有一个用Visual Basic编写的简单独立应用程序,我正在使用PHP/javascript将其移植到基于浏览器的应用程序 最初的VB应用程序有一些简单的嵌入式flash游戏,带有令牌和点数计数器。令牌和点值作为变量在应用程序和游戏之间传递 我试图在PHP端口中实现相同的效果,而不使用actionscript中已经存在的变量修改actionscript代码 下面是从数据库加载值并使用FlashVars将该值发布到flash的Visual Basic代码: Private Sub loadPl
Private Sub loadPlayer()
Try
If CtblPoints.CheckPointsByID(mCard) Then
objPoints = CtblPoints.GettblPointsByID(mCard)
objPlayerAc = CtblPlayerAccount.GettblPlayerAccountByPlayerID(objPoints.AccountId)
objPlayer = CtblPlayer.GettblPlayerByID(objPlayerAc.PlayerID)
objPlayerBal = CtblPlayerBalance.GettblPlayerBalanceByID(objPlayerAc.PlayerID)
objPlayerAcDetail = CtblPlayerAccountDetail.GettblPlayerAccountDetailByAmount(objPoints.AccountId)
strTotalPoints = Convert.ToString(objPlayerAc.Points)
strTotalWin = Convert.ToString(objPlayerBal.TokenAmount)
'Dim intTokenAmount As Decimal = Convert.ToDecimal(objPlayerBal.TokenAmount)
'strTotalWin = Convert.ToString(Convert.ToInt64(intTokenAmount * 100))
flashPlayer.Size = panelGame.Size
flashPlayer.FlashVars = "totalEntries=" & strTotalPoints & "&credit=" & strTotalWin
flashPlayer.LoadMovie(0, strGameFile)
flashPlayer.Play()
Else
Me.Close()
Dim frmInvCrd As New frmInvalidCard
frmInvCrd.ShowDialog()
End If
Catch ex As Exception
End Try
我试图在PHP中重新创建它,但我不知道如何开始实现它
flash中的变量公开声明,并使用全局导入:
import com.atticmedia.console.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.media.*;
import flash.net.*;
import flash.system.*;
import flash.utils.*;
变量“totalEntries”的第一个声明是:
public var totalEntries:int = 0;
这是actionscript中使用的totalEntries片段
public function notifyServerOfUnwonCredits(param1)
{
var remainder:* = param1;
if (this.useServer)
{
this.targetWinAmount = 0;
this.cancelUpdateOverTime = F9.setEnterFrame(this.updateOverTime);
fscommand("OverTime", "" + remainder);
this.flashVarsUpdatedAction = function ()
{
originalTotalWin = totalWin;
return;
}// end function
;
}
else
{
this.setTotalEntries(100000);
this.setTotalWin(0);
}
return;
}// end function
最终,我将把这些值传递回mySQL数据库
对这一点的任何洞察都会非常有帮助,
谢谢 PHP不是这样工作的;它不会坐在那里,处于一种你可以随时联系和交谈的持续状态。您需要一种机制来向无状态后端发送和接收数据。幸运的是,flash可以很好地处理cookie,所以使用PHP会话不会产生问题。所以,问题是您是想通过Flash将数据传递给PHP,还是想通过Flash将变量传递给Javascript,然后将它们发送给PHP 直接通过flash路线与我分享,这是AS 2.0,但应该可以: 动作脚本:
function getData (path:String, req:Object, fn:Function) {
var q:Object = new LoadVars();
for (var prop in req) {
q[prop] = req[prop];
}
q.action = path;
q.onLoad = fn;
q.sendAndLoad("/hooks/integrate.php",q,"POST");
}
在本例中,我传递到一个文件并指定一个POST参数action,它告诉处理文件我要做什么
<?php
if (!isset($_POST['action'])) { die; }
switch($_POST['action']) {
case 'something':
// snip...
}
或者,您可以使用XHR/AJAX进行设置,并使用flash.external.ExternalInterface.call方法将变量传递给Javascript,但是设置这样的解决方案超出了本答案的范围
长话短说,由于PHP本质上是一个无状态的基于请求的web服务,所以没有像在VB中那样快速、简单的方法来实现它;您必须采用另一种机制。谢谢您的回复,这为我澄清了一些问题。如果你不介意的话,还有更多的问题。如果我使用javascript作为向PHP传递变量的中间人,我还需要对现有的actionscript进行更改吗?我理解您的观点,PHP是一个基于请求的无状态web服务,但javascript也是这样吗?我猜这个问题的答案是:我能做些什么来避免修改现有的actionscript代码库吗?这是可能的,因为只要页面没有刷新,javascript就会保持活动和持久性,但如果您将变量传递给PHP,这应该无关紧要。我假设您的flash应用程序会自动将您想要的任何变量作为其自身的属性提供,因此您也许可以对它们进行轮询,但老实说,我通常使用flash.external.ExternalInterface.call与JavaScript进行通信,所以我不能完全确定。
getData('saveVar',{varname: 'foo', varvalue: foo},mySuccessFunction);