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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.03.2013, 14:50
Yulia_V вне форума Посмотреть профиль Отправить личное сообщение для Yulia_V Найти все сообщения от Yulia_V
  № 1  
Ответить с цитированием
Yulia_V

Регистрация: Sep 2012
Сообщений: 57
По умолчанию Как управлять встроенным звуком?

Здравствуйте, не подскажете как создать встроенный(!) в приложение звук, и чтоб он при нажатии на объект начинал проигрываться, а при повторном нажатии замолкал (а лучше чтоб вставал на паузу, но можно без этого).

Пыталась сделать так:
Добавила звук внутрь мувиклипа с классом zvuk
Код AS3:
zvuk_1.addEventListener(MouseEvent.CLICK, play_sound1);
function play_sound1 ():void
{
var zvuk1:zvuk = new zvuk ();
addChild(zvuk1);
zvuk1.visible = false;
if (stage.contains(zvuk1)) {
zvuk_1.removeEventListener(MouseEvent.CLICK, play_sound1);
zvuk_1.addEventListener(MouseEvent.CLICK, stop_sound1);
}
function stop_sound1 ():void
{
removeChild(zvuk1);
zvuk_1.removeEventListener(MouseEvent.CLICK, stop_sound1);
zvuk_1.addEventListener(MouseEvent.CLICK, play_sound1);
}
}
Естественно мелодия продолжает играть. В принципе я понимаю почему. Но как реализовать задумку не знаю. Помогите пожалуйста.
И ещё заметила, что он воспроизводится лишь один раз. А надо циклично.

Старый 16.03.2013, 14:56
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 2  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Шаблон состояние:
Код:
1. Контекстный класс
	VideoWorks.as
2. Классы контекста состояния
	StopState.as - проигрывание остановлено
	PlayState.as - состояние проигрывания
3. Интерфейс состояния
	State.as
4. Клиент
	TestState.as
Код AS3:
package 
{
	//Context class
	// Контекстный класс
	class VideoWorks
	{
		var playState:State;
		var stopState:State;
		// Переменная для хранения текущего состояния
		var state:State;
 
		public function VideoWorks()
		{
			trace("Video Player is On");
			playState = new PlayState(this);
			stopState = new StopState(this);
			state = stopState;
		}
		public function startPlay():void
		{
			state.startPlay();
		}
		public function stopPlay():void
		{
			state.stopPlay();
		}
 
		// Методы получатели и установщики
		public function setState(state:State):void
		{
			trace("A new state is set");
			this.state = state;
		}
		public function getState():State
		{
			return state;
		}
		public function getPlayState():State
		{
			return this.playState;
		}
		public function getStopState():State
		{
			return this.stopState;
		}
	}
}
Код AS3:
package 
{
	//Stop State;
	// Класс контекстного состояния: проигрывание остановлено
	class StopState implements State
	{
		// Доступ к методам установщикам и получателям для каждого состояния
		var videoWorks:VideoWorks;
 
		public function StopState(videoWorks:VideoWorks)
		{
			trace("--Stop State--");
			this.videoWorks = videoWorks;
		}
		public function startPlay():void
		{
			trace("Begin playing");
			videoWorks.setState(videoWorks.getPlayState());
		}
		public function stopPlay():void
		{
			trace("You're already stopped");
		}
	}
}

Код AS3:
package 
{
	//Play State
	// Класс контекстного состояния: состояние проигрывания
	class PlayState implements State
	{
		var videoWorks:VideoWorks;
		public function PlayState(videoWorks:VideoWorks)
		{
			trace("--Play State--");
			this.videoWorks = videoWorks;
		}
		public function startPlay():void
		{
			trace("You're already playing");
		}
		public function stopPlay():void
		{
			trace("Stop playing.");
			videoWorks.setState(videoWorks.getStopState());
		}
	}
}

Код AS3:
package 
{
	//State Machine Interface
	// Интерфейс автомата состояний
	interface State
	{
		function startPlay():void;
		function stopPlay():void;
	}
}
Код AS3:
package 
{
	//Test states
	// Тестируем состояния
	import flash.display.Sprite;
	public class TestState extends Sprite
	{
		public function TestState( ):void
		{
			var test:VideoWorks = new VideoWorks( );
			test.startPlay( );
			test.startPlay( );
			test.stopPlay( );
			test.stopPlay( );
		}
	}
}

Старый 16.03.2013, 17:17
Yulia_V вне форума Посмотреть профиль Отправить личное сообщение для Yulia_V Найти все сообщения от Yulia_V
  № 3  
Ответить с цитированием
Yulia_V

Регистрация: Sep 2012
Сообщений: 57
Спасибо, но я с классами не очень много работала, вот я их все создала, а в главный класс добавила:
Код AS3:
var test:VideoWorks = new VideoWorks( );
test.startPlay();
Окно вывод выдаёт каждый раз как я добавляю объект с музыкой на сцену:
Video Player is On
--Play State--
--Stop State--
Begin playing
A new state is set

Но я упорно не могу понять как управлять воспроизведением с помощью этого кода(

Старый 16.03.2013, 17:52
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 4  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Цитата:
Сообщение от Yulia_V Посмотреть сообщение
Спасибо, но я с классами не очень много работала, вот я их все создала, а в главный класс добавила:
Код AS3:
var test:VideoWorks = new VideoWorks( );
test.startPlay();
Окно вывод выдаёт каждый раз как я добавляю объект с музыкой на сцену:
Video Player is On
--Play State--
--Stop State--
Begin playing
A new state is set

Но я упорно не могу понять как управлять воспроизведением с помощью этого кода(
Всё очень просто:
С помощью метода setState эземпляра контекстного класса VideoWorks вы устанавливаете состояние. А уже непосредственно startPlay() или stopPlay() будет вызываеть метод конкретного состояния.

И если вы обратили внимание, то первое сотояние в которое переходит VideoWorks в своём конструкторе (т.е. при инициализации) state = stopState; - состояние остановлено, таким образом, если бы мы вызвали в клиенте test.stopPlay( );, то вам в трэйс выдало: You're already stopped., т.е. выполнение каких-либо действий в данном случае просиходить не должно. Друми словами: в зависимости от состояния: либо выполняются действия, либо они не выполняются (т.е. метод ничего не содержит и служит только для обращения к нему через интерфейс)

Старый 16.03.2013, 18:16
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 5  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Удали классы, верни все обратно. Нажми на кадр с музыкой и выбери в настройках тип воспроизведения - "Поток" (Stream).

Старый 16.03.2013, 18:48
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 6  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Кстати, что касается паузы. Если внести немного изменений в вышеописанную реализацию шаблона состояния, то можно в него добавить состояние паузы.

Реализация на примере видеопотока с именем test.flv

Код:
Видеоплеер с состояниями: расширение паузой

1. Интерфейс состояния
	State.as
2. Классы контекста состояния
	StopState.as - состояние проигрывание остановлено
	PlayState.as - состояние проигрывания
	PauseState.as - состояние паузы
3. Контекстный класс
	VideoWorks.as
4. Кнопки
	NetBtn.as - кнопка для переключения триггеров
	BtnState.as - состояния для кнопок переключения
5. Клиент
	TestPause.as
Код AS3:
package 
{
	//State Interface #1
	// Интерфейс состояния
	import flash.net.NetStream;
	internal interface State
	{
		function startPlay(ns:NetStream,flv:String):void;
		function stopPlay(ns:NetStream):void;
		function doPause(ns:NetStream):void;// добавлено
	}
}
Код AS3:
package 
{
	//Stop State #2
	// Состояние проигрывание остановлено
	import flash.net.NetStream;
 
	internal class StopState implements State
	{
		private var videoWorks:VideoWorks;
 
		public function StopState(videoWorks:VideoWorks)
		{
			trace("--Stop State--");
			this.videoWorks = videoWorks;
		}
		public function startPlay(ns:NetStream,flv:String):void
		{
			ns.play(flv);
			trace("Begin playing");
			videoWorks.setState(videoWorks.getPlayState());
		}
		public function stopPlay(ns:NetStream):void
		{
			trace("You're already stopped");
		}
 
		// Добавлено
		public function doPause(ns:NetStream):void
		{
			trace("Cannot go to Stop from Pause.");
		}
	}
}

Код AS3:
package 
{
	//Play State #3
	// Состояние проигрывания
	import flash.net.NetStream;
 
	class PlayState implements State
	{
		private var videoWorks:VideoWorks;
		public function PlayState(videoWorks:VideoWorks)
		{
			trace("--Play State--");
			this.videoWorks = videoWorks;
		}
		public function startPlay(ns:NetStream,flv:String):void
		{
			trace("You're already playing");
		}
		public function stopPlay(ns:NetStream):void
		{
			ns.close();
			trace("Stop playing.");
			videoWorks.setState(videoWorks.getStopState());
		}
 
		// Добавлено
		public function doPause(ns:NetStream):void
		{
			ns.togglePause();
			trace("Begin pause.");
			videoWorks.setState(videoWorks.getPauseState());
		}
	}
}
Код AS3:
package 
{
	//Pause State #4
	// Состояние паузы
	import flash.net.NetStream;
	class PauseState implements State
	{
		var videoWorks:VideoWorks;
		public function PauseState(videoWorks:VideoWorks)
		{
			trace("--Pause State--");
			this.videoWorks = videoWorks;
		}
		public function startPlay(ns:NetStream,flv:String):void
		{
			trace("You have to go to unpause");
		}
		public function stopPlay(ns:NetStream):void
		{
			trace("Don't go to Stop from Pause");
		}
		public function doPause(ns:NetStream):void
		{
			ns.togglePause();
			trace("Quit pausing.");
			videoWorks.setState(videoWorks.getPlayState());
		}
	}
}

Код AS3:
package 
{
	//Context Class #5
	// Контекстный класс
	import flash.net.NetStream;
 
	internal class VideoWorks
	{
		private var playState:State;
		private var stopState:State;
		private var pauseState:State;
		private var state:State;
 
		public function VideoWorks()
		{
			trace("Video Player is on");
			playState = new PlayState(this);
			stopState = new StopState(this);
			pauseState = new PauseState(this);
			state = stopState;
		}
		internal function startPlay(ns:NetStream,flv:String):void
		{
			state.startPlay(ns,flv);
		}
		internal function stopPlay(ns:NetStream):void
		{
			state.stopPlay(ns);
		}
		// Добавлено
		internal function doPause(ns:NetStream):void
		{
			state.doPause(ns);
		}
		internal function setState(state:State):void
		{
			trace("A new state is set");
			this.state = state;
		}
		internal function getState():State
		{
			return state;
		}
		internal function getPlayState():State
		{
			return this.playState;
		}
		internal function getStopState():State
		{
			return this.stopState;
		}
		// Добавлено
		internal function getPauseState():State
		{
			return this.pauseState;
		}
	}
}

Код AS3:
package 
{
	//Button for transition triggers
	// Кнопка для переключения триггеров
	import flash.display.Sprite;
	import flash.display.SimpleButton;
	import flash.display.Shape;
	import flash.text.TextFormat;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	public class NetBtn extends SimpleButton
	{
		public function NetBtn(txt:String)
		{
			upState = new BtnState(0xfab383,0x9e0039,txt);
			downState = new BtnState(0xffffff,0x9e0039,txt);
			overState = new BtnState(0x9e0039,0xfab383,txt);
			hitTestState = upState;
		}
	}
}

Код AS3:
package 
{
	//States for transition buttons
	// Состояния для кнопок переключения
	import flash.display.Sprite;
	import flash.display.Shape;
	import flash.text.TextFormat;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	class BtnState extends Sprite
	{
		public var btnLabel:TextField;
		public function BtnState(color:uint,color2:uint,btnLabelText:String)
		{
			btnLabel = new TextField();
			btnLabel.text = btnLabelText;
			btnLabel.x = 5;
			btnLabel.autoSize = TextFieldAutoSize.LEFT;
			var format:TextFormat = new TextFormat("Verdana");
			format.size = 12;
			btnLabel.setTextFormat(format);
			var btnWidth:Number = btnLabel.textWidth + 10;
			var bkground:Shape = new Shape();
			bkground.graphics.beginFill(color);
			bkground.graphics.lineStyle(2,color2);
			bkground.graphics.drawRect(0,0,btnWidth,18);
			addChild(bkground);
			addChild(btnLabel);
		}
	}
}

Код AS3:
package 
{
	//Implement FMS2 App and Test State Machine #6
	// Имплементация приложения и тестирование автомата
	import flash.display.Sprite;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.media.Video;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.events.MouseEvent;
	import flash.events.NetStatusEvent;
 
	public class TestPause extends Sprite
	{
		private var nc:NetConnection=new NetConnection( );
		private var ns:NetStream;
		private var vid:Video = new Video(320,240);
		private var vidTest:VideoWorks;
		private var playBtn:NetBtn;
		private var stopBtn:NetBtn;
		private var flv:String;
		private var flv_txt:TextField;
		private var dummy:Object;
 
		public function TestPause( )
		{
			nc.connect(null);
			ns = new NetStream(nc);
			addChild(vid);
			vid.x = stage.stageWidth / 2 - vid.width / 2;
			vid.y = stage.stageHeight / 2 - vid.height / 2;
 
			//Instantiate State Machine
			// Создаём автомат состояний
			vidTest = new VideoWorks();
 
			//Play, Stop and Pause Buttons
			// Кнопки проигрывания, остановки и паузы
			playBtn = new NetBtn("Play");
			addChild(playBtn);
			playBtn.x = stage.stageWidth / 2 - 100 + playBtn.width / 2;
			playBtn.y = 350;
			stopBtn = new NetBtn("Stop");
			addChild(stopBtn);
			stopBtn.x = stage.stageWidth / 2 - stopBtn.width / 2;
			stopBtn.y = 350;
			var pauseBtn:NetBtn = new NetBtn("Pause");
			addChild(pauseBtn);
			pauseBtn.x=(stage.stageWidth / 2 + 100) - pauseBtn.width;
			pauseBtn.y = 350;
 
			//Add Event Listeners
			// Добавляем обработчики событий
			playBtn.addEventListener(MouseEvent.CLICK,doPlay);
			stopBtn.addEventListener(MouseEvent.CLICK,doStop);
			pauseBtn.addEventListener(MouseEvent.CLICK,pauseNow);
 
			//Add the text field;
			// Добавляем текстовое поле
			flv_txt = new TextField();
 
			// Имя видеофайла
			flv_txt.text = "test";
 
			flv_txt.border = true;
			flv_txt.borderColor = 0x9e0039;
			flv_txt.background = true;
			flv_txt.backgroundColor = 0xfab383;
			flv_txt.type = TextFieldType.INPUT;
			flv_txt.x = stage.stageWidth / 2 - 45;
			flv_txt.y = 10;
			flv_txt.width = 90;
			flv_txt.height = 16;
			addChild(flv_txt);
 
			//This prevents a MetaData error being thrown
			// Для предотвращения ошибки мета-данных
			dummy = new Object();
			ns.client = dummy;
			dummy.onMetaData = getMeta;
 
			//NetStream
			ns.addEventListener(NetStatusEvent.NET_STATUS,flvCheck);
		}
 
		//MetaData
		// Мета-данные
		private function getMeta(mdata:Object):void
		{
			trace(mdata.duration);
		}
 
		//Handle flv
		// Работаем с видеофайлом
		private function flvCheck(event:NetStatusEvent):void
		{
			switch (event.info.code)
			{
				case "NetStream.Play.Stop" :
					vidTest.stopPlay(ns);
					vid.clear( );
					break;
				case "NetStream.Play.StreamNotFound" :
					vidTest.stopPlay(ns);
					flv_txt.text = "File not found";
					break;
			}
		}
 
		//Start play
		// Начинам проигрывание
		private function doPlay(e:MouseEvent):void
		{
			if (flv_txt.text != "" && flv_txt.text !=
			 "Provide file name")
			{
				flv_txt.textColor = 0x000000;
				flv = flv_txt.text + ".flv";
				vidTest.startPlay(ns,flv);
				vid.attachNetStream(ns);
			}
			else
			{
				flv_txt.textColor = 0xcc0000;
				flv_txt.text = "Provide file name";
			}
		}
 
		//Stop play
		// Останавливаем проигрывание
		private function doStop(e:MouseEvent):void
		{
			vidTest.stopPlay(ns);
			vid.clear( );
		}
 
		//Pause play
		// Ставим проигрывание на паузу
		function pauseNow(e:MouseEvent):void
		{
			vidTest.doPause(ns);
		}
	}
}

Старый 16.03.2013, 18:55
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 7  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Яша, это всего новичок.

Старый 16.03.2013, 19:33
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 8  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от Yulia_V Посмотреть сообщение
Здравствуйте, не подскажете как создать встроенный(!) в приложение звук, и чтоб он при нажатии на объект начинал проигрываться, а при повторном нажатии замолкал (а лучше чтоб вставал на паузу, но можно без этого).
И ещё заметила, что он воспроизводится лишь один раз. А надо циклично.
Yulia_V, самое простое это сделать вот так
Код AS3:
package  {
 
	import flash.display.*;
	import flash.events.*;
	import flash.media.*;
	import flash.net.*;
	import flash.utils.*;
 
 
	public class Main extends MovieClip {
 
		var soundChanel;
		var pauseTr;
		var soundPosition = 0;
		public function Main() {
			// constructor code
			sndPlayPauseBtn.addEventListener(MouseEvent.CLICK, clickHandler);
		}
 
		function clickHandler(e:*):void{
			if (pauseTr){
				soundPosition = soundChanel.position;
				soundChanel.stop();
				pauseTr = false;
			} else {
				soundChanel = new MySound().play(soundPosition,99999999);
				pauseTr = true;
			}
		}
	}
 
}
youtube how-to http://www.youtube.com/watch?v=6psTW...ature=youtu.be
Без AS3 http://www.youtube.com/watch?v=ekZiCYfDGEo
__________________
Гоночка


Последний раз редактировалось Alex Lexcuk; 16.03.2013 в 20:19.
Старый 16.03.2013, 20:34
Yulia_V вне форума Посмотреть профиль Отправить личное сообщение для Yulia_V Найти все сообщения от Yulia_V
  № 9  
Ответить с цитированием
Yulia_V

Регистрация: Sep 2012
Сообщений: 57
Alex Lexcuk, огромное вам спасибо!

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

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

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


 


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


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