我有一个用Visual Basic编写的简单独立应用程序,我正在使用PHP / javascript移植到基于浏览器的应用程序。
最初的VB应用程序有一些带有令牌和点计数器的简单嵌入式Flash游戏。令牌和点值作为变量在应用程序和游戏之间传递。
我正在尝试在我的PHP端口中实现相同的效果而不修改actionscript代码(使用已存在的actionscript中的变量)。
下面是从数据库加载值并使用FlashVars将该值发布到flash的Visual Basic代码:
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;
这是动作脚本中使用的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数据库。
对此的任何见解都会非常有帮助, 谢谢!
答案 0 :(得分:0)
PHP不能那样工作;它不会坐在那里,处于一种永远的状态,你可以随时联系和交谈。您需要一种机制来向无状态后端发送和接收数据。现在,幸运的是,flash与cookie完美配合,因此使用PHP会话不会产生问题。所以,问题是你是想通过Flash将数据传递给PHP,还是通过flash将变量传递给Javascript,然后将它们发送给PHP。
直接通过闪存路由(请耐心等待,这是AS 2.0,但应该有效):
的ActionScript:
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...
}
然后调用该函数很简单:
getData('saveVar',{varname: 'foo', varvalue: foo},mySuccessFunction);
或者,您可以使用XHR / AJAX设置内容并使用flash.external.ExternalInterface.call()
方法将变量传递给Javascript,但设置此类解决方案超出了此答案的范围。
长话短说,由于PHP作为基于请求的无状态Web服务的性质,没有像在VB中那样快速简单地完成它。你将不得不采用另一种机制。