Показать сообщение отдельно
Старый 28.03.2011, 19:52
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
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 ;
};
__________________
Идите первым!


Последний раз редактировалось mooncar; 28.03.2011 в 20:23.