Передача Flash-переменных в PHP - PullRequest
0 голосов
/ 14 мая 2010

У меня есть простое отдельное приложение, написанное на Visual Basic, которое я портирую в приложение на основе браузера, используя PHP / javascript.

В оригинальном приложении VB есть несколько простых встроенных флеш-игр с жетонами и счетчиками очков. Значения токенов и точек передаются как переменные между приложением и игрой.

Я пытаюсь добиться того же эффекта в моем порту PHP без изменения кода ActionScript (используя переменные в ActionScript, которые уже существуют).

Ниже приведен код Visual Basic, который загружает значение из базы данных и публикует это значение во флэш-памяти с помощью FlashVars:

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, который используется в 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

Со временем я передам эти значения обратно в базу данных mySQL.

Любое понимание этого было бы чрезвычайно полезно, Спасибо!

1 Ответ

0 голосов
/ 14 мая 2010

PHP не работает так; это не будет сидеть без дела, в постоянном состоянии, с которым вы всегда можете связаться и поговорить. Вам понадобится механизм для отправки и получения данных на сервер без сохранения состояния. К счастью, Flash отлично работает с файлами cookie, поэтому использование PHP-сессий не вызывает проблем. Итак, вопрос в том, хотите ли вы передать данные в PHP через Flash или передать переменные в Javascript через Flash, а затем отправить их в 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 и передать переменные в Javascript с помощью метода flash.external.ExternalInterface.call(), но настройка такого решения выходит за рамки этого ответа.

Короче говоря, не существует быстрого и простого способа сделать это, как вы это делали в VB, из-за того, что PHP является веб-службой на основе запросов без сохранения состояния; вам придется использовать другой механизм.

...