Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.03.2013, 21:22
Newfag вне форума Посмотреть профиль Отправить личное сообщение для Newfag Найти все сообщения от Newfag
  № 1  
Ответить с цитированием
Newfag

Регистрация: Mar 2013
Сообщений: 10
По умолчанию Получение переменной из функции

Добрый день уважаемые форумчане. Имеется следующий код:
Код 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.

Старый 03.03.2013, 22:03
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Код AS3:
function metaDataHandler(infoObject:Object):Number	{
__________________
Поймай яблоко 2!

Старый 03.03.2013, 23:06
Newfag вне форума Посмотреть профиль Отправить личное сообщение для Newfag Найти все сообщения от Newfag
  № 3  
Ответить с цитированием
Newfag

Регистрация: Mar 2013
Сообщений: 10
Заменил тип функции на Number - не помогло. Еще пробовал объявлять переменную до функции, вот так
Код AS3:
var totalTimer:Number;
function metaDataHandler(infoObject:Object):Number 
{ 
    totalTimer=infoObject.duration;
	return(totalTimer);
}
trace(totalTimer);
Выводится NaN.

Старый 04.03.2013, 00:12
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 4  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Вы пытаетесь отобразить данные до того как они будут получены.

Код AS3:
var totalTimer : Number;
 
function metaDataHandler (infoObject : Object) : void {
   totalTimer = infoObject.duration;
   trace(totalTimer);
}
вы получаете данные только в момент когда вызывается metaDataHandler, и только после этого можете отобразить эти данные.
__________________
Блог, Twitter
Брюзга.

Старый 04.03.2013, 00:17
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
trace(metaDataHandler(infoObject:Object));
Выводится ошибка 1084: на последней строке (там где trace), якобы выводится скобка перед двоеточием.
Уберите объявление типа параметра из ВЫЗОВА
__________________
Reality.getBounds(this);

Старый 04.03.2013, 14:39
Newfag вне форума Посмотреть профиль Отправить личное сообщение для Newfag Найти все сообщения от Newfag
  № 6  
Ответить с цитированием
Newfag

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

Добавлено через 6 минут
Wolsh,
Код AS3:
trace(metaDataHandler(infoObject));
Обращение не существующего свойства infoObject.

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

Старый 04.03.2013, 15:28
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 7  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
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));

Старый 04.03.2013, 15:52
Newfag вне форума Посмотреть профиль Отправить личное сообщение для Newfag Найти все сообщения от Newfag
  № 8  
Ответить с цитированием
Newfag

Регистрация: Mar 2013
Сообщений: 10
Выводится
Код AS3:
Общее время 0
0
Общее время 203.603
Изменив 0 на любое другое число при создании объекта infoObject, получаю это число. Т.е.
Код AS3:
var infoObject:Object = {duration: 1};
дает
Код AS3:
Общее время 1
1
Общее время 203.603

Старый 04.03.2013, 15:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Путешествия в будущее еще не придумали.
Вы реально думаете, что можно вызвать функцию и узнать, каким будет некое значение через полчаса?
Вы еще не получили infoObject. Его НЕТ. Как Вы можете узнать infoObject.duration?
__________________
Reality.getBounds(this);

Старый 04.03.2013, 16:03
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 10  
Ответить с цитированием
dimensb

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

Код AS3:
infoObject.duration = 10;
или заменить число 10 на любой другое значение или источник.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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