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

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

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

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Используйте оператор равенста, для присвоения значения переменной flag, а не оператор сравнения.
PS: Остаётся загадкой зачем было копаться в сети, когда я уже привёл Вам пример кода и алгоритм которым это может быть реализовано.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

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

Регистрация: Apr 2010
Сообщений: 81
Цитата:
Сообщение от AzagThoth Посмотреть сообщение
PS: Остаётся загадкой зачем было копаться в сети, когда я уже привёл Вам пример кода и алгоритм которым это может быть реализовано.
Потому что я не программист, и как куда чего писать толком не знаю...

Добавлено через 11 минут
Вот полные и вроде правильный код

Код AS1/AS2:
createEmptyMovieClip("clip",getNextHighestDepth());
var muz:Sound = new Sound(clip);
var position:Number=0;
muz.loadSound("test2.mp3", false);
muz.onSoundComplete=function():Void{
     position=0;
	 flag=true;
}
 
 
btn.onRollOver = function () { 
	muz.start(Math.floor(position/1000));
	muz.setVolume(10);
	};
 
btn.onRollOut = fadeOutSound;
 
function fadeOutSound():Void {
 
   	if (id) {
        clearInterval(id);
    }
    var volume = muz.getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
 
	   muz.setVolume(volume--);
        if (volume<=0) 
		{
            clearInterval(id);
      		muz.stop()
 
		if (flag == true) {
		flag = false;
		}
		else {
		position=muz.position;		
		}
 
 
        }
    }
}


Последний раз редактировалось studmar; 24.04.2010 в 19:15.
Старый 24.04.2010, 19:48
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 23  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Да, вроде всё гуд.
Я не написал код сразу, потому как ценен только опыт в той или иной степени полученный самостоятельно(личные наблюдения) и если у Вас есть желание разобраться, а судя по теме оно было. То всегда лучше помочь человеку дав необходимые "наводки". Для того что бы он дошёл до решения сам и лучше понял принцип всего этого.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

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

Регистрация: Apr 2010
Сообщений: 81
С вами нельзя не согласиться, спасибо огромное!

Интересно было бы сделать это все для нескольких movieclip, я пытаюсь, пытаюсь, но пока ничего не получается.
Может дадите подсказку?

Понятное дело что тут нужны массивы и т.п. но в этом я точно запутаюсь...

Чуть позже покажу что получается, может вы меня поправите...

Вот, отталкиваясь от этой темы: http://www.flasher.ru/forum/showthre...370#edit886806 и предыдущего кода

пока смог сделать (для трех movieclip):
Код AS1/AS2:
var sounds:Array = new Array();
 
for (i = 1; i < 4; i++) {
	sounds[i]  = new Array(); 
	var mc:MovieClip  = this.createEmptyMovieClip('s' + i + '_mc', this.getNextHighestDepth()); 
	sounds[i] = new Sound (mc);
	sounds[i].loadSound('s' + i + '.mp3', false);
	sounds[i].onSoundComplete = function():Void {
    position=0;
	flag=true;
}
 
	var btn:MovieClip = this['s' + i + '_btn']; 
	btn.num = i; 
	btn.onRollOver  = startPlay;
	btn.onRollOut  = fadeOutSound;
 
}
 
function startPlay() {
	var n:Number = this.num;
	sounds[n].start(Math.floor(position/1000)); 
	sounds[n].setVolume(40);
 
}
 
function fadeOutSound() {
	 sounds[i]  = new Array();
	 if (id) {
        clearInterval(id);
    }
    var volume = sounds[n].getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
 
	   sounds.setVolume(volume--);
        if (volume<=0) 
		{
            clearInterval(id);
      		sounds[n].stop()
 
		if (flag == true) {
		flag = false;
		}
		else {
		position=sounds[n].position;		
		}
 
 
        }
	}
    }
Но не срабатывает вообще функция fadeOutSound
Быть может я вообще все не так делаю...


Последний раз редактировалось studmar; 24.04.2010 в 22:37.
Старый 24.04.2010, 22:47
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 25  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
В данном случае, когда Вы хотите одним кодом работать с большим количеством объектов логично было бы описывать некоторые свойства как свойства этих объектов. То есть я имею в виду, что position и flag имеет смысл сделать свойства Ваших программно создаваемых звуков. Сделать это совсем не сложно. Просто прописав свойство через оператор точки и задав ему значение. Например так:
Код AS1/AS2:
sounds[i].position=0;
sounds[i].flag=true;
Это если на этапе создания звука. Соответственно если на этапе выполнения функции закреплёнными за звуком, то можно сделать так:
Код AS1/AS2:
this.position=0;
this.flag=true;
Ну и в Ваших условиях разумеется тоже проверяйте значения не position и flag, а this.position и this.flag.
Всё должно получиться.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.


Последний раз редактировалось AzagThoth; 24.04.2010 в 23:01.
Старый 24.04.2010, 23:00
studmar вне форума Посмотреть профиль Отправить личное сообщение для studmar Найти все сообщения от studmar
  № 26  
Ответить с цитированием
studmar
 
Аватар для studmar

Регистрация: Apr 2010
Сообщений: 81
Код AS1/AS2:
var sounds:Array = new Array();
 
for (i = 1; i < 4; i++) {
	sounds[i]  = new Array(); 
	var mc:MovieClip  = this.createEmptyMovieClip('s' + i + '_mc', this.getNextHighestDepth()); 
	sounds[i] = new Sound (mc);
	sounds[i].loadSound('s' + i + '.mp3', false);
	sounds[i].onSoundComplete = function():Void {
	sounds[i].position=0;
	sounds[i].flag=true;
}
 
	var btn:MovieClip = this['s' + i + '_btn']; 
	btn.num = i; 
	btn.onRollOver  = startPlay;
	btn.onRollOut  = fadeOutSound;
 
}
 
function startPlay() {
	var n:Number = this.num;
	sounds[n].start(Math.floor(position/1000)); 
	sounds[n].setVolume(40);
 
 
}
 
function fadeOutSound() {
	sounds[i]  = new Array();
	  if (id) {
        clearInterval(id);
    }
    var volume = sounds[n].getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
 
	   sounds.setVolume(volume--);
        if (volume<=0) 
		{
            clearInterval(id);
      		sounds[n].stop()
		if (this.flag == true) {
		this.flag = false;
		}
		else {
		this.position=sounds[n].position;		
		}
 
 
        }
	}
    }
Пока не работает
Правильное направление?

Старый 24.04.2010, 23:10
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 27  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Может я чего не понимаю, но в этом вообще не вижу смысла.
Код AS1/AS2:
	var btn:MovieClip = this['s' + i + '_btn']; 
	btn.num = i; 
	btn.onRollOver  = startPlay;
	btn.onRollOut  = fadeOutSound;
Также в функции startPlay и fadeOutSound не должно быть этого sounds[i]. Дело в том, что на момент исполнения кода значение i то на котором закончился цикл for. Следовательно работа будет происходить только с одним созданным программно звуком(последним естественно). В подобных случая надо использовать this.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

Старый 24.04.2010, 23:30
studmar вне форума Посмотреть профиль Отправить личное сообщение для studmar Найти все сообщения от studmar
  № 28  
Ответить с цитированием
studmar
 
Аватар для studmar

Регистрация: Apr 2010
Сообщений: 81
К сожалению у меня ничего не получилось, а получилось вот что
Код AS1/AS2:
var sounds:Array = new Array();
 
for (i = 1; i < 4; i++) {
	sounds[i]  = new Array(); 
	var mc:MovieClip  = this.createEmptyMovieClip('s' + i + '_mc', this.getNextHighestDepth()); 
	sounds[i] = new Sound (mc);
	sounds[i].loadSound('s' + i + '.mp3', false);
	sounds[i].onSoundComplete = function():Void {
	sounds[i].position=0;
	sounds[i].flag=true;
}
 
	var btn:MovieClip = this['s' + i + '_btn']; 
	btn.num = i; 
	btn.onRollOver  = startPlay;
	btn.onRollOut  = fadeOutSound;
 
}
 
function startPlay() {
	var n:Number = this.num;
	sounds[n].start(Math.floor(position/1000)); 
	sounds[n].setVolume(40);
 
 
}
 
function fadeOutSound() {
	n = this.num;
	  if (id) {
        clearInterval(id);
    }
    var volume = sounds[n].getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
 
	   sounds[n].setVolume(volume--);
        if (volume<=0) 
		{
            clearInterval(id);
      		sounds[n].stop()
		if (sounds[n].flag == true) {
		sounds[n].flag = false;
		}
		else {
		sounds[n].position=sounds[n].position;		
		}
 
 
        }
	}
    }
Сейчас при наведении на 3 mc обе функции срабатывают, но каждый файл воспроизводится заново, а не с того же места...

По поводу кнопок, откуда я взял пример, написано
Код AS1/AS2:
//работа с кнопками
	var btn:MovieClip = this['s' + i + '_btn']; 
	btn.num = i; //сохраняем номер внутри кнопки
	btn.onPress  = startPlay; // в нашем случае, это btn.onRollOver  = startPlay;
        btn.onRelease  = fadeOut; // и btn.onRollOut  = fadeOutSound;

Старый 24.04.2010, 23:34
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 29  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Да, это я уже я чушь пишу . Перекоротило немного. Всё у Вас нормально.
Код AS1/AS2:
sounds[n].start(Math.floor(position/1000));
Исправьте на
Код AS1/AS2:
sounds[n].start(Math.floor(this.position/1000));
__________________
Играй. Это жизнь.
Всё повторяется. Играй.


Последний раз редактировалось AzagThoth; 24.04.2010 в 23:40.
Старый 24.04.2010, 23:44
studmar вне форума Посмотреть профиль Отправить личное сообщение для studmar Найти все сообщения от studmar
  № 30  
Ответить с цитированием
studmar
 
Аватар для studmar

Регистрация: Apr 2010
Сообщений: 81
К сожалению эта конструкция не работает, ничего не изменилось
Код AS1/AS2:
sounds[n].start(Math.floor(this.position/1000));
но работает эта

Код AS1/AS2:
sounds[n].start(Math.floor(sounds[n].position/1000));
однако файл после проигрывания при новом "отвод-подвод" не воспроизводится вновь

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

Теги
onEnterFrame , onRollOver , звук

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

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


 


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


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