Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Получение переменной из функции (http://www.flasher.ru/forum/showthread.php?t=195284)

Newfag 03.03.2013 21:22

Получение переменной из функции
 
Добрый день уважаемые форумчане. Имеется следующий код:
Код AS3:

var customClient:Object = new Object(); 
customClient.onMetaData = metaDataHandler;
 
function metaDataHandler(infoObject:Object)        {
        var totalTimer:Number = infoObject.duration;
        trace("Общее время "+totalTimer);
 
        return(totalTimer);
        }
 
trace(metaDataHandler(infoObject:Object));

Выводится ошибка 1084: на последней строке (там где trace), якобы выводится скобка перед двоеточием.
Мне нужно любым из способов извлечь значение функции (а именно получить значение infoObject.duration, он же totalTimer). Заранее прошу прощения, если данный вопрос уже поднимался или очевиден. Но я перерыл большую часть faq по flash и перепробовал разные методы подстановки аргументов в последнюю строку, ничего не получается.

Помогите пожалуйста, или, возможно, есть какой-то другой способ получения метаданных, а именно общую продолжительность видео?
Видео вставляется через NetStream.

Zebestov 03.03.2013 22:03

Код AS3:

function metaDataHandler(infoObject:Object):Number        {


Newfag 03.03.2013 23:06

Заменил тип функции на Number - не помогло. Еще пробовал объявлять переменную до функции, вот так
Код AS3:

var totalTimer:Number;
function metaDataHandler(infoObject:Object):Number
{
    totalTimer=infoObject.duration;
        return(totalTimer);
}
trace(totalTimer);

Выводится NaN.

mayakwd 04.03.2013 00:12

Вы пытаетесь отобразить данные до того как они будут получены.

Код AS3:

var totalTimer : Number;
 
function metaDataHandler (infoObject : Object) : void {
  totalTimer = infoObject.duration;
  trace(totalTimer);
}

вы получаете данные только в момент когда вызывается metaDataHandler, и только после этого можете отобразить эти данные.

Wolsh 04.03.2013 00:17

Цитата:

trace(metaDataHandler(infoObject:Object));
Выводится ошибка 1084: на последней строке (там где trace), якобы выводится скобка перед двоеточием.
Уберите объявление типа параметра из ВЫЗОВА

Newfag 04.03.2013 14:39

mayakwd, в том то и дело, что нужно вывести переменную (totalTimer) за пределы этой функции, чтобы потом использовать в другой функции.
Возможно есть способ объявить переменную, затем внести в нее значение (в функции), а затем вывести (в другой функции).

Добавлено через 6 минут
Wolsh,
Код AS3:

trace(metaDataHandler(infoObject));

Обращение не существующего свойства infoObject.

Убирая тип параметра из самой функции получаем то же самое.

dimensb 04.03.2013 15:28

1. Как вам ранее сказали, при вызове функции нельзя добавлять определение тип ее параметра (:Object)
2. Вы передаете несуществующий объект, сначала вам надо создать его, а потом использовать

Код AS3:

var customClient:Object = new Object(); 
customClient.onMetaData = metaDataHandler;
 
var infoObject:Object = {duration: 0};
 
function metaDataHandler(infoObject:Object)       
{
        var totalTimer:Number = infoObject.duration;
        trace("Общее время "+totalTimer);
 
        return(totalTimer);
}
 
trace(metaDataHandler(infoObject));


Newfag 04.03.2013 15:52

Выводится
Код AS3:

Общее время 0
0
Общее время 203.603

Изменив 0 на любое другое число при создании объекта infoObject, получаю это число. Т.е.
Код AS3:

var infoObject:Object = {duration: 1};

дает
Код AS3:

Общее время 1
1
Общее время 203.603


Wolsh 04.03.2013 15:59

Путешествия в будущее еще не придумали.
Вы реально думаете, что можно вызвать функцию и узнать, каким будет некое значение через полчаса?
Вы еще не получили infoObject. Его НЕТ. Как Вы можете узнать infoObject.duration?

dimensb 04.03.2013 16:03

Итак, вы передали объект в функцию, но ничего с ним не сделали и не обновили его значение. Поэтому выводится именно то значение, которым он был инициализирован, в ваших случаях 0 и 1. Это верно. Если вы хотите чтобы там было другое значение, вам стоит его обновить внутри функции, например так

Код AS3:

infoObject.duration = 10;

или заменить число 10 на любой другое значение или источник.


Часовой пояс GMT +4, время: 23:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.