Форум 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=153102)

U4enik 28.03.2011 19:36

Код паузы звука не работает!
 
Код AS1/AS2:

var sound:Sound = new Sound();
sound.loadSound("Van.mp3", true);
sound.start(loop);
 
var pausa:Boolean;
 
pause_btn.onRelease = function(){
  s_pos = sound.position;
  pausa = true;
  sound.stop();
  }
 
play_btn.onRelease = function(){
  if(pausa){sound.start(s_pos);}
  else{sound.start();}
  pausa = false;
  }

После нажатия на кнопку воспроизведения , звук начинает проигрываться сначала, а не оттуда где был остановлен? А бывает вобще не проигрывается. Где я ошибаюсь?

mooncar 28.03.2011 19:52

1. Ошибка в несоответствии единиц измерения.

secondOffset должен быть в секундах
Код:

start (Sound.start method)
public start([secondOffset: Number], [loops: Number]) : Void

А позиция считывается в миллисекундах:
Код:

Sound.position property
public position :  Number [read-only]
The number of milliseconds a sound has been playing...

Поэтому:
Код AS1/AS2:

var sound:Sound = new Sound();
sound.loadSound("Van.mp3", true);
sound.start(); // у вас тут было написано loop  - к чему это было? Так ничего не зациклется.
 
var pausa:Boolean ;
 
pause_btn.onRelease = function()
{
        s_pos = sound.position ;
        pausa = true ;
        sound.stop();
        trace(sound.position);
};
 
play_btn.onRelease = function()
{
        if(pausa)
        {
                sound.start(s_pos/1000); //нюанс тут!
        }
        else
        {
                sound.start();
        }
        pausa = false ;
};


3. Далее, некторые нюансы в использовании методов Sound.

3.1. Это можно не писать:
Код AS1/AS2:

sound.start();

(и даже вредно), еслиу вас true в
Код AS1/AS2:

sound.loadSound("Van.mp3", true);

, то есть звук потоковый.
Звук начнет играть сам. Иначе старт может произойти два раза.

3.2. И наконец, если вам нужно зациклить звук, то конечный код будет такой:
Код AS1/AS2:

var sound:Sound = new Sound();
sound.loadSound("Van.mp3", true);
sound.onSoundComplete = function ()
{
        sound.start();
};
 
var pausa:Boolean ;
 
pause_btn.onRelease = function()
{
        s_pos = sound.position;
        pausa = true ;
        sound.stop();
        trace(sound.position);
};
 
play_btn.onRelease = function()
{
        if(pausa)
        {
                sound.start(s_pos/1000);
        }
        else
        {
                sound.start();
        }
        pausa = false ;
};

PS.
На будущее - не склеивайте уж так ваш код скобочка к скобочке - самим же неудобно, причесывать сперва приходится, чтобы разобраться.
По типу
Код AS1/AS2:

if(pausa){sound.start(s_pos);}
else{sound.start();}

Компилятору пофиг такое уплотнение, и производительности это не прибавит, крутизна кода от этого сомнительная, а читабельность кода никакая, тем более для потенциальных советчиков.
Если хотите сократить, так иногда тернарный оператор годится:
Код AS1/AS2:

play_btn.onRelease = function()
{
        pausa ? sound.start(s_pos/1000) : sound.start() ;
        pausa = false ;
};



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

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