السلام عليكم ...
اليوم جاي , وجايب معي درس .. صعب شوي , وطويل حبتين .. ويبي له دقة تركيز كبيره :)
اولا , هذا هو المثال
[flash]http://www.swishe.org/fisal/lessons/real/sound.swf[/flash]
اللي بنحتاجه عندنا فـ العمل هو كالتالي ::
1- بار خاص للتحكم بالسماعات
2- بار خاص للتحكم بقوة الصوت
3- عداد يحسب مدة المقطع الصوتي
4- بار للتحكم في الصوت
اول شي بنبدا فيه , هو الصوت .. وادراجه , طبعا بيكون ادراج الصوت على هيئة sound track
طريق الادراج :: insert --> sound track :: || في حالة عدم ظهور هذا الخيار , النسخه التي
تقوم بالعمل عليها قديمه وتحتاج الى تحديث ..
بعد ادراج الصوت ,, في الفريم 1 نضع stop ثم نرسم مستطيل .. طولي , ويكون هو الشكل
اللي بيتحرك عليه المؤشر لتحديد مسار المقطع الصوتي مثل ماهو موضح فـ الصوره

الان , نرسم مؤشر صغير على المستطيل ,, مثل ماهو موضح بالصوره

نضع للمؤشر اعلاه ,, move من الفريم اللي يبدا فيه الصوت .. حتى الفريم اللي ينتهي فيه ؛
ثم نسحب المؤشر بزر الفاره .. من بداية الشريط الى نهايته ,, الصوره توضح اكثر :)

الان انتهينا من الشريط الزمني , وجا دور البار الخاص بالصوت من ناحية القوة
افتح سبرايت جديده , اسمها vol_control ,, وحط فيها نص من النوع الديناميكي وسمّه disp_vol في خانة الـ target
اما خانة الـ Variable اكتب disp
وحط فيها الاكشن التالي ::
onEnterFrame() {
new Sound.setPan((pan._X-50 )*2 );
disp=new Sound.getPan();// اعطاء النص الديناميكي كود مهتمه هي معرفة عمل السماعات
}
المقصود بالسطر الاول , هو جعل الصوت يأخذ قيمة الاحداثي السيني الذي يقع عليه المؤشر
(( اذا كان المؤشر على الاحداثي 50 تكون قوة الصوت 50 , واذا كان على 10 تكون قوة الصوت 10 .. وهكذا ((
في داخل السبرايت نفسها .. اعمل الـ Slider
مع تسمية المؤشر Volume
الحين جا دور البار الخاص بعمل السماعات
افتح سبرايت جديده , وسمها pan_control.. وضع خانة للنص الديناميكي
سمّها disp_pan وفي خانة الـ variable عطها الاسم disp
وحط فيها الاكشن التالي ::
onEnterFrame() {
new Sound.setPan((pan._X-50 )*2 );
disp=new Sound.getPan();// اعطاء النص الديناميكي كود مهتمه هي معرفة عمل السماعات
}
ملاحظه مهمه جدا :: فـ السطر الاول ,
اسندت تشغيل السماعات للاحداثي السيني للمؤشر pan, مع طرح منها 50 وضربها في 2 .. لاني
استخدمت مستطيل طوله 100 ومنتصفه 0 واطرافه هي 50 و -50
بشكل بديهي التوزيع بيكون طرح 50 من القيمه الاصليه , وضربها في اثنين ..
لاني اتعامل مع النصف من ناحية الارقام
بعد كذا , ارسم فيها المستطيل الخاص فيها .. والمؤشر .. وسمّ المؤشر pan
الحين انتهينا من تطويل وتقصير الصوت باستخدام الاكشن .. بقى علينا الزمن + بار التحكم
نجي للزمن ..
افتح سبرايت جديد .. وسمّها time وحط فيها ثلاث نصوص من النوع الديناميكي , اسمائها كالتالي
menute وله متغير m
count وله متغير i
counte وله متغير counter
اعتذر عن الاسماء .. ادري انها ملخبطه شوي , بس شغلي ماكان عملي 100% :)
فـ السبرايت time نحط الاكشن التالي
onEnterFrame() { // عند اي فريم
i++; // اضف الى المتغير i زياده بمقدار عدد واحد
if (i%15==0) { // اذا كان باقي قسمة i على ( معدل الفريم\frame rate وهو عندي 15 ( يساوي صفر
counter++; // قم بالزياده بمقدار واحد
if (counter>=60) { // اذا كانت الثواني اكبر من او تساوي 60 ( يعني دقيقه واحده(
m++; // زيادة الدقائق
counter=0;// تصفير الثواني , علشان ترجع تعيد من الصفر
}
}
}
onLoad () { // عند التحميل
m=0; // اعطينا الدقائق والثواني قيم اوليه , وهي صفر
counter=0;
}
بالنسبه للنص اللي اسمه count لا تخلونه يظهر في العرض , لانه يحسب اجزاء الثانيه فقط , وماله فائده الا بالزياده بس ..
انتهى الجزء الصعب , وبقى السهل باذن الله :)
نجي لبار التحكم ..
اول زر عندنا .. هو زر التشغيل , وبنستخدم الاكشن هذا
on (press) { // عند الضغط
nextFrameAndPlay();// انتقل للمشهد اللاحق واعرضه
if (play()) {// امر شرط , ومعناه اذا تم تشغيل المقطع الصوتي بعد ايقاف جزئي ( الامر puse || )
tellTarget (time) { // حدد السبرايت المسماه time
i=true; // اعطاء الامر لـ i بالعمل وحساب الوقت
}
}
}
اما بالنسبه لـ زر الايقاف المؤقت (( puse || ))
on (press) { // عند الضغط
stop(); // اوقف العمل
if (stop ()) { // اذا تم الايقاف
tellTarget (time) { // حدد السبرايت المسماه time
i=stop;// اعطاء الامر للعداد بالتوقف
}
}
}
زر الايقاف الكلي
on (press) { // عند الضغط
gotoSceneAndPlay("<current scene>",1); // اذهب الى المشهد المحدد والفريم المحدد
}
زر تقديم العرض
on (press) { // عند الضغط
skipFrameAndPlay(15); // الذهاب الى الفريم الذي يقع على بعد 15 فريم من الفريم الحالي (( على حسب الفريم ريت اللي عندك .. انا عندي 15 ((
tellTarget (time) { // حدد السبرايت time
counter++; // اعطاء الكاونتر امر بالزياده مقداره واحد
if (counter>=60) { // اذا كان العداد اكبر من او يساوي 60 (( كمل دقيقه واحده ((
counter=0; // تصفير العداد الخاص بالثواني ليبداء بالحساب من الصفر ..
m++; // زيادة الدقائق بمقدار واحد
}
}
}
اخيرا .. زر الاعادة :)
on (press) { // عند الضغط
skipFrameAndPlay(-15); // العوده 15 فريم للخلف
tellTarget (time) { // حدد السبرايت time
counter--// اعطاء الامر بتقليل الثواني بمقدار واحد
if (counter<0 && m<0) { // اذا كانت الدقائق والثواني اصغر من الارقام المعطاه
counter=0; // قم بتصفيرهما
m=0;
}
if (counter<=0 && m>=1) { // اذا كانت الثواني اقل من الصفر والدقائق اكبر من الواحد
counter=60;// اعط الثواني القيمه 60
m--;// نقص الدقائق بمقدار واحد
}
}
}
نتهى :)
اتمنى ان يكون العمل خال ٍ من الاخطاء .. المصدر ( فيصل )
واخيرا .. ان اصبت فمن الله .. و ان اخطاءت.. فمن نفسي و الشيطان
اي استفسار .. او اي نقطه غير مفهومه .. انا في الخدمه
دعواااتكم ؛