Macromedia Flash программасында плейер жасау
Н.Х.Маметжанова, оқытушы
Қазмемқызпу, Алматы қ.
Macromedia Flash программасының ActionScript тілін пайдалана отырып, плейер құруды қарастырайық. Плейерді жасауды бірінші негізгі батырмалардың және плейерлерге тән элементтердің суретін салудан бастау керек. Бірақ мен бірден плейер интерфейсінің дайын нұсқасын қолдануды дұрыс санадым.
1-cурет. Плейер интерфейсі
Плейер клипке орналастырылғанын ескеріңіз. Клипті өңдеу режиміне өтіп, плейердің қандай элементтерден құралғанын жақсылап зерттеңіз. Mp3 форматтағы өзіңізге ұнайтын кезкелген өлеңді таңдап, фильмге импорттаңыз. Содан кейін оған программалық экспорт идентификаторын белгілеңіз (мысалы, song). Енді программаның кодын жаза бастауға болады. Плейер орналасқан клиптің уақыт диаграммасына жаңа қабат қосыңыз, оның бірінші кадрын белгілеп Action тақтасын ашыңыз. Алдымен классы Sound болатын объект құрып, оған библиотекадағы дыбысты байланыстыру керек:
var sound:Sound=new Sound(this);
sound.attachSound("song");
Өлеңді ойнату үшін қолданылатын Play батырмасына play_button деп ат қойыңыз. Дыбыстың ойнатылған немесе ойнатылмай тұрғанын анықтау үшін play_flag айнымалысын енгіземіз. Тоқтатылғанға дейінгі ойнатылған фрагменттің позициясын stop_position айнымалысы сақтайтын болады:
var stop_position:Number=null;
var play_flag:Boolean="false"; // Алғашында дыбыс ойнатылмай тұрады
play_ button батырмасында onRelease өндеушінің коды мынандай:
play_button.onRelease-function():Void {if (play_flag) {
sound.stop(); // Ағымдағы дыбысты тоқтату керек, әйтпесе оған жаңа дыбыс қосарласып шығады
sound.start(); } else {sound.start(stop_position);
play_flag=true; }};
onRelease оқиғасын onReleaseOutside оқиғасымен сақтандыру қажет:
play_button.onReleaseOutside=play_button.onRelease;
Енді «кідіру» нүктесіне көшеміз (бетінде квадрат бейнеленген). Оған stop_button деп ат қояйық. Батырманы басқан кезде stop() амалы іске қосылып, stop_position айнымалысына дыбыстың қазіргі уақытта ойнап тұрған үзіндісінің позициясы жазылу керек. Дыбыстың ойнатылуы тоқтатылғаны туралы мәлімет, play_flag айнымалысында белгіленуі керек:
stop_button.onRelease=function():Void { /start() амалына беру үшін миллисекундтарды секундтарға айналдырамыз
stop_positian=sound.position/1000;
sound.stop(); play_flag=false;};
stop_button.onReleaseOutside=stop_button.onRelease;
Ойнату шкаласын (шамамен «корпустың» ортасында орналасқан көк клип) skala деп атаңыз. Координаттардың бас нүктесі оның сол жақ шекарасының ортасына орналасқан, себебі келесіде ойнап тұрған дыбыстың фрагментімен бегунок позициясының сәйкестігін есептеуді жеңілдету үшін. Бегунок – қалыпты жағдайда «шкаланың» бас жағында орналасқан шағын көгілдір тіктөртбұрыш түріндегі клип. Оған begunok деп ат қойыңыз.
Бұл клиптің координаттар басы тіктөртбұрыштың центрімен сәйкес келуі тиіс.
Ойнату басында бегунок жұлқымай қимылға келу үшін, оның координаттарының бас нүктесі шкала координаттарының басымен сәйкес келу керек. Ол үшін келесі жолды жазамыз:
begunok._x=skala._x, begunok._y=skala._y;
Бегуноктың орнын біз onEnterFrame оқиғасы арқылы жаңартып отырамыз. Бегунок тек дыбыс ойнағанда ғана жылжуы тиіс:
begunok.onEnterFrame=function():Void {if (play_flag) {
this._x=skala._x+(sound.position/sound.duration)*skala._width;}};
Егер дыбыс ойнап тұрса, онда бегунокты тышқанмен шерткен кезде, ол курсордың артынан жылжуы керек. Бегуноктың орнын ауыстыру кезінде дыбыс ойнатылмайды:
begunok.onPress=function():Void {
if (play_flag) {
this.startDrag(true, skala._x, skala._y, skala._x + skala._width, skala._y);
sound.stop(); play_flag=false;}};
Тышқанның батырмасын жіберген кезде бегунок тышқанның артынан еруін тоқтатады. Содан кейін бегуноктың жаңа орны дыбыстың нешінші секундына сәйкес екендігін анықтап, сол жерден бастап ойнау керек:
begunok.onRelease=function():Void {
this.stopDrag();
var pos:Number=((this._x-skala._x)/skala._width)*sound.duration;
sound.start(pos/1000); play_flag=true;);
begunok.onReleaseOutside=begunok.onRelease;
Дыбыстың ойнатылуы қарапайым және циклді болуы мүмкін. Ойнатылудың циклді түрінде өлең біте салып, қайтадан басынан бастап ойнатылады. Ойнатылудың қай түрі қолданылғанын біздің кодта арнайы loop айнымалысы көрсетеді:
var loop:Boolean=false; // Қалыпты жағдайда қарапайым(циклді емес)
Ойнатылу түрін дөңгелек стрелка бейнеленген батырманы басып өзгертеді(оны loop_button деп атайық). Циклдік режимнің қосылғанын loop_button батырмасының үстіндегі датчик (оны lp деп атайық) көрсететін болады. Ол екі кадрдан тұратын клипті береді. Біріншісінде өшіп тұрған датчик, екіншісінде – индикаторы жанған датчик суреттері сақталған. Loop айнымалысының мәніне байланысты кадрлардың бірі көрінуі тиіс:
loop_button.onRelease=function():Void {
if (loop==false) {lp.gotoAndStop(2); loop_true;} else {loop=false; lp.gotoAndStop(1);}};
loop_button.onReleaseOutside=loop_button.onPelease;
Дыбыстың ойнауы аяқталғанда loop айнымалының мәніне байланысты екі нұсқаның бірі орындалады. Егер циклдік режим қосылған болса, онда өлеңді басынан ойнау керек. Кері жағдайда плейерді бастапқы жағдайға келтіру керек. Ол үшін stop_position және play_flag айнымалыларын, сондай-ақ бегунокты бастапқы қалпына келтіру керек:
sound.onSoundComplete=function():Void {
if (loop) {sound.start();} else {begunok._x=skala._x; stop_position=0; play_flag=false;}};
Алдыға және артқа айналдыру батырмаларын fast_forward және fast_back деп атаңыз.
Артқа айналдыру батырмасының алгоритмі келесідей:
fast_back батырмасын басқан кезде дыбыс ойнап тұрма, осыны тексеру. Егер дыбыс ойнап тұрса, оны тоқтату. Бос клип clip құру. Оны біз onEnterFrame оқиғасының листенері және қызметтік айнымалыларға арналған контейнер ретінде қолданамыз. Clip клипінің onEnterFrame өңдеушісіне оны әрбір іске қосқан сайын ойнау шкаласының бегуногын кішкене солға жылжытатындай код жазамыз. Бегунокты жылжытпас бұрын, нәтижесінде ол шкаладан шығып кетпейтіндігіне көз жеткізуіміз керек. Егер ол шығып кететіндей жағдай болса, онда ол шкаланың басына орналастырылсын. fast_back батырмасын жіберген кезде, нақты айналдыру (орын ауыстыру) болды ма, осыны тексереміз. Егер орын ауыстыру болған болса, онда clip клипті өшіру, ал дыбыс бегуноктың жаңа орнына сай фрагменттен бастап ойнауы керек.
Жоғарыда келтірілген алгоритмнің коды төменде келтірілген:
fast_back.onPress=function():Void {
if (play_flag) {sound.stop(); play_flag=false; begunok.i=0;
begunok.createEmptyMovieClip("clip",10000);
begunok.clip.onEnterFrame=function():Void {
var x:Number=(1000/sound.duration+begunok.i]* skala._width;
begunok.i += 0.01;
if (begunok._x-x>skala._x) {
begunok._x=begunok._x-x;} else {
begunok._x=skala._x;};}};
fast_back.onRelease=function():Void {
if (begunok.сlip) {play_flag=true;
begunok.clip.removeMovieClip();
sound.start((begunok._x-skala._x)/skala._width*sound.duration/1000);}};
fast_back.onReleaseOutside=fast_back.onRelease;
Алдыға айналдыру батырмасының коды да осы сияқты жазылады.
Дауысты басқару бегуногының атын vol, шкаласын - skala, бегуногын - begunok, ақпарат шығатын жолды – val деп атаңыз. Бегунокты жылжытқанда дауыс өзгеріп, соған сай жаңа мән val терезесіне шығуы тиіс. Дауыстың өзгеру интервалын 0-ден 200-ге дейін деп белгілейік(қалыпты жағдайда – 100).
vol.begunok.onPress= function():Void {
this.startDrag(true, vol.skala._x, vol.skala._y, vol.skala._x+vol.skala._width, vol.skala._y);
this.onMouseMove-function():Void {
var percent:Number=Math.round((this-_x-vol.skala._x)/ vol.skala._width*200);
sound.setVolume(percent); vol.val.text_percent;};};
Батырманы жібергенде бегуноктың орын ауыстыруы тоқтайды. Сондай-ақ, енді керек емес onMouseMove өндеушіні өшірген дұрыс:
vol.begunok.onRelease=function():Void {
this.stopDrag(); delete this.onMouseMove;};
vol.begunok.onReleaseOutside=vol.begunok.onRelease;
Қалыпты жағдайда дауыс мәні 100-ге тең болғандықтан, бегунокты шкаланың ортасына орналастыру керек:
vol.begunok._x=vol.skala._x+vol.skala._width/2;
vol.val.text=100;
Action қабатына жазылатын программаның жалпы коды
Айнымалыларды сипаттаймыз
var stop_position:Number = null; var play_flag:Boolean = false; var loop:Boolean = false;
var stop_flag:Boolean = true;
Басқарушы Sound класты объект құрамыз
var sound:Sound = new Sound(this);
sound.attachSound("song");
begunok._x=skala._x, begunok._y=skala._y;
Ойнату батырмасын басқанда орындалатын код
play_button.onRelease = function():Void {
if (play_flag) {sound.stop(); sound.start();} else { sound.start(stop_position);}
play_flag = true;}; play_button.onReleaseOutside = play_button.onRelease;
Тоқтату батырмасын басқанда орындалатын код
stop_button.onRelease = function():Void {
stop_position = sound.position/1000;
sound.stop(); play_flag = false;};
stop_button.onReleaseOutside = stop_button.onRelease;
Ойнатылу шкаласын басқаратын код
begunok.onPress = function():Void {
if (play_flag) {
this.startDrag(true, skala._x, skala._y, skala._x+skala._width, skala._y);
sound.stop(); play_flag = false;}};
begunok.onRelease = function():Void {
this.stopDrag();
var pos:Number = ((this._x-skala._x)/skala._width)*sound.duration/1000;
sound.start(pos); play_flag = true;};
begunok.onReleaseOutside = begunok.onRelease;
begunok.onEnterFrame = function():Void {
if (play_flag) {this._x = skala._x+(sound.position/sound.duration)*skala._width;}};
Дыбыс ойнауын аяқтағанда орындалатын код
sound.onSoundComplete = function():Void {
if (loop) {sound.start();} else {begunok._x = skala._x; stop_position = 0;play_flag = false;}};
Дауысты басқару
vol.begunok.onPress = function():Void {
this.startDrag(true, vol.skala._x, vol.skala._y, vol.skala._x+vol.skala._width, vol.skala._y);
this.onMouseMove = function():Void {
var percent:Number = Math.round((this._x-vol.skala._x)/vol.skala._width*200);
sound.setVolume(percent);
vol.val.text = percent;};};
vol.begunok.onRelease = function():Void {
this.stopDrag();
delete this.onMouseMove;};
vol.begunok.onReleaseOutside = vol.begunok.onRelease;
vol.begunok._x = vol.skala._x+vol.skala._width/2;
vol.val.text = 100;
Артқа айналдыру
fast_back.onPress = function():Void {
if (play_flag) {sound.stop();
play_flag = false; begunok.i = 0;
begunok.createEmptyMovieClip("clip", 10000);
begunok.clip.onEnterFrame = function():Void {
var x:Number = (1000/sound.duration+begunok.i)*skala._width;
begunok.i += 0.01;
if (begunok._x-x>skala._x) {
begunok._x = begunok._x-x;
} else {begunok._x = skala._x;}};}};
fast_back.onRelease = function():Void {
if (begunok.clip) {play_flag = true;
begunok.clip.removeMovieClip();
sound.start((begunok._x-skala._x)/skala._width*sound.duration/1000);}};
fast_back.onReleaseOutside = fast_back.onRelease;
Алдыға айналдыру
fast_forward.onPress = function():Void {
if (play_flag) {sound.stop();
play_flag = false; begunok.i = 0;
begunok.createEmptyMovieClip("clip", 10000);
begunok.clip.onEnterFrame = function():Void {
var x:Number = (1000/sound.duration+begunok.i)*skala._width;
begunok.i += 0.01;
if (begunok._x+x
begunok._x = begunok._x+x;} else {
begunok._x = skala._x+skala._width;}};}};
fast_forward.onRelease = function():Void {
if (begunok.clip) {
delete begunok.clip.onEnterFrame;
delete begunok.i;
play_flag = true;
begunok.clip.removeMovieClip();
sound.start((begunok._x-skala._x)/skala._width*sound.duration/1000);}};
fast_forward.onReleaseOutside = fast_forward.onRelease;
Циклді орындау батырмасын басқаратын код
loop_button.onRelease = function():Void {
if (loop == false) {
lp.gotoAndStop(2);
loop = true;} else {
loop = false;
lp.gotoAndStop(1);}};
loop_button.onReleaseOutside = loop_button.onRelease;
ӘДЕБИЕТТЕР
-
Эллен Финкельнштейн .“Flash 5 для чайников”.- Москва, 2001г.
-
Колин Мук “Action Script для Flash MX”. Подробное руководство, - Санкт-Петербург,2004г.
-
М.Г. Исатулиев “ Macromedia Flash 5”. -Санкт-Петербург, 2001г.
Түйіндеме
Бұл мақалада «Macromedia Flash программасында плейер жасау» тақырыбы бойынша зертханалық жұмысқа арналған материал ұсынылған.
РЕЗЮМЕ
В этой статье представлена лабораторная работа по теме «Создание плейера на программе Macromedia Flash».
Достарыңызбен бөлісу: |