我想知道我是否可以从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将文件名放入一个数组中,并将图像加载到彼此之上。也许有一种更简单的方法可以做到这一点。谢谢你的帮助。
答案 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.imageName1
,data.imageName2
,data.imageName3
访问所有图片名称,等等...
哦,还有一件事,请确保您不会在此脚本中打印任何其他内容。为什么?由于某种原因,Flash无法接受它。这包括无形的东西,如空格和换行符。因此,如果您正在使用关闭的php标记(?>
),请确保其下方没有内容(因为它将被打印出来)。