Actionscript和xml - 一个大师应该对这个问题做出剁碎:-)

时间:2009-08-20 18:12:43

标签: xml flash actionscript

我希望有人可以帮我解决这个动作脚本(2)

我想将图像加载到我的flash文件中,然后使用xml文件从文件夹中分配图像 - 然后将其链接到xml中的url

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 :(得分:0)

尝试:

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

如果您使用带有IDE的舞台上绘制的TextField,请确保打开HTML(&lt;&gt;按钮)。应该是它。

祝你好运!

答案 1 :(得分:0)

没有为你做,一般的想法是这样的:

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

答案 2 :(得分:0)

我会使用MovieClipLoader,因为当你想要在加载后将特征分配给MovieClip(或本例中的图像)时,它会有更好的事件处理。

此代码未经过测试。这段代码也不完整!这只是给你一个想法。你会注意到那里的一些评论,我告诉你,你必须自己布置你的图像。也就是说,您将需要考虑图像的大小,并在加载后调整每个_x和_y。

另一件事是,当您在Flash IDE中按CTRL + ENTER进行测试时,这不会很有效,因为它使用根相对URL来表示您的图像和链接。由于Flash IDE未在Web服务器上运行,因此无法找到您的图像!您可能希望在Flash IDE中进行调试时使用特殊的测试XML文件。

此外,请确保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>

动作脚本(第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);
}

我希望有所帮助。