Actionscript и xml - Гуру должен приготовить фарш из этого вопроса :-) - PullRequest
0 голосов
/ 20 августа 2009

Я надеялся, что кто-то может мне помочь с этим Actionscript (2)

Я хочу загрузить изображение в мой флэш-файл, а затем назначить изображение из папки с помощью файла XML - и затем сделать его ссылкой на URL-адрес в файле XML

xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = function(loaded) {    if (loaded) {       loadMovie(_root.imagePath = this.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue, imageLoader);         loadMovie(_root.imageurl = this.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue, imageLoader);      imagePath.text =
_root.imagePath;        imageurl.text = _root.imageurl;     } else {        trace("file not loaded!");  } }; xmlData.load("/flash/languages.xml");

Вот мой xml-файл:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <myImage> <imagePath>/flash/image1.jpg</imagePath> <imageurl>/flash/image1.html</imageurl> </myImage> <myImage> <imagePath>/flash/image2.jpg</imagePath> <imageurl>/flash/image2.html</imageurl> </myImage> <myImage> <imagePath>/flash/image3.jpg</imagePath> <imageurl>/flash/image3.html</imageurl> </myImage>

Ответы [ 3 ]

0 голосов
/ 21 августа 2009

Не делая этого за вас, общая идея выглядит примерно так:

var nodes:Array = xmlData.childNodes;
var l:Number = nodes.length;
var currNode:XMLNode = null;
var mv:MovieClip

for( var i:Number = 0; i < l; i )
{
    currNode = nodes[ i ].firstChild;
    mv = ?? //use createEmptyMovieClip or a stage instance, or some such.
    mv.loadMovie( currNode.nodeValue );

    // You may need to futz with this line, but it should work.
    mv.onRelease = function(){ getURL( currNode.nextSibling.nodeValue ) }
}

Вот полезная тема. http://www.photoshopcafe.com/cafe/viewthread.php?tid=44914

0 голосов
/ 21 августа 2009

Я бы использовал MovieClipLoader, потому что он лучше обрабатывает события, когда вы хотите назначить черты для MovieClip (или в данном случае изображения) после его загрузки.

Этот код не проверен. И этот код не завершен! Это просто чтобы дать вам идею. Там вы заметите некоторые комментарии, где я говорю вам, что вам придется размещать свои изображения самостоятельно. То есть вам придется учитывать размеры ваших изображений и корректировать _x и _y каждого из них после его загрузки.

Другое дело, это не будет работать очень хорошо, если вы нажмете CTRL + ENTER для тестирования в Flash IDE, потому что он использует корневые относительные URL для ваших изображений и ссылок. Так как Flash IDE не работает на веб-сервере, он не сможет найти ваши изображения! Возможно, вы захотите использовать специальный тестовый XML-файл при отладке в Flash IDE.

Кроме того, убедитесь, что в вашем XML есть корневой узел. Это просто плохой XML - не иметь корневого узла.

XML

<?xml version="1.0" encoding="utf-8"?>
<root>
   <myImage> 
      <imagePath>/flash/image1.jpg</imagePath> 
      <imageurl>/flash/image1.html</imageurl> 
   </myImage> 
   <myImage> 
      <imagePath>/flash/image2.jpg</imagePath> 
      <imageurl>/flash/image2.html</imageurl> 
   </myImage> 
   <myImage> 
      <imagePath>/flash/image3.jpg</imagePath> 
      <imageurl>/flash/image3.html</imageurl> 
   </myImage>
</root>

Actionscript (кадр 1):

var xmlData:XML = new XML(); 
xmlData.ignoreWhite = true; 
xmlData.onLoad = function(loaded) {    
    if (loaded) {       
        for(var i = 0; i < this.firstChild.childNodes.length; i++) {
            var mc:MovieClip = _root.createEmptyMovieClip("item" + i, _root.getNextHighestDepth());
            var node:XMLNode = this.firstChild.childNodes[i];
            loadMovieClip(mc, node);
        }
    } else {                
        trace("file not loaded!");      
    } 
}; 
xmlData.load("/flash/languages.xml");
function loadMovieClip(mc:MovieClip, node:XMLNode) {
    var loadListener:Object = new Object();
    loadListener.onLoadInit = function(target:MovieClip, httpStatus:Number) {
        //Be sure to do your positioning here!!! You probably
        // don't want to stack them on top of each other.
        // I didn't do that so you'll have to do it yourself.
        target._x = 30;
        target._y = 30;
        var url = node.childNodes[1].firstChild.nodeValue;
        target.onMouseUp = function() {
            getURL(url);
        }
        //be sure to do positioning of your text field too.
        var txt:TextField = _root.createTextField(target._name + "_text", _root.getNextHighestDepth(), 30, 100, 100, 20);
        txt.text = url;
        txt.type = "static";
        txt.onMouseUp = function() {
            getURL(url);
        }
    }
    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(loadListener);
    mcl.loadClip(node.childNodes[0].firstChild.nodeValue, mc);
}

Надеюсь, это поможет.

0 голосов
/ 20 августа 2009

попробовать:

imageurl.htmlText = '<a href="'+_root.imageurl+'">image link</a>';

если вы используете TextField, нарисованный на сцене с IDE, убедитесь, что HTML (кнопка <>) включен. Так и должно быть.

удачи!

...