AS3将变量传递给函数不起作用?

时间:2011-10-08 07:47:59

标签: flash actionscript-3 gallery

我使用Adobe CS3编写了这段代码,最近升级到了CS5。我没有永远触及这个网站,我最后一次做到这一点很有效。问题如下。

页面类型:图库 问题:传递变量

这是我上次检查时起作用的原始代码,但此后一直停止工作。

function onClick(e:MouseEvent):void
    {
            trace(e.currentTarget.name);
            loadPics(e.currentTarget.name);
    }

这是onClick函数。最棒的是,迹线吐出了照片的正确路径。问题发生在loadPics()函数中。正如您所看到的,我正在将相同的路径(正确打印到屏幕的路径)传递给该函数。这是函数的代码,如果它有点乱,我道歉。

function loadPics(pic):void
{
    photoLoader.source = pic;
    photoLoader.y = 10;
    photoLoader.x = 10;
    loaderHolder.addChild(photoLoader);
    //trace (pic.name) yields nothing
    //trace (photoLoader.source.name) yields nothing
    //trace (photoLoader.name) yields the default instanceXX name
    if(photoLoader.source.width > photoLoader.source.height)
    {
            trace("landscape");
    }
    else if(photoLoader.source.width < photoLoader.source.height)
    {
    trace("portrait");
    }
    else
    {
            trace("fail");
    }

    //draw loader background
    loaderHolder.graphics.beginFill(0xffffff, 1);
    loaderHolder.graphics.drawRect(0, 0, photoLoader.source.width + 20,                photoLoader.source.height + 20);
    loaderHolder.graphics.endFill();
    loaderHolder.x = 230;
    loaderHolder.y = 70;
    this.addChild(loaderHolder);
}

请详细说明这个问题。我的缩略图加载很好,所有路径都是正确的。单击缩略图时出现的错误是

  

ReferenceError:错误#1069:在String上找不到属性名称,并且没有默认值。       在portfolio_fla :: MainTimeline / loadPics()       在MethodInfo-379()

所以我推断没有加载正确的文件,因为根本没有加载文件。我传递的参数和loadPic没有将其作为字符串读取的事实之间是否存在脱节?请帮忙!

哎呀几乎忘记了这是我对持有人的声明

var loaderHolder:Sprite = new Sprite();
var photoLoader:UILoader = new UILoader();

这是我加载电影时调试器输出的错误

  

尝试使用网址C启动并连接到播放器:\ Documents and Settings \ Brodie \ Desktop \ stephTsai \ portfolio.swf   [SWF] C:\ Documents and Settings \ Brodie \ Desktop \ stephTsai \ portfolio.swf - 解压缩后426245个字节

这是我单击缩略图按钮时调试器输出的错误

  

画廊/大/ test1.jpg   ReferenceError:错误#1069:在String上找不到属性宽度,并且没有默认值。       在portfolio_fla :: MainTimeline / loadPics()[portfolio_fla.MainTimeline :: frame1:45]       在Function / portfolio_fla:MainTimeline / loadThumbs / portfolio_fla:displayThumbs / portfolio_fla:onClick()[portfolio_fla.MainTimeline :: frame1:163]

第一部分'gallery / large / test1.jpg'是在loadThumbs()函数末尾追踪路径的程序......我很丢失,如果代码/方法很奇怪,我很抱歉没有永远触及动作。

(EDIT --------------------------------------------- --------------------) 我做了一些调查......

如果我将 - this.addChild(photoLoader)添加到代码中,而不是在我点击时将图片的非常小的版本加载到屏幕上。我还可以访问photoLoader项的高度和宽度。所以我猜这是搞砸了的是这部分:

if(photoLoader.source.width > photoLoader.source.height)
{
        trace("landscape");
}
else if(photoLoader.source.width < photoLoader.source.height)
{
trace("portrait");
}
else
{
        trace("fail");
}

loaderHolder.graphics.drawRect(0, 0, photoLoader.source.width + 20,              photoLoader.source.height + 20);

该程序试图获取字符串的高度和宽度而不是图片。是否有一个我应该使用的不同的sytax或我应该采取的步骤,以便在执行其余功能之前正确加载图片?

3 个答案:

答案 0 :(得分:0)

这更像是评论而不是答案,但我不能发表评论(不知道为什么)。无论如何,user985138是对的。例如: - onClick是CLICK事件的处理程序,但是你在哪里附加它 - function loadPics(pic):void - pic应该有一个类型

我建议您在Flash中单击Ctrl + Shift + F12,转到Flash选项卡,单击Script值的Settings ...按钮并勾选String和Warning模式。然后进行编译和调查。

答案 1 :(得分:0)

我无法看到代码中出现错误的位置。你在运行这些痕迹吗?你应该真的开始输入你的变量。例如,您将String传递给函数loadPics:  loadPics(e.currentTarget.name);

然后您尝试访问String的变量名称。这是没有意义的。

答案 2 :(得分:0)

photoLoader.source的类型为字符串。这是运行时抱怨的,当它试图获取源属性的宽度时。你需要使用的是photoLoader.width和photoLoader.height。

顺便说一句,我认为在资源(图片)实际加载之前,代码将无法获得正确的宽度和高度。因此,在检查photoLoader的高度和宽度之前,您可能需要等待Event.COMPLETE。