1

我想知道是否可以从 AS3 调用 PHP 脚本并让它只识别回显的变量。例如。

我的 PHP 脚本名为 GetMyVars.php

<?
Some code...
more code..

// I want to get these vars below into flash as3

echo "$MyVars"
echo "$MoreVars"

?>

Flash AS3 脚本调用 GetMyVars.php

var fl_TextLoader:URLLoader = new URLLoader();
var fl_TextURLRequest:URLRequest = new URLRequest("GetMyVars.php");

fl_TextLoader.addEventListener(Event.COMPLETE, fl_CompleteHandler);

function fl_CompleteHandler(event:Event):void
{
var textData:String = new String(fl_TextLoader.data);

 trace(fl_TextLoader.MyVars); /// I want this var in Flash
 trace(fl_TextLoader.MoreVars);  /// and this one too. :)
}

fl_TextLoader.load(fl_TextURLRequest);

或者最好的方法是什么。简而言之,我想做的是有一个充满图像的文件夹。我希望 php 读取这些图像并将它们分解为数组。然后我希望能够让 Flash 将文件名放入一个数组中并加载相互叠加的图像。也许有一种更简单的方法可以做到这一点。谢谢你的帮助。

4

3 回答 3

1

要获取 php 目录中的所有文件:

<?php

   $files = glob("yourdir/*.*");

   echo json_encode($files);
?>

在 AS3 端调用该 php 文件时,它会为您提供一个 json 编码的文件名数组,然后您可以对其进行解码以获取数组并加载图像:

var fl_TextLoader:URLLoader = new URLLoader();
var fl_TextURLRequest:URLRequest = new URLRequest("GetMyVars.php");

fl_TextLoader.addEventListener(Event.COMPLETE, fl_CompleteHandler);

function fl_CompleteHandler(event:Event):void
{
   var textData:String = new String(fl_TextLoader.data);
   var images:Array = JSON.decode(textData);
   for each (var imageFileName:String in images)
   {
      loadImage(imageFileName);
   }
}

function loadImage(imageFileName:String)
{
   //image loading code
}

fl_TextLoader.load(fl_TextURLRequest);

显然我还没有测试过这段代码,但它应该能让你开始。

于 2012-08-09T01:17:41.400 回答
1

我建议将 PHP 中的内容作为 XML 文件输出,然后在 ActionScript 中解析 XML。

PHP

//Output this file as XML (not really necessary)
header("Content-type: text/xml");

//Some code...

echo "<root>
<xmlNode1>" . $MyVars . "</xmlNode1>
<xmlNode2>" . $MoreVars . "</xmlNode2>
</root>";

ActionScript [从这里]

var xmlString:URLRequest = new URLRequest("file.php");
var xmlLoader:URLLoader = new URLLoader(xmlString);
xmlLoader.addEventListener(Event.COMPLETE, init);

function init(event:Event):void{
  var xDoc:XMLDocument = new XMLDocument();
  xDoc.ignoreWhite = true;

  var myXML:XML = xmlLoader.data as XML;
  xDoc.parseXML(myXML.toXMLString());
  trace(xDoc.xmlNode1); //Outputs whatever $MyVars equals
}

我没有测试上面的代码,但它应该可以工作。

希望有帮助。

于 2012-08-09T01:21:15.157 回答
0

我不久前也这样做了。这实际上很容易。只需在您的输出中使用&=,AS3 就会选择它。它类似于 URL 中的 GET 变量。

所以在你的 PHP 中:

echo "var1=fooooo&var2=barrrr";

现在,在你的闪光中:

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,onLoaded);
loader.load(new URLRequest("your-script.php"));
var variables:URLVariables = new URLVariables();


function onLoaded(evt:Event):void
{
var data:URLVariables = new URLVariables(evt.target.data);

trace data.var1;// access var1 with data.var1
trace data.var2;//same with var2 (data.var2)


}

要获取特定目录中的所有图像,您可以使用glob(). glob()将返回特定目录中所有图像文件名的 assoc 数组。

因此,假设您jpg在文件夹中有大量图像bob

$imageNames = glob('bob/*.jpg');//you're probably wondering what the * is...it's a wildcard (which basically means any letter/number)

//define end var (the var that will contain the end content to print)
$flash_readMeNOW = '';

//define counter
$i = 0;

//now loop through that array and append it to a var
foreach ( $imageNames as $name )
{

//url-encode the name
$name = urlencode($name);

//increment i
$i++;

//append name with incremented number
$flash_readMeNOW .= '&imageName'.$i.'='.$name;


}

//and now print out the data
echo $flash_readMeNOW;

现在使用我上面提供的 Flash 代码,并使用 、 、 等访问所有data.imageName1图像data.imageName2名称data.imageName3...

哦,还有一件事,请确保您没有在此脚本中打印任何其他内容。为什么?由于某种原因,Flash 将无法获取它。这包括不可见的东西,例如空格和换行符。因此,如果您使用结束 php 标记 ( ?>),请确保其下方没有内容(因为它将被打印出来)。

于 2012-08-09T04:44:39.820 回答