[برمجة اندرويد] تحريك الرسومات في الألعاب

غالبية الألعاب وكذلك بعض التطبيقات تتطلب تحريك صور وشخصيات رسومية خلال الشاشة، تحريك الشخصيات يتم من خلال رسم الشخصية بحالات الحركة المطلوبة (sprite) ثم عرض تلك الرسومات واحدة تلو الأخرى لتعطي إيحاء الحركة كالصورة التالية:
Animation Sprite
وأما تحريك الخلفيات فغالبا يتم من خلال إنشاء صورة خلفية اكبر من حجم مساحة العرض ثم عرض جزء من الصورة وتغيير احداثياتها لتبدو كأنها تتحرك.

يوفر الاندرويد عنصر للصور (ImageView) لكن ذلك مخصص لعرض الصور الثابتة أو التي لا تتطلب تغييرات سريعة ولا يمكن استخدامه للصور المتحركة لأنه بطيء. للتعامل مع الصور المتحركة نحتاج إلى الرسم مباشرة على canvas (سطح الرسم) لكن توجد طريقة تبسط العملية وهي باستخدام عنصر SurfaceView والذي يمكنك من الرسم المباشر على canvas وبطريقة سهلة.
عملية التحريك تحتاج أن تعمل في الخلفية لكي لا تعطل عمل التطبيق (لفهم عمليات الخلفية راجع الشرح السابق). لتنظيم العمل سنجعل النص الخاص بالحركة في كلاس (class) خاص سنسمية AnimGuy:

public class AnimGuy extends SurfaceView implements Runnable {
....
}

Continue reading “[برمجة اندرويد] تحريك الرسومات في الألعاب”

[برمجة اندرويد] تنفيذ العمليات في الخلفية

عند تنفيذ تطبيق الاندرويد يتم إنشاء عملية أساسية تسمى UI Thread وهي المسؤولة في تنفيذ أوامر التطبيق وعرض النتائج على الشاشة وكذلك الاستجابة لعمليات المستخدم مثل الضغط على الأزرار والكتابة …الخ. في التطبيقات البسيطة تكون تلك العملية قادرة على أداء المهمة بشكل جيد لكن توجد حالات كثيرة يحتاج فيها مطور التطبيق إلى إنشاء عمليات إضافية لكون العملية الأساسية UI Thread غير كافية.

لنفرض مثلا أن التطبيق يقوم بتحميل ملف ويعرض نسبة التحميل على الشاشة بشكل مباشر فهذا يعني أننا نحتاج إلى مراقبة حالة الملف وتعديل البيانات المعروضة على الشاشة بشكل مستمر، لو نفذنا هذه الخطوات باستخدام العملية الأساسية فستجد أن التطبيق سيصبح مشغول في حلقة برمجية (loop) لمراقبة عملية تحميل الملف وتعديل بيانات العرض ولن يكون هناك وقت للتعامل مع المستخدم أو بقية أجزاء التطبيق بمعنى أن التطبيق سيكون في حالة عدم استجابة إلى أن يكتمل الملف وتنتهي الحلقة البرمجية. وستلاحظ كذلك أن حالة تحميل الملف الظاهرة على الشاشة لن تتحدث وستكون صفر عند البداية وستبقى كذلك إلى أن يكتم التحميل وستقفز فجأة إلى 100% والسبب أن العملية الأساسية كما ذكرنا مشغولة بعملية التحميل ولا تستطيع تحديث شاشة التطبيق ليرى المستخدم نسبة تحميل الملف. نفس المشكلة لو كان البرنامج عبارة عن ساعة زمنية أو يقوم بتحريك رسومات أو لعبة.

الحل سهل، وهو بإنشاء عملية أخرى تعمل في الخلفية تقوم هي بمتابعة عملية تحميل الملف وترسل تحديثات عن حالة التحميل إلى العملية الأساسية وهذه العملية تسمى AsyncTask وتعني العملية غير المتزامنة لأنها تعمل بشكل مستقل عن العملية الأساسية. Continue reading “[برمجة اندرويد] تنفيذ العمليات في الخلفية”

كيف تتعامل مع برنامج ادارة الاصدارات git

في هذا الموضوع سأحاول أن اشرح برنامج git بشكل موجز، البرنامج ضخم وذو إمكانات كثيرة اجهل جلها لكن تعلمت بعض الأساسيات التي أود مشاركتكم بها. البرنامج كان فكرة وتطوير “لينوس تورفالدز” مخترع نواة اللينكس حيث كانت الأدوات البديلة المفتوحة  وقتها لا تفي بمتطلبات مشروع ضخم مثل نواة اللينكس وكانو يستخدمون تطبيق مغلق وغير مجاني.

في البداية أريد أن أوضح أن git ليس github و github عبارة عن تطبيق ويب يعتمد على git ويوفر مساحة تخزينية للمشاريع. وتستطيع عمل مشاريعك وادارتها على خادمك الخاص او خادم الشركة باستخدام git دون الحاجة لgithub.

توجد عدد من الواجهات الرسومية للتعامل مع git إما تطبيقات مستقلة أو مدمجة في تطبيقات البرمجة IDE لكن من تجربتي لا يوجد تطبيق رسومي شامل وتحتاج بين الفينة والأخري لاستخدام الأمر git من سطر الأوامر لتنفيذ مهام معينة.

Continue reading “كيف تتعامل مع برنامج ادارة الاصدارات git”

Telegram Ultra

** Due to the irresponsible behavior and awkward policy of Telegram company, and after they have taken my username @Fahad and given it to someone else without even asking me or notifying me I decided to delete my telegram account and stop the development of Telegram Ultra. And whoever was contacting me through that username should stop since it is not me anymore!

** بعد التصرف الغير منطقي و السياسة المتخلفة من شركة تيليقرام حيث قامو بسحب اسم المستخدم  @Fahad مني ومنحة لشخص اخر بدون حتى سؤالي او تنبيهي قررت حذف حساب التيليقرام وايقاف تطروير نسخة الترا. وعلى من كان يتواصل معي بالاسم ان يتوقف لانه ليس انا

التيليقرام عبارة عن برنامج للمحادثة يشابه برامج كثيرة مثل الواتساب ولاين ولكنه يتميز بكونه مفتوح المصدر فبإمكان أي مستخدم تعديل البرنامج حسب ما يناسبه.
لن أتحدث عن امن البرنامج ومقارنته بالبرامج الأخرى، ففي نظري جميع البرامج غير امنه وخصوصا انك لا تعرف ما يحدث فعليا في خوادم الشركات لذلك يجب استخدامها في المراسلات العادية والتي لا تخشى من تسربها أو اطلاع الغير عليها.
المهم، قمت بنسخ مصدر البرنامج من موقع Github واضفت له تعديلات وتطويرات ثم رفعت تلك التغيرات على حسابي في Github على الرابط التالي:

https://github.com/fduraibi/Telegram

بالامكان تحميل احدث اصدارة من متجر قووقل (قووقل بلاي)

Get it on Google Play

التغيرات التي قمت بها هي التالي مع تعديلات المطور: (ساقوم بتحديث هذه القائمة عند اصدار تحديثات جديدة تحت تاريخ التعديل)

Continue reading “Telegram Ultra”