Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Различное время начала звука (http://www.flasher.ru/forum/showthread.php?t=139028)

dimon1408 21.04.2010 21:23

Различное время начала звука
 
Здравствуйте!
Делаю флеш-проект часов, с ними должна быть фоновая музыка. Задача - сделать так, чтобы эта музыка запускалась в разное время - допустим, если swf запущен в 18:00:00 то музыка стартует в 00 секунд, в 18:00:21 в 21 секунд и так далее. Пытаюсь сделать, но ничего не получается... Из догадок - поставить sec (переменную текущего времени) как offset, но это не работает. Музыка вызывается так:
Код:

onClipEvent (load) {
        var mus:Sound = new Sound();
mus.loadSound("ortclock.wav", true);
mus.start(sec, 0);
}

где clip - это видео сзади циферблата.
Что я не так делаю? Большая просьба помочь, заранее спасибо :)

samana 21.04.2010 21:43

А музыка вообще загружается? Вроде .wav нельзя.

dimon1408 21.04.2010 21:50

Да, как оказалось .wav нельзя (хоть на оффсайте Adobe было написано, что на винде можно). После конвертации в mp3 звук играется, но всегда с самого начала, а не как надо, так что проблема все равно не решена, но спасибо за наводку.

samana 21.04.2010 22:13

Не привыкайте писать код в клипах так можно запутаться. Если хотите привязать звук к клипу используйте
Код AS1/AS2:

var mus:Sound = new Sound(клип);

А то вдруг ваш клип загружается до того как объявлена переменная sec, и конечно ему ничего не передаётся. Надо по больше кода увидеть.

dimon1408 21.04.2010 22:28

Попробовал, не вышло.
Вот ещё код:
Время получается следующей командой:
Код:

this.onEnterFrame = function() {
        var time:Date = new Date(); //обновляется постоянно из-за onEnterFrame
        //Сохранение текущего времени
        var sec = time.getSeconds();
        var min = time.getMinutes();
        var hour = time.getHours();
        //Вращение стрелок
        seconds._rotation = sec * 6; // смещение стрелок раз в секунду
        minutes._rotation = (min + sec / 60) * 6; // минуты
        hours._rotation = (hour + min / 60) * 30; // 30 - т.к. 12 делений у часов
        // Вывод времени (электронные часы)
        timeTxt.text = hour + " : " + min + " : " + sec;
};

Затем делается тиканье, ставится на мувик movieSeconds:
Код:

onClipEvent (load) {
        var snd:Sound = new Sound();
snd.loadSound("tik.mp3", true);
var tik:Function = function ()
{
snd.start(0, 0);
};
var inter:Number = setInterval(tik, 1000);
}

Все остальное делалось руками. Если хотите, могу выложить исходник.

samana 21.04.2010 23:55

Когда в функции создаётся переменная со словом "var", она называется локальной, и действует только на протяжении этой функции, а затем удаляется. И по этому к ней нет доступа из других функций. Можно сделать так:
Код AS1/AS2:

_root.onEnterFrame = function() {
        var time:Date = new Date();
        hour = time.getHours();
        min = time.getMinutes();
        sec = time.getSeconds();
            //.......................................
};

И если вы всё таки хотите писать код в клипе (чего не надо делать) а из него надо обратиться к переменной которая объявлена в _root, не забывайте дописать "_root" впереди, например:
Код AS1/AS2:

onClipEvent (load) {
        var snd:Sound = new Sound();
snd.loadSound("tik.mp3", true);
var tik:Function = function ()
{
snd.start(0, _root.sec);// <------
};
var inter:Number = setInterval(tik, 1000);
}


dimon1408 22.04.2010 00:21

Таки нет... Поставил всё вместе просто на слой ролика
Код:

_root.onEnterFrame = function() {
        var time:Date = new Date();
        hour = time.getHours();
        min = time.getMinutes();
        sec = time.getSeconds();
        seconds._rotation = sec * 6; // смещение стрелок раз в секунду
        minutes._rotation = (min + sec / 60) * 6; // минуты
        hours._rotation = (hour + min / 60) * 30; // 30 - т.к. 12 делений у часов
var snd:Sound = new Sound();
snd.loadSound("ortclock.mp3", true);
var tik:Function = function ()
{
snd.start(_root.sec, 0);// <------
};
var inter:Number = setInterval(tik, 60000);
}

Так вся музыка играется по многу раз за секунду. А если поставить
Код:

var inter:Number = setInterval(tik, 1);
То музыка очень медленно идет и флеш просто зависает...
Спасибо большое за помощь но, видимо, руки у меня кривые :)

samana 22.04.2010 00:52

Смотри, у тебя это всё в событии onEnterFrame. Каждый кадр ты создаешь новый звук и нувую функцию, по этому ошибка. Загрузить звук и объявить функцию нужно один раз, а не постоянно, попробуй:
Код AS1/AS2:

_root.onEnterFrame = function() {
        var time:Date = new Date();
        hour = time.getHours();
        min = time.getMinutes();
        sec = time.getSeconds();
        seconds._rotation = sec * 6;// смещение стрелок раз в секунду
        minutes._rotation = (min + sec / 60) * 6;// минуты
        hours._rotation = (hour + min / 60) * 30;// 30 - т.к. 12 делений у часов
};
var snd:Sound = new Sound();
snd.loadSound("ortclock.mp3",true);
function tik() {
        snd.start(sec);
}
 
var inter:Number = setInterval(tik, 1000);


dimon1408 22.04.2010 01:06

Таки нет... Попробовал, всё равно начинается с первой секунды в любом случае. Попробовал поизменять параметры вокруг - всё равно ноль эффекта :(
Если хотите, можете убедиться - тут можно скачать архив с fla-файлом и самим ortclock.mp3.

samana 22.04.2010 01:50

Вот так работает, но с одним но, длина твоего звука 40 секунд, а не 60. И если запустить ролик после 40 то ничего не будет.Попробуй:
Код AS1/AS2:

sec = new Date().getSeconds();
_root.onEnterFrame = function() {
        var time:Date = new Date();
        hour = time.getHours();
        min = time.getMinutes();
        sec = time.getSeconds();
        seconds._rotation = sec * 6;// смещение стрелок раз в секунду
        minutes._rotation = (min + sec / 60) * 6;// минуты
        hours._rotation = (hour + min / 60) * 30;// 30 - т.к. 12 делений у часов
 
};
 
var snd:Sound = new Sound();
snd.loadSound("ortclock.mp3",true);
snd.stop();
snd.onLoad = function(yes) {
        if (yes) {
                snd.start(sec);
        }
};



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

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