![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Используйте оператор равенста, для присвоения значения переменной flag, а не оператор сравнения.
PS: Остаётся загадкой зачем было копаться в сети, когда я уже привёл Вам пример кода и алгоритм которым это может быть реализовано.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 81
|
Цитата:
Добавлено через 11 минут Вот полные и вроде правильный код 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. |
|
|||||
|
Да, вроде всё гуд.
Я не написал код сразу, потому как ценен только опыт в той или иной степени полученный самостоятельно(личные наблюдения) и если у Вас есть желание разобраться, а судя по теме оно было. То всегда лучше помочь человеку дав необходимые "наводки". Для того что бы он дошёл до решения сам и лучше понял принцип всего этого.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 81
|
С вами нельзя не согласиться, спасибо огромное!
Интересно было бы сделать это все для нескольких movieclip, я пытаюсь, пытаюсь, но пока ничего не получается. Может дадите подсказку? Понятное дело что тут нужны массивы и т.п. но в этом я точно запутаюсь... Чуть позже покажу что получается, может вы меня поправите... Вот, отталкиваясь от этой темы: http://www.flasher.ru/forum/showthre...370#edit886806 и предыдущего кода пока смог сделать (для трех movieclip): 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; } } } } Быть может я вообще все не так делаю... Последний раз редактировалось studmar; 24.04.2010 в 22:37. |
|
|||||
|
В данном случае, когда Вы хотите одним кодом работать с большим количеством объектов логично было бы описывать некоторые свойства как свойства этих объектов. То есть я имею в виду, что position и flag имеет смысл сделать свойства Ваших программно создаваемых звуков. Сделать это совсем не сложно. Просто прописав свойство через оператор точки и задав ему значение. Например так:
Это если на этапе создания звука. Соответственно если на этапе выполнения функции закреплёнными за звуком, то можно сделать так: Ну и в Ваших условиях разумеется тоже проверяйте значения не position и flag, а this.position и this.flag. Всё должно получиться.
__________________
Играй. Это жизнь. Всё повторяется. Играй. Последний раз редактировалось AzagThoth; 24.04.2010 в 23:01. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 81
|
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; } } } } Правильное направление? |
|
|||||
|
Может я чего не понимаю, но в этом вообще не вижу смысла.
Также в функции startPlay и fadeOutSound не должно быть этого sounds[i]. Дело в том, что на момент исполнения кода значение i то на котором закончился цикл for. Следовательно работа будет происходить только с одним созданным программно звуком(последним естественно). В подобных случая надо использовать this.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 81
|
К сожалению у меня ничего не получилось, а получилось вот что
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; } } } } По поводу кнопок, откуда я взял пример, написано |
|
|||||
|
Да, это я уже я чушь пишу
. Перекоротило немного. Всё у Вас нормально.Исправьте на
__________________
Играй. Это жизнь. Всё повторяется. Играй. Последний раз редактировалось AzagThoth; 24.04.2010 в 23:40. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 81
|
К сожалению эта конструкция не работает, ничего не изменилось
но работает эта однако файл после проигрывания при новом "отвод-подвод" не воспроизводится вновь |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:28. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| onEnterFrame , onRollOver , звук |
|
|