2010-05-13 6 views
0

J'ai une simple application autonome écrite en Visual Basic que je porte sur une application basée sur un navigateur en utilisant PHP/javascript.Passer des variables Flash à PHP

L'application VB originale comporte des jeux flash intégrés simples avec des compteurs de jetons et de points. Les valeurs de jeton et de point sont transmises en tant que variables entre l'application et le jeu. J'essaye de réaliser le même effet dans mon port de PHP sans modifier le code d'actionscript (en utilisant les variables dans actionscript qui existent déjà).

est Ci-dessous le code Visual Basic qui est le chargement d'une valeur à partir d'une base de données et en affichant cette valeur à l'aide de FlashVars: clignote

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 

Je suis en train de recréer ce en PHP, mais je suis à une perte à la façon de commencer à le mettre en œuvre.

Les variables en flash sont déclarés publiquement, et les importations mondiales utilisées:

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.*; 

Première déclaration de la variable 'totalEntries' est:

public var totalEntries:int = 0; 

ce qui est un petit bout de totalEntries utilisé dans le actionscript

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 

Finalement, je vais transmettre ces valeurs à un myS Base de données QL.

Un aperçu de ce serait extrêmement utile, Merci!

Répondre

0

PHP Ne fonctionne pas comme ça; il ne va pas rester assis, dans un état persistant que vous pouvez toujours contacter et parler. Vous aurez besoin d'un mécanisme pour envoyer et recevoir des données au backend sans état. Maintenant, heureusement, Flash fonctionne parfaitement avec les cookies, donc l'utilisation de sessions PHP ne pose pas de problème. Donc, la question est de savoir si vous voulez passer les données à PHP via Flash, ou passer les variables à Javascript via flash, puis les envoyer à PHP.

itinéraire direct via flash (ours avec moi, c'est AS 2.0, mais devrait fonctionner):

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"); 
} 

dans cet exemple, je passe à un seul fichier et spécifiez un paramètre POST, "action", qui indique au fichier de gestion ce que je veux faire.

<?php 
if (!isset($_POST['action'])) { die; } 
switch($_POST['action']) { 
    case 'something': 
// snip... 
} 

Et puis en appelant la fonction est un jeu d'enfant:

getData('saveVar',{varname: 'foo', varvalue: foo},mySuccessFunction); 

Sinon, vous pouvez mettre quelque chose en utilisant XHR/AJAX et de transmettre les variables à Javascript en utilisant la méthode flash.external.ExternalInterface.call(), mais la mise en place comme une solution dépasse le cadre de cette réponse. En bref, il n'existe pas de moyen simple et rapide de le faire comme vous l'avez fait dans VB en raison de la nature de PHP en tant que service Web basé sur une requête sans état; vous devrez employer un autre mécanisme.

+0

Merci pour la réponse, cela efface certaines choses pour moi. En plus de question cependant, si cela ne vous dérange pas. Si j'utilisais javascript en tant qu'intermédiaire pour passer une variable à PHP, aurais-je encore besoin de modifier l'actioncript existant? Je comprends que vous avez raison de dire que PHP est un service web basé sur une requête sans état, mais le javascript est-il le même? Je suppose que cette question résout en quelque sorte: Est-ce que je peux faire quelque chose pour éviter de modifier le code ActionScript existant? – Vorathe

+0

Cela pourrait être possible, puisque le javascript restera actif et persistant tant que la page n'est pas rafraichie, si vous passez les variables à PHP cela ne devrait pas avoir d'importance. Je suppose que votre application Flash rend automatiquement toutes les variables que vous voulez disponibles en tant que propriétés de lui-même, donc vous pourriez peut-être interroger pour eux, mais pour être honnête, j'utilise généralement flash.external.ExternalInterface.call pour communiquer avec JavaScript, Je ne suis pas tout à fait sûr. – Dereleased

Questions connexes