AS3 Load Vars 只读 PHP 回显了 vars


AS3 Load Vars Read only PHP echoed vars?

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

我建议将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>";

动作脚本 [从这里]

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
}

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

希望有帮助。

要在 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);

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

我不久前也这样做了。这实际上很容易。只需在输出中使用&=,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.imageName1data.imageName2data.imageName3 等访问所有图像名称......

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