azizsoft
03-04-2016, 06: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)
استودكم الله
السلام عليكم ورحمة الله وبركاته
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين
تحتوي أجهزة الهواتف الذكية على خاصية استشعار الحركة ثلاثي الابعاد وهاته الحركة عبارة عن قيم واحداثيات يمكن التعامل معها بكل سهولة في لغة اكشن
سكريبت 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)
استودكم الله