AS3 Load Vars只读PHP回声变量?

时间:2012-08-09 01:07:30

标签: php actionscript-3 flash variables loadvars

我想知道我是否可以从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将文件名放入一个数组中,并将图像加载到彼此之上。也许有一种更简单的方法可以做到这一点。谢谢你的帮助。

3 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分: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 [来自here]

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
}

我没有测试过上面的代码,但它应该有用。

希望有所帮助。

答案 2 :(得分:0)

我前一段时间也这样做过。它实际上非常简单。只需在输出中使用&=,AS3就会选择它。它就像URL中的GET变种一样。

所以在PHP中:

echo "var1=fooooo&var2=barrrr";

现在,在你的flash中:

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()将返回特定目录中图像的所有文件名的关联数组。

因此,假设您在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.imageName1data.imageName2data.imageName3访问所有图片名称,等等...

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