将Flash变量传递给PHP

时间:2010-05-13 20:09:54

标签: php javascript flash actionscript variables

我有一个用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数据库。

对此的任何见解都会非常有帮助, 谢谢!

1 个答案:

答案 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中那样快速简单地完成它。你将不得不采用另一种机制。