AS3 Передача переменных в функцию не работает? - PullRequest
0 голосов
/ 08 октября 2011

Я написал этот код с помощью 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: имя свойства не найдено в строке и отсутствует значение по умолчанию. at portfolio_fla :: MainTimeline / loadPics () на MethodInfo-379 ()

Итак, я считаю, что правильный файл не загружается, потому что файл вообще не загружается. Есть ли разъединение между аргументом, который я передаю, и тем фактом, что loadPic не читает его как строку? Пожалуйста, помогите!

Упс чуть не забыл вот мои декларации для владельцев

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

Это ошибка, которую выводит отладчик при загрузке фильма

Попытка запустить и подключиться к Player с помощью URL C: \ Documents and Settings \ Brodie \ Desktop \ stephTsai \ portfolio.swf [SWF] C: \ Documents and Settings \ Brodie \ Desktop \ stephTsai \ portfolio.swf - 426245 байт после распаковки

Это ошибка, которую выводит отладчик, когда я нажимаю кнопку с миниатюрой

Галерея / большой / test1.jpg ReferenceError: Ошибка # 1069: ширина свойства не найдена в строке и отсутствует значение по умолчанию. at portfolio_fla :: MainTimeline / loadPics () [portfolio_fla.MainTimeline :: frame1: 45] в функции / portfolio_fla: MainTimeline / loadThumbs / portfolio_fla: displayThumbs / portfolio_fla: onClick () [portfolio_fla.MainTimeline :: frame1: 163]

Первая часть 'gallery / large / test1.jpg' - это программа, отслеживающая путь в конце функции loadThumbs () ... Я так растерялась и извиняюсь, если код / ​​методология странная, но я не трогал ActionScript вечно.

(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);

Программа пытается получить высоту и ширину строки, а не картинку. Есть ли другой синтаксис, который я должен использовать, или шаг, который я должен предпринять, чтобы правильно загрузить картинку перед выполнением остальной части функции?

Ответы [ 3 ]

0 голосов
/ 08 октября 2011

Я не вижу, где вы получаете ошибку в коде. Вы управляете следами? Вы должны действительно начать печатать свои переменные. Например, вы передаете String в функцию loadPics: loadPics(e.currentTarget.name);

Затем вы пытаетесь получить доступ к имени переменной String. Это бессмысленно.

0 голосов
/ 09 октября 2011

photoLoader.source имеет тип string. Это то, на что жалуется среда выполнения, когда пытается извлечь ширину из свойства источника. Вам нужно использовать photoLoader.width и photoLoader.height.

Кстати, я думаю, что код не будет иметь правильную ширину и высоту, пока ресурс (картинка) не будет загружен. Итак, вам, вероятно, нужно подождать Event.COMPLETE, прежде чем проверять высоту и ширину photoLoader.

0 голосов
/ 08 октября 2011

это больше похоже на комментарий, а не на ответ, но я не могу оставлять комментарии (понятия не имею, почему).Во всяком случае, user985138 прав.Например: - onClick - обработчик события CLICK, но где вы его прикрепили - функция loadPics (рис.): Void - рис должен иметь тип

. Я предлагаю вам нажать Ctrl + Shift + F12 во Flash, перейдите на вкладку Flash, нажмите кнопку «Настройки ...» значения «Сценарий» и отметьте «Строка» и «Предупреждение».Затем скомпилировать и исследовать.

...