Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Значение атрибута из XML (http://www.flasher.ru/forum/showthread.php?t=179549)

Ar4er 17.05.2012 04:17

Значение атрибута из XML
 
Вложений: 1
Загружаю случайную картинку из списка в xml файле. В xml файле прописан атрибут к каждой картинке.
По клику картинка меняется. Вопрос: как узнать атрибут той картинки по которой кликнули?
Может кто знает, как решить проблему. Буду благодарен. Проект в flashdevelop во вложении.
Код AS3:

package 
{
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
 
 
        public class Main extends Sprite
        {
        private const XML_PATH:String = "data.xml";
        private var xml:XML;
        private var Pict:Bitmap;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
 
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
        var xmlLoader:URLLoader = new URLLoader();
        xmlLoader.load(new URLRequest(XML_PATH));
        xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
}
 
 
 private function xmlLoaded(e:Event):void {
  e.target.removeEventListener(Event.COMPLETE, xmlLoaded);
  xml = new XML(e.target.data);
  var randomValue:uint = Math.floor(Math.random() * (xml.settings.pictures.children().length() ));
  var PictLoader:Loader = new Loader();
  PictLoader.load(new URLRequest(xml.settings.pictures.children()[randomValue].@url));
  PictLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, PictLoaded);
 
 }
 
 private function PictLoaded(e:Event):void {
  e.target.removeEventListener(Event.COMPLETE, PictLoaded);
 
  Pict = e.target.content as Bitmap;
  Pict.smoothing = true;
  var container:Sprite = new Sprite();
  container.addChild(Pict);
  addChild(container);
  container.addEventListener(MouseEvent.CLICK, onClick);
  }
  private function onClick(e:Event):void
  {
        trace('здесь нужно выводить атрибут "vid" из xml соответствующий той картинке на которую кликают. Как???');
        init();
  }
}       
}


ObOs 17.05.2012 10:35

Допустим создать свой класс картинки MyImage у которого есть свойство vid

И зачем вы при каждом клике повторно грузите тот же xml файл?

Можно так
Код AS3:

package 
{
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
 
 
        public class Main extends Sprite
        {
        private const XML_PATH:String = "data.xml";
        private var xml:XML;
        private var pict:Bitmap;
        private var imageList:Array = new Array();
        private var imageContener:Sprite;
 
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
 
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        var xmlLoader:URLLoader = new URLLoader();
                        xmlLoader.load(new URLRequest(XML_PATH));
                        xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedHandler);
                }
 
                private function xmlLoadedHandler(e:Event):void {
                        xml = new XML(e.target.data);
                        var xmlList:XMLList = xml.settings.pictures.children();
                        for (var i:int = 0; i < xmlList.length(); i++) {
                                var imgXML:XML = new XML(xmlList[i]);
                                var myImage:Object = new Object();
                                myImage.url = imgXML.@url;
                                myImage.vid = imgXML.@vid;
 
                                imageList.push(myImage);
                        }
                        imageContener = new Sprite();
                        addChild(imageContener);
                        imageContener.addEventListener(MouseEvent.CLICK, imageClickHandler);
                        imageClickHandler(null);
                }       
 
                private function imageClickHandler(e:MouseEvent):void {
                        var randomValue:uint = Math.floor(Math.random() * imageList.length);
                        trace('vid = ' + imageList[randomValue].vid);
                        var loader:Loader = new Loader();
                        loader.load(new URLRequest(imageList[randomValue].url));
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadedHandler);
                }
 
                private function imageLoadedHandler(e:Event):void {
 
                        pict = e.target.content as Bitmap;
                        pict.smoothing = true;
                        imageContener.addChild(pict);
                }
 
}       
}


Ar4er 17.05.2012 12:20

Большое спасибо, ObOs! Все заработало как надо.


Часовой пояс GMT +4, время: 16:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.