المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الثالث عشر لانشاء تطبيقات الهاتف ببرنامج الفلاش : Accelerometer


azizsoft
03-04-2016, 05:51 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين


تحتوي أجهزة الهواتف الذكية على خاصية استشعار الحركة ثلاثي الابعاد وهاته الحركة عبارة عن قيم واحداثيات يمكن التعامل معها بكل سهولة في لغة اكشن
سكريبت 3 من خلال كلاس Accelerometer نوضح أكثر = الهاتف لما يتم تحريكه في جميع الاتجاهات يمكن لنا أن نعرف ونتعامل مع هاته القيم الخاصة بمحور وحركة الهاتف ولنقرب الصورة أكثر = هناك لعبة سباق سيارات لما يقوم المستخدم بتحريك الهاتف يمينا ويسارا تتبع السيارة اتجاه التدوير وهذا هو بيت القصيد يعني التحكم في تحريك العناصر بتحريرك الهاتف فقط دون اللمس ويكون هذا بواسطة دوال كلاس Accelerometer .
هناك بعض الاجهزة اصدارات قديمة لاتقبل هاته الخاصية ويمكن اختبار ذلك عن طريق هذا الامر Accelerometer.isSupported
المهم أن هذا الكلاس يمكنك أخي الكريم من التحكم الكامل في عناصر المشروع من خلال تحريك الهاتف فقط ويتم اعتماده غالبا في تطبيقات الالعاب المبنية على السرعة والحركة .
نمر الان الى شرح طريقة استغلال هذا الكلاس في انجاز تطبيق بسيط يعتمد فقط على تحريك الهاتف للتحكم بالعنصر .
اذن افتح مشروع جديد منصة أندرويد وتابع معي :
1/ يجب استدعاء كلاس Accelerometer وأحداثه كما يلي


import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;



2/ انشاء نسخة من الكائن او كلاس Accelerometer


var acc:Accelerometer = new Accelerometer();


3/ لمعرفة قيم واحداثيات حركة الجهاز يجب ادراج حدث استماع لعملية التسارع ويكون الكود كما يلي


acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);


4/ انشاء الوظيفة التي ستمكننا من تخزين قيم التسارع وهي ثلاثة قيم
accelerationX
accelerationY
accelerationZ
ليكون الكود كما يلي


import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

var acc:Accelerometer = new Accelerometer();

acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);

function onAccUpdate(e:AccelerometerEvent):void{
trace("X axis = "+e.accelerationX);
trace("Y axis = "+e.accelerationY);
trace("Z axis = "+e.accelerationZ);
}



الان عاين النتيجة وحرك سلايدر المحاور الثلاثة في المحاكي وستلاحظ القيم في نافذة المخرجات


http://www.mediafire.com/convkey/3d44/cddrlli631kh8e2zg.jpg

وبواسطة هذا الكلاس يمكن انجاز مشاريع جميلة مبنية على الحركة والسرعة .

الدالة isSupported
للتأكد من دعم الهاتف لهاته الخاصية من الحركة حيث ان الاصدارات القديمة من الهواتف لاتدعم
ذلك وبالتالي يمكن استغلال الدالة في اظهار رسالة مثلا للمستخدم كما في الكود التالي :


import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

var acc:Accelerometer = new Accelerometer();
acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);

function onAccUpdate(e:AccelerometerEvent):void{
if (Accelerometer.isSupported)
{
trace("X axis = "+e.accelerationX);
trace("Y axis = "+e.accelerationY);
trace("Z axis = "+e.accelerationZ);
}
else
{
trace("عفوا جهازك لايدعم هاته التقنية" ) ;
}
}



طبعا يمكن استغلال هاته القيم في تحريك أي عنصر في المثال التالي سنضيف دائرة ونحولها الى موفي كليب باسم ball وانسخ الكود التالي


import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

var my_acc:Accelerometer = new Accelerometer();

my_acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
function onAccUpdate(e:AccelerometerEvent):void{
ball.x -= (e.accelerationX*30);
ball.y += (e.accelerationY*30);
}



عند المعاينة لاحظ أن الكرة تتجاوز حدود مسرح العمل ولذلك نستطيع التحكم
باحداثياتها وتحجيمها مع مقاس المشروع الكود اتالي يوضح الأمر


import flash.sensors.Accelerometer ;
import flash.events.AccelerometerEvent ;

var my_acc :Accelerometer = new Accelerometer() ;


my_acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate) ;
function onAccUpdate(e :AccelerometerEvent) :void{
ball.x -= (e.accelerationX*10) ;
ball.y += (e.accelerationY*10) ;

if (ball.x < 0) {
ball.x = 0 ;
} else if (ball.x > stage.stageWidth) {
ball.x = stage.stageWidth ;
}

if (ball.y < 0) {
ball.y = 0 ;
} else if (ball.y > stage.stageHeight)
{
ball.y = stage.stageHeight ;
}

}



الدالة setRequestedUpdateInterval()


تحسين وقت تحديث التسارع ولاحظ هنا مثلا الرقم 50 يمثل عدد أجزاء الثانية


import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

var my_acc:Accelerometer = new Accelerometer();
my_acc.setRequestedUpdateInterval(50);

my_txt.text = "Acc support is "+Accelerometer.isSupported;

my_acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
function onAccUpdate(e:AccelerometerEvent):void{
my_dot.x -= (e.accelerationX*10);
my_dot.y += (e.accelerationY*10);

if (my_dot.x < 0) {
my_dot.x = 0;
} else if (my_dot.x > stage.stageWidth) {
my_dot.x = stage.stageWidth;
}

if (my_dot.y < 0) {
my_dot.y = 0;
} else if (my_dot.y > stage.stageHeight)
{ my_dot.y = stage.stageHeight;
}

}



لشرح الدرس أكثر قمت بتطبيق بسيط يتضمن الاكواد المذكورة حمله من الرابط وقم بتنصيبه بهاتفك وعاين محتوى الدرس .


http://www.mediafire.com/convkey/83c8/1c8euztzd9195x2zg.jpg?size_id=7

تحميل التطبيق (http://www.mediafire.com/download/djf3s41pvwa4ozz/ball.rar)



استودكم الله

ثامر أبو بلقيس
03-04-2016, 08:26 AM
السلام عليكم ورحمة الله وبركاته
بارك الله فيـــك أستاذ عزيز على هذه السلسلة المنظمة لإنشاء تطبليقات الهاتف بالفلاش

صحيح لا أملك المعلومة نهائيا فيما تعلق بالفلاش و أجد صعوبة في التأقلم أو التعلم

لكن من الجيد وجود مثل هذه المحفزات للتفكير بجدية في التعلم :abc_138:شكـــرا :abc_138:

azizsoft
03-04-2016, 03:46 PM
السلام عليكم ورحمة الله وبركاته
بارك الله فيـــك أستاذ عزيز على هذه السلسلة المنظمة لإنشاء تطبليقات الهاتف بالفلاش

صحيح لا أملك المعلومة نهائيا فيما تعلق بالفلاش و أجد صعوبة في التأقلم أو التعلم

لكن من الجيد وجود مثل هذه المحفزات للتفكير بجدية في التعلم :abc_138:شكـــرا :abc_138:

وعليكم السلام ورحمة الله وبركاته

جزاكم الله خيرا أستاذ ثامر
بالعكس أخي الفاضل المحترفين في مجال البرمجة أمثالكم لن يجدوا اي صعوبة
في ممارسة اي برنامج اخر بما أن الاساسيات والقواعد واحدة
تنياتنا لكم بالتوفيق يا طيب .:abc_022:

أبو يوسف
07-04-2016, 09:17 PM
جزاك الله خيرا اخانا عزيز وبارك الله فيك

azizsoft
07-04-2016, 10:48 PM
جزاك الله خيرا اخانا عزيز وبارك الله فيك

مرحبا استاذ أبو يوسف
وفقكم الله:abc_022:

الموسوعة للمعلوماتية
11-04-2016, 08:34 PM
نفع الله بكم

abohmam
12-04-2016, 09:44 PM
بارك الله فيك أخى الفاضل عزيز

دروس شيقة ماشاء الله

يبدو اننى سيفوتني الكثير من هذه الدورة الرائعة :abc_070:

جزاك الله خيرا ونفع بك الجميع

azizsoft
12-04-2016, 11:53 PM
بسم الله الرحمن الرحيم

بارك الله فيكم جميعا
ان شاء الله نستفيد جميعا استاذ أبو همام :abc_022:

محسن البيتي
04-09-2017, 01:56 AM
بارك الله فيك ونفع بك المسلمن

خادم المسلمين
16-02-2018, 11:44 PM
ممتاز ويوجد تامبلت جاهزة ببرنامج الفلاش يمكن التدرب عليها:abc_088:

خادم المسلمين
16-02-2018, 11:46 PM
:abc_022::abc_022: