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

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

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

Регистрация: May 2006
Адрес: Voronezh
Сообщений: 13
Отправить сообщение для egrik с помощью ICQ
По умолчанию У объекта Sound не срабатывает событие onLoad

Добрый день, кто-нибудь объясните, плиз, на простом примере следующую ситуацию:

Код:
_root.onEnterFrame = function():Void
{
	delete this.onEnterFrame;
	var t = new Sound();
	t.onLoad = function(a):Void
	{
		trace(a);
	}
	t.loadSound('data/snd/bg.mp3', false);
}
Почему в этом случае не срабаывает событие onLoad? Также удивительно то, что если мп3 файла не существует, то событие срабатывает.

Еще момент, если: будет так:

Код:
var t = new Sound();
_root.onEnterFrame = function():Void
{
	delete this.onEnterFrame;
	t.onLoad = function(a):Void
	{
		trace(a);
	}
	t.loadSound('data/snd/bg.mp3', false);
}
т. е. если переменная t будет глобальной, то тоже все будет ок. Не пойму, почему так происходит. Понятно, что связано это с областью видимости, но никак не прийдет в голову, как решить проблему.

Заранее всем огромнооооое спасибо )

Старый 13.10.2008, 19:06
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 2  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
вы удаляете функцию, в кототрой у вас что-то должно сработать

Старый 13.10.2008, 19:40
egrik вне форума Посмотреть профиль Отправить личное сообщение для egrik Найти все сообщения от egrik
  № 3  
Ответить с цитированием
egrik

Регистрация: May 2006
Адрес: Voronezh
Сообщений: 13
Отправить сообщение для egrik с помощью ICQ
Цитата:
Сообщение от Mnilionic Посмотреть сообщение
вы удаляете функцию, в кототрой у вас что-то должно сработать
нет, в данном случаем я изменил область видимости, т. е. создаваемый объект Sound стал локальным. А удаление:

Код:
delete this.onEnterFrame;
происходит сразу после первого вхождения в кадр, чтобы дальнейшая инициация Sound не происходила, т. е. чтобы объект Sound был создани один раз.

Этот код написан, как пример, я его не использую, мне оч. хотелось бы понять, как в данном случае "завязана" область видимости.

Или я что-то не так понял?

Старый 13.10.2008, 19:54
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 4  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
во-первых в данном примере onEnterFrame вообще не нужен

я проверил ваш код - событие срабатывает без проблем


Последний раз редактировалось Mnilionic; 13.10.2008 в 20:00.
Старый 13.10.2008, 19:58
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
У меня первый вариант срабатывает.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 13.10.2008, 20:05
egrik вне форума Посмотреть профиль Отправить личное сообщение для egrik Найти все сообщения от egrik
  № 6  
Ответить с цитированием
egrik

Регистрация: May 2006
Адрес: Voronezh
Сообщений: 13
Отправить сообщение для egrik с помощью ICQ
Цитата:
Сообщение от Mnilionic Посмотреть сообщение
во-первых в данном примере onEnterFrame вообще не нужен

я проверил ваш код - событие срабатывает без проблем
Ну, может быть, тогда мне интересно узнать, почему здесь:

Код:
_root.onEnterFrame = function():Void
{
	delete this.onEnterFrame;
	
	var snd:Sound = new Sound();
	snd.onLoad = function(success:Boolean):Void
	{
		trace(success);
	}
	snd.loadSound('data/snd/bg.mp3', false);
	
	var mc:MovieClip = _root.createEmptyMovieClip("test", _root.getNextHighestDepth());
	mc.onEnterFrame = function():Void
	{
		trace(snd instanceof Sound);
	}
}
trace все-равно "говорит" о том, что snd это Sound, когда он был уже удален, да и получается, что mc.onEnterFrame также должна быть удалена, а н, нет

Старый 13.10.2008, 20:12
egrik вне форума Посмотреть профиль Отправить личное сообщение для egrik Найти все сообщения от egrik
  № 7  
Ответить с цитированием
egrik

Регистрация: May 2006
Адрес: Voronezh
Сообщений: 13
Отправить сообщение для egrik с помощью ICQ
Странно, посмотрите, плиз в аттаченном файле, может настройки какие-либо неверные или я что-то забыл. Заранее благодарен.
Вложения
Тип файла: zip snd.zip (6.9 Кб, 158 просмотров)

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

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
чем помочь? Ваш скрипт работает.
Какой вопрос?

Старый 14.10.2008, 16:27
egrik вне форума Посмотреть профиль Отправить личное сообщение для egrik Найти все сообщения от egrik
  № 9  
Ответить с цитированием
egrik

Регистрация: May 2006
Адрес: Voronezh
Сообщений: 13
Отправить сообщение для egrik с помощью ICQ
Цитата:
Сообщение от Mnilionic Посмотреть сообщение
чем помочь? Ваш скрипт работает.
Какой вопрос?
Странно, у меня не работает (
В общем ладно, не буду больше никого отвлекать, непонимание осталось, жаль, еще поразбираюсь. Всем большое спасибо за помощь

Старый 16.10.2008, 12:52
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 10  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Все верно - дело в области видимости (и первый вариант не работает):

Цитата:
Сообщение от egrik Посмотреть сообщение
Код:
_root.onEnterFrame = function() {
	delete this.onEnterFrame; // объект активации функции onEnterFrame удаляется, если не было создано на него ссылок
	var t = new Sound();
             // переменная t - переменная объекта активации функции onEnterFrame (т.к. стоит var), т.е. видна только из нее
	t.onLoad = function(a){ 
		trace(a);
	}
	t.loadSound('data/snd/bg.mp3', false);
}
Почему в этом случае не срабаывает событие onLoad?
Все дело в маленьком слове var внутри блока функции - это имеет большие последствия (см. выше комментарии). Если var убрать, то все будет работать.

Цитата:
Сообщение от egrik Посмотреть сообщение
Также удивительно то, что если мп3 файла не существует, то событие срабатывает.
Ничего удивительного. onLoad сработает (покажет false) сразу в первом кадре, т.е. еще ДО ТОГО как сработает delete this.onEnterFrame

Цитата:
Сообщение от egrik Посмотреть сообщение
Еще момент, если: будет так:

Код:
var t = new Sound();
_root.onEnterFrame = function(){
	...
}
т. е. если переменная t будет глобальной, то тоже все будет ок.
Глобальная переменная - это совсем другое. В данном случае это то же самое, как если бы в первом примере, вы не поставили var. Т.е. указатель this для переменной t при наличии var указывает на объект активации функции onEnterFrame, а если var нет или переменная определена вне тела функции - то this указывает на соответствующую временную диаграмму (в данном случае _root)

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

Теги
onload , onload sound , sound , загрузка , звук
Опции темы
Опции просмотра

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

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


 


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


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