0

名前、説明、Xcor、Ycor などのデータを含む xml ファイルがあります。この場所のステージ上のオブジェクト表示のそれぞれを、xml X と Ycor に書き込むものを作成し、他の MC の異なる名前ごとに作成しました-うまく機能しますが、ロールオーバー後に MC の名前を表示するオプショントレースを試みると、常に表示されますname "Karkow" - しかし、この MC のすべてが xml ファイルで異なる名前を持っていたため、間違っています

なぜいつもクラクフが他の名前と対立するのか、あなたは何か分かりますか?

これは私のxmlコードです:

  <?xml version="1.0" encoding="utf-8" ?> 
- <XML>
- <myXMLList>
- <object>
  <name>Warszawa</name> 
  <opis>jakis opis</opis> 
  <Xcor>100</Xcor> 
  <Ycor>50</Ycor> 
  </object>
- <object>
  <name>Wroclaw</name> 
  <opis>jakis opis2</opis> 
  <Xcor>20</Xcor> 
  <Ycor>200</Ycor> 
  </object>
- <object>
  <name>Krakow</name> 
  <opis>jakis opis3</opis> 
  <Xcor>50</Xcor> 
  <Ycor>250</Ycor> 
  </object>
  </myXMLList>
  </XML>

そして、これは私のas3コードです:

import flash.display.MovieClip;
import flash.display.Shape;
import flash.accessibility.Accessibility;
import flash.display.DisplayObject;
import flash.geom.Point;
import flash.events.Event;
import flash.events.MouseEvent;




// Initialize the XML, place the xml file name, initialize the URLRequest
// put URLRequest into a new URLLoader, and add event listener on 
// myLoader listening for when the XML loading is complete
var myXML:XML = new XML();
var XML_URL:String = "miasta.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);

// Create the xmlLoaded function
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());

         // Run the "for each" loop to iterate through all of the menu items listed in the external XML file
         for each (var object:XML in myXML..object) {

                 // Access the value of the "name" node in our external XML file
                 var name:String = object.name.toString();
                 // Access the value of the "opis" node in our external XML file
                 var opis:String = object.opis.toString();
                 // zmiana koordynat na string
                 var Xcor:String = object.Xcor.toString();
                 var Ycor:String = object.Ycor.toString();
                 //change coordinate to number
                 var XcorNum = Number(Xcor);
                 var YcorNum = Number(Ycor);



                 if (name == "Warszawa") {
                     var myMovieClip:MovieClip = new Policja();


                 }

                 else if (name == "Wroclaw") {

                 var myMovieClip:MovieClip = new owal();

                 }

                  else if (name == "Krakow") {

                 var myMovieClip:MovieClip = new city();

                 }
addChild(myMovieClip);
// Set the location of the new MovieClip
myMovieClip.x = XcorNum;
myMovieClip.y = YcorNum;

myMovieClip.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);



myMovieClip.buttonMode = true;
myMovieClip.useHandCursor = true;




function onRollOverHandler(myEvent:MouseEvent){
    trace (name);
}
4

2 に答える 2

0

わかりました今は機能しています

myMovieClip.cityName = 名前;

各 myMovieClip、および最後に

function onRollOverHandler(e:MouseEvent){
    trace (MovieClip(e.currentTarget),name);
}

手伝ってくれてありがとう

于 2013-02-13T09:37:34.320 に答える
0

ほとんどの場合、MouseEvent-handler はクロージャーとして定義されているためです。name へのすべてのアクセスは、常に name が割り当てられた最後の値になりました。

MovieClip のプロパティとして name を割り当て、これを介して RollOverHandler からアクセスすることをお勧めします

...
for each (var object:XML in myXML..object) {
    var name:String = object.name.toString();

    if (name == "Warszawa") {
        var myMovieClip:MovieClip = new Policja();
    }
    else if (name == "Wroclaw") {
        var myMovieClip:MovieClip = new owal();
    }
    else if (name == "Krakow") {
        var myMovieClip:MovieClip = new city();
    }

    addChild(myMovieClip);
    myMovieClip.cityName = name;
    myMovieClip.addEventListener(MouseEvent.ROLL_OVER, 
        function (myEvent:MouseEvent){
            trace (this.name);
        });
}

ps: あなたの例には、少なくとも最後の "}" が欠けていると思います

于 2013-02-12T19:46:30.483 に答える