在 AS3 中使用 XML 文件创建按钮


creating buttons using XML file in AS3?

我正在尝试使用 AS3 中的 XML 文件中的数据创建按钮。

但是,当我运行代码时,我没有收到任何错误,但也没有任何东西加载到我的闪存文件中!

我正在使用PHP文件创建XML文件。

因此,当我单击闪存文件中的按钮时,我应该将数据发送到XML(使用PHP生成),然后将数据以闪存文件中的按钮形式加载到XML文件中

这是我的 AS3 代码:

// Set the "y" location on stage where the first btn will live
var yPlacement:int = 130;
// Set the "x" location on stage where all btns will line up vertically
var xPlacement:int = 10;
// Set the distance each btn should be apart here
var distance:int = 18;
// Format the text appearance here
var format:TextFormat = new TextFormat();
format.color = 0x000000;
format.font = "Verdana";
format.size = 11;
//format.bold = true;
format.kerning = false;

getitems.addEventListener(MouseEvent.MOUSE_DOWN, checkLoginL);


     function checkLoginL (e:Event):void {
            /*
            check fields before sending request to php
            */
            if (myText2.text == "") {
                /*
                if username or password fields are empty set error messages
                */
                if (myText2.text == "") {
                myText2.text = "Enter your email";
                } 

            } else {
                /*
                init function to process login
                */
                processLoginL();
            }
        }

     function processLoginL ():void {

        var phpVarsL:URLVariables = new URLVariables();
            var myXML:XML = new XML();
            var XML_URL:String = "php/MYPHPFILE.php";
            var myXMLURL:URLRequest = new URLRequest(XML_URL);
            myXMLURL.method = URLRequestMethod.POST;
            var myLoader:URLLoader = new URLLoader(myXMLURL);

            myXMLURL.data = phpVarsL;

            myLoader.addEventListener("complete", xmlLoaded);
            phpVarsL.systemCallL = "checkLoginL";
            phpVarsL.myText2 = myText2.text;


function xmlLoaded(event:Event):void {
    // Place the xml data into the myXML object
    myXML = XML(myLoader.data);

    // Initialize and give var name to the new external XMLDocument
    var xmlDoc:XMLDocument = new XMLDocument();
    // Ignore spacing around nodes
    xmlDoc.ignoreWhite = true;
    // Define a new name for the loaded XML that is the data in myLoader
    var menuXML:XML = XML(myLoader.data);
    // Parse the XML data into a readable format
    xmlDoc.parseXML(menuXML.toXMLString());
    // Set the index number of our loop, increments automatically
    var i:Number = 0;
    // Run the "for each" loop to iterate through all of the menu items listed in the external XML file
    for each (var MenuItem:XML in myXML..MenuItem) {
    // Access the value of the "pagenum" node in our external XML file
    var pagenum:String = MenuItem.pagenum.toString();
    // Access the value of the "pagetext" node in our external XML file
    var pagetext:String = MenuItem.pagetext.toString(); 
    // Access the value of the "pagepicture" node in our external XML file
    var pagepicture:String = MenuItem.pagepicture.toString();
    // Just some trace I used while testiing
     //trace(pagenum);
                             // This all pertains to the style of the button, alter values to your liking
                             var type:String = GradientType.LINEAR;
                             var colors:Array = [0xFFFFFF, 0xCCCCCC];
                             var alphas:Array = [1, 1];
                             var ratios:Array = [0, 255];
                             var spreadMethod:String = SpreadMethod.PAD;
                             var interp:String = InterpolationMethod.LINEAR_RGB;
                             var focalPtRatio:Number = 0;
                             var matrix:Matrix = new Matrix();
                             var boxWidth:Number = 16;
                             var boxHeight:Number = 20;
                             var boxRotation:Number = Math.PI/2; // 90˚
                             var tx:Number = 0;
                             var ty:Number = 0;
                             matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);
                             var rect:Shape = new Shape;
                             rect.graphics.beginGradientFill(type, colors, alphas, ratios, matrix, spreadMethod, interp, focalPtRatio);
                             rect.graphics.lineStyle(1, 0x999999);
                             rect.graphics.drawRect(0, 0, boxWidth, boxHeight);
                             // This all pertains to the text fields that give our buttons their label, alter values to your liking
                             var myText:TextField = new TextField();
                             //myText.embedFonts = true;
                             myText.autoSize = TextFieldAutoSize.LEFT;
                             myText.antiAliasType = AntiAliasType.ADVANCED;
                             myText.defaultTextFormat = format;
                             myText.selectable = false;
                             myText.mouseEnabled = false;
                             myText.text = pagenum;
                             myText.x = 2;
                             myText.y = 2;
                             addChild(myText);
                             // Create MovieClip holder for each button graphic and text label
                             var clip_mc = new MovieClip();
                             // Add the rectangle graphic
                             clip_mc.addChild(rect);
                             // Add the text field
                             clip_mc.addChild(myText);
                             // Put the new movieClip on stage now
                             addChild(clip_mc);
                             // Make the mouse button mode true for the movieclip so user knows it is a button
                             clip_mc.buttonMode = true;                      
                             // Offset each one in the loop to make sure they don't just get put right on top of each other
                             xPlacement = xPlacement + distance;
                             // Now apply it in its offset Y position to the stage
                             clip_mc.y = yPlacement;
                             // X position it will be placed on stage
                             clip_mc.x = xPlacement;
                             var pictLdr:Loader = new Loader();
                             var pictURL:String = pagepicture;
                             var pictURLReq:URLRequest = new URLRequest(pictURL);
                             pictLdr.load(pictURLReq);
                             // Access the pic value and ready it for setting up the Click listener, and function
                             clip_mc.clickToPic = pictLdr;
                             // Access the text value and ready it for setting up the Click listener, and function
                             clip_mc.clickToText = pagetext;
                             // Add the mouse event listener to the moviClip button
                             clip_mc.addEventListener (MouseEvent.CLICK, clipClick);
                             //Add event listeners (used for animating the buttons)
                             clip_mc.addEventListener (MouseEvent.MOUSE_OVER, onMouseOver);
                             clip_mc.addEventListener (MouseEvent.MOUSE_OUT, onMouseOut);
                             // Set the function for what happens when that button gets clicked
                             function clipClick(e:Event):void {
                                 pagewindow.pageText_txt.text = e.target.clickToText;

                                 pagewindow.pagepic.addChild(e.target.clickToPic);
                             }
                             // increment the loop index number for trace testing
                             i++;
                             //trace(i);

    }


}
// Set the mouse over function for all movieclip buttons
function onMouseOver (e:Event):void {
// Create the filters and add them to an array
var bevel:BevelFilter = new BevelFilter();
bevel.distance = 1;
bevel.angle = 45;
bevel.shadowColor = 0x666666;
bevel.shadowAlpha = 0.5;
bevel.strength = 4;
bevel.quality = BitmapFilterQuality.MEDIUM;
bevel.type = BitmapFilterType.INNER;
bevel.knockout = false;
var glow:GlowFilter = new GlowFilter();
glow.color = 0x79B3E1;
glow.alpha = 1;
glow.quality = BitmapFilterQuality.MEDIUM;
// Pack the filter paramters into the array variable
var filtersArray:Array = new Array(bevel, glow);
// Assign the filters array to the display object to apply the filter
e.target.filters = filtersArray;
}
// Set the mouse out function for all movieclip buttons
function onMouseOut (e:Event):void {
    // Remove the Filters on Mouse Out
    e.target.filters = null;
}
}

这就是我使用 PHP 创建 XML 文件的方式:

<?php 
session_start();
header ("content-type: text/xml");
/*
connect to our database
*/
/*
we post the variables we recieve from flash
*/
$myText2 = $_POST['myText2'];
/* 
if flash called the login system the code below runs
*/
$myText2 = $_POST['myText2'];
if ($_POST['systemCallL'] == "checkLoginL") {
// Initialize the xmlOutput variable
$xmlBody = '<?xml version="1.0" encoding="iso-8859-1"?>';
$xmlBody .= "<XML>";
$xmlBody .= "<MenuList>";
// Run a select query to get my letest 6 items
// Connect to the MySQL database  
include "connectxml.php"; 
//$sql = "SELECT DISTINCT product_name FROM `ctegories_and`";
$sql = "SELECT * FROM `restItems` WHERE restarantName='$myText2'";
$query = mysqli_query($db_conx, $sql);
$productCount = mysqli_num_rows($query); // count the output amount
if ($productCount > 0) {
    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
             $id = $row["id"];
             $product_name = $row["product_name"];
$xmlBody .= '<MenuItem>
               <pagenum>'.$product_name.'</pagenum>
         <pagepicture>http://babygifts4u.co.uk/austinApp/php/pageThumbs/page1thumb.jpg</pagepicture>
         <pagetext>
         Page 1 text is blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
         </pagetext>
         </MenuItem>';
}
}// End while loop
$xmlBody .= "</MenuList>";
$xmlBody .= "</XML>";
}
echo $xmlBody;
?>

如果我从 PHP 代码中删除if ($_POST['systemCallL'] == "checkLoginL") { },AS3 代码会正确加载数据并创建按钮! 但我不想那样做!

任何帮助将不胜感激。

提前谢谢。

下面是一个使用 POST 的请求示例

var loader : URLLoader = new URLLoader();  
var request : URLRequest = new URLRequest("/index.php");  
request.method = URLRequestMethod.POST;  
var variables : URLVariables = new URLVariables();  
variables.key1 = "value1";  
variables.key2 = "value2";  
request.data = variables;  
//  Handlers  
loader.addEventListener(Event.COMPLETE, on_complete);  
loader.load(request);  
private function on_complete(e : Event):void{  
       // process
}

来源:http://scriptcult.com/subcategory_9/article_442-post-request-data-in-as.htm

请注意,loader.load 需要传递请求