【问题标题】:AS3 Setting width and height of a Sprite ContainerAS3 设置 Sprite 容器的宽度和高度
【发布时间】:2011-02-27 16:27:16
【问题描述】:

好的,我对我遇到的这个问题感到难以置信。我知道这似乎是一个如此简单的问题,我不明白为什么我无法弄清楚,但我还是做不到,我几乎放弃了。问题来了:

我有一个 sprite 容器,它应该包含一堆视频的缩略图。我能够用所有视频和整个作品填充容器,但很明显,如果我添加一堆视频,它会超过 Flash 文档的大小,所以我需要添加一个 UIScrollBar(我做了)现在滚动条目标设置为容器,但不允许我滚动,如果我正确,这是因为容器没有设定高度。所以我试图设置这个容器的高度,但第二次我尝试设置高度甚至宽度,我以前能看到的所有缩略图都不见了!就好像大小被设置为 0 而不是我什至试图将它设置为指定的大小只是为了测试而没有。无论如何,如果有人可以提供帮助,我的代码将非常感激!提前致谢!


import fl.controls.UIScrollBar; 

var videoList:XMLList;
var numVideos:Number;
var current_Video:Number = 0;
var video_position:Number;
var video_paused:Boolean;
var xmlPlaylist:String;

//XML File setup
var playlist_xml:XML;
var myLoader:URLLoader = new URLLoader();

//Playlist setup
var thumb_width:Number;
var thumb_height:Number;
var thumbs_x:Number;
var thumbs_y:Number;
var main_container:Sprite;
var thumbs:Sprite;
var scrollbar:UIScrollBar;

//Loader Data
this.loaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
function loaderComplete(e:Event):void
{
    var myQueryStrings = this.loaderInfo.parameters;
    xmlPlaylist = myQueryStrings.pList;

    myLoader.load(new URLRequest(xmlPlaylist + "?uniq=" + new Date().getTime()));
}

myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
    playlist_xml = new XML(e.target.data);

    numVideos = playlist_xml.video.length();
    videoList = playlist_xml.video;

    thumb_width = playlist_xml.@thumb_width;
    thumb_height = playlist_xml.@thumb_height;
    thumbs_x = playlist_xml.@thumbs_x;
    thumbs_y = playlist_xml.@thumbs_y;

    current_Video = Math.round(Math.random()*(numVideos-1))+1;
    current_Video--;

    startPlayer();
}

function startPlayer()
{
    makeContainers();
    callThumbs();
    setVideo(current_Video);
}

function makeContainers():void
{
    main_container = new Sprite();
    addChild(main_container);

    thumbs = new Sprite();
    thumbs.addEventListener(MouseEvent.CLICK, playVideo);
    thumbs.addEventListener(MouseEvent.MOUSE_OVER, onOver);
    thumbs.addEventListener(MouseEvent.MOUSE_OUT, onOut);
    thumbs.x = thumbs_x;
    thumbs.y = thumbs_y;

这就是问题所在:(如果我注释掉这段代码,它会显示缩略图)


    thumbs.width = thumb_width;
    thumbs.height = (thumb_height + 11) * 3;

    thumbs.buttonMode = true;
    main_container.addChild(thumbs);

    scrollbar = new UIScrollBar();
    scrollbar.x = thumbs_x + thumb_width + 2;
    scrollbar.y = thumbs_y;
    scrollbar.setSize(25, (thumb_height + 11) * 3);
    scrollbar.visible = true;
    scrollbar.scrollTarget = thumbs;
    main_container.addChild(scrollbar);
}

function callThumbs():void
{
    for (var i:Number = 0; i (less than) numVideos; i++) //For some reason Stack Overflow isnt allowing me to put the symbol less than so i just typed it in...
    {
        var thumb_url = videoList[i].@thumb;
        var thumb_loader = new Loader();
        thumb_loader.name = i;
        thumb_loader.load(new URLRequest(thumb_url));

        thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);

        thumb_loader.y = (thumb_height + 11) * i;
    }
}

function thumbLoaded(e:Event):void
{
    var my_thumb:Loader = Loader(e.target.loader);
    thumbs.addChild(my_thumb);
}

function playVideo(e:MouseEvent):void
{
    setVideo(e.target.name);
}

function onOver (e:MouseEvent):void
{
    var my_thumb:Loader = Loader(e.target);
    my_thumb.alpha = 0.5;
}

function onOut (e:MouseEvent):void
{
    var my_thumb:Loader = Loader (e.target);
    my_thumb.alpha = 1;
}

function setVideo(current_Video)
{
    var display:String = videoList[current_Video].@title;
    var video:String = videoList[current_Video].@url;

    txt_Display.text = display;
    flvPlayer.source = video;
}

stop();

【问题讨论】:

    标签: actionscript-3 flash-cs5


    【解决方案1】:

    这很容易。您正在创建 Sprite、添加侦听器、设置坐标。精灵仍然是空的。然后设置宽度和高度,它们将转换为 scaleX 和 scaleY。在空精灵上,这会弄乱转换矩阵,并且精灵永远不会出现。仅在非空精灵上设置宽度、高度或 scaleX/Y。

    【讨论】:

    • 我发现了一个关于这个的线程,并且提到了你所说的,所以我也尝试在填充缩略图后设置高度和宽度,我得到了相同的结果......任何建议为什么可能?只是为了让你确切地知道我做了什么:我将宽度和高度放入一个函数中,并在 callThumbs() 过程之后调用了这个函数。
    • 如我所见, callThumbs 只是开始加载,并没有立即完成。您可以在 thumbLoaded() 之后安全地调整拇指大小。
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2015-04-29
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多