2010-05-13 65 views
0

我有一个用Visual Basic编写的简单的独立应用程序,我正在使用PHP/javascript移植到基于浏览器的应用程序。将Flash变量传递给PHP

原始的VB应用程序有一些简单的带有令牌和点计数器的嵌入式Flash游戏。令牌和积分值作为应用程序和游戏之间的变量传递。

我想在不修改动作代码(使用已存在的动作中的变量)的情况下在我的PHP端口中实现相同的效果。

下面是Visual Basic代码与加载从数据库中的值,并发布该值闪烁使用Flash变数:

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重建这一点,但我在一个损失以及如何开始实施它。

闪光灯的变量公开宣布,并使用全球进口:

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的SNIP动作

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 

最终我会将这些值传回给myS QL数据库。

任何洞察到这将是非常有益的, 谢谢!

回答

0

PHP不能这样工作;它不会坐在一起,处于持续的状态,您可以随时联系和交谈。您需要一种机制来向无状态后端发送和接收数据。幸运的是,Flash可以很好地处理cookies,因此使用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); 

或者,你可以通过使用flash.external.ExternalInterface.call()方法,但建立这样使用XHR/AJAX一些设置,并通过变量为Javascript一个解决方案超出了这个答案的范围。由于PHP本质上是一种无状态的基于请求的Web服务,所以没有像VB中那样快速简单的方法来做到这一点;你将不得不采用另一种机制。

+0

感谢您的回应,这为我清除了一些东西。 虽然如果你不介意,还有更多的问题。 如果我使用JavaScript作为中间人将一个变量传递给PHP,我是否还需要对现有的动作进行更改?我知道你是关于PHP是一个无状态的基于请求的Web服务的观点,但JavaScript的方式是一样的吗? 我想这个问题有种解决方法:有什么我可以做,以避免修改现有的actionscript代码库? – Vorathe 2010-05-14 13:26:44

+0

这可能是可能的,因为只要页面没有刷新,JavaScript就会保持活动和持久性,认为如果您将变量传递给PHP,它应该没关系。我假设你的Flash应用程序会自动将你想要的任何变量作为自己的属性使用,所以你可以为它们进行轮询,但说实话,我通常使用'flash.external.ExternalInterface.call'来与JavaScript进行通信,所以我不完全确定。 – Dereleased 2010-05-14 22:35:32