حزمة المحرك الإصدارة 0.2

السلام عليكم

اسم الحزمة:
حزمة المحرك AAnimation package
(بضم الميم وكسر الراء ربما يوجد من لم يعرف قراءتها)

نبذة عن الحزمة:
الحزمة تمكنك من تحريك المكونات component
الخاصة بحزمةswing بدون أية تعقيدات
(بصراحة لم أجربها على awt لكن يفترض أن تعمل)

إصدارة الحزمة:
v0.2

قصة الحزمة:
بزغت فكرة هذه الحزمة من محاولاتي مساعدة م.ربيع أبو طير
(أخيراً وجدت فائدة للأخ ربيع :) )
كان يريد تحريك JButton على إطار JFrame
بالطبع هذا الكلام حصل في سنة رابعة جامعة على ما أذكر
وبقيت الفئة التي عملتها موجودة لدي حتى اليوم
وبينما أنا أراجع البرامج التي قمت بتصميمها إذ عثرت عليها بالصدفة
ومن هنا انبثقت لدي فكرة عمل حزمة لتحريك الأدوات

الفئات المستهدفة بالحزمة:
على الأغلب الحزمة ستكون مفيدة:
1- لمصممي الألعاب
(فعلياً بدأت الحزمة تصلح في هذا المجال وقد صممت عليها
لعبة بسيطة لازالت لا تصلح في الألعاب التفاعلية)
2- لمصممي الواجهات الاحترافية
3- لمصممي برامج المحاكاة

مميزات الحزمة:
1- تستطيع تحريك أي مكون component
على أي حاوية container
مع تحكم كامل بنوع الحركة أو اتجاهها أو سرعتها
2- هناك ثلاث أنواع من الحركات
أ- حركة أفقية
ب- حركة عمودية
ج- حركة قطرية
3- إمكانية التبديل بين الحركات بسهولة
4- إمكانية إجراء عدد من الحركات بشكل تتابعي
مثال حركة أفقية بمقدار 10 في 100 م.ث
ثم حركة عمودية بمقدار 50 في 200 م.ث
ثم حركة قطرية بمقدار 5 في 10 م.ث
5- مجموعة أحداث تساعدك على جعل الحزمة أكثر مرونة وتزيد من قدرتها على احتواء الأفكار

الإضافات على الحزمة
1- إضافة إمكانية تكرار قائمة الحركات
2- إضافة الأحداث events للحزمة وهي على النحو التالي
أ-عند تشغيل محرك الكائنات AnimationRunnable
ب- وعند إيقافه
ج- عند بداية تنفيذ قائمة الحركات AnimationList
د- وعند الإنتهاء من تنفيذها
ه- عند تنفيذ كل حركة Animation
و- وعند الإنتهاء من تنفيذها

كيف استخدم الحزمة؟؟
استخدام الحزمة يعتمد على إنشاء كائن من الفئة AnimationRunnable
ثم تمريره كمدخل للفئة Thread واستدعاء الدالة start
لكي تستطيع إنشاء كائن من الفئة AnimationRunnable
لديك عدة طرق
أ- أن تمرر لصانع كائناتها
1- كائن من الفئة Container أو إحدى أبنائها
2- كائن من الفئة Component أو إحدى أبنائها
لا يشترط أن يكون الكائن من الفئة Component أو إحدى أبنائها
مضافاً إلى الكائن من الفئة Container أو إحدى أبنائها
إن لم يكن مضافاً ستقوم الحزمة بإضافته بنفسها
هناك مدخلات اختيارية ممكن أن تمررها أو أن تتجاهلها
ب- أن تمرر لصانع كائنتها
كائن من النوع AnimationObject
وهذا الكائن يتم إنشاؤه عن طريق صانع كائنات وحيد ومدخلاته على النحو التالي

1- كائن من الفئة Container أو إحدى أبنائها
2- كائن من الفئة Component أو إحدى أبنائها
لا يشترط أن يكون الكائن من الفئة Component أو إحدى أبنائها
مضافاً إلى الكائن من الفئة Container أو إحدى أبنائها
إن لم يكن مضافاً ستقوم الحزمة بإضافته بنفسها

3-كائن من الفئة AnimationList وهذا الكائن يحتوي على الحركات التي سيتحركها
المكون Component بالترتيب على حسب إضافتها إليه
ولإضافة بعض الحركات إلى الليستة
يتم هذا من خلال الدوال
أ- أضف حركة إلى بداية الليستة insertAnimationFirst
ب- أضف حركة إلى نهاية الليستة insertAnimationLast
ولحذف بعض الحركات يمكنك ذلك من خلال الدوال التالية
أ- احذف حركة من بداية الليستة deletFirstAnimation
ب- احذف حركة من نهاية الليستة deletLastAnimation

4- متغير من النوع منطقي boolean يعبر عن إعادة الحركة بشكل متكرر

بعد أن أنشأنا الكائن AnimationRunnable بإحدى الطريقتين السابقتين
إلى حد الآن يمكن أن نتوقف إذا كنا لسنا بحاجة إلى إضافة مؤثرات
لإضافة المؤثرات على المكونات components المتحركة
يتم ذلك عن طريق الأحداث Events
هناك بضع خطوات يجب القيام بها
1- نقوم ببناء implement الواجهة interface المسماة AnimationListner
هذه الواجهة تحتوي على الدوال التالية
1- beforeAnimation
2- afterAnimation
3- beforeAnimationList
4- afterAnimationList
5- startAnimation
6- stopAnimation
كل دالة من هذه الدوال تنفذ عند وقت معين في تشغيل الحزمة
وقد سردتها من الأصغر إلى الأكبر
الدالتين 1,2 تنفذان بعد وقبل كل حركة
الدالتين 3,4 تنفذان بعد وقبل حصول كل الحركات مرة واحدة
الدالتين 5،6 تنفذان بعد وقبل تحريك المكون
بعد أن نقوم ببناء هاته الدوال في فئة ما ولتكن X
نقوم ببناء كائن من هذه الفئة وليكن xObject
نستخدم الدالة addAnimationListner في الكائن من الفئة AnimationRunnable
لإضافة الكائن xObject
نستطيع إضافة مجموعة من الفئة AnimationListner إلى الكائن AnimationRunnable
كما نستطيع حذفها هذه الكائنات باستخدام الدالة removeAnimationListner
يمكن مراجعة المثال test1 في الحزمة كمثال على ذلك

ملاحظة مهمة:
لكي تعمل الحزمة جيداً
يشترط أن يكون مدير المكونات Layout Manager
من النوع nullLayout
(بمعنى أن نمرر للدالة setLayout مدخل null)

اقتراحات للتطوير
1- موضوع AnimationGroup وهي عبارة عن فئة تقوم بالربط بين الكائنات المتحركة
بحيث تولد أحداث عند التصادم بين الكائنات AnimationObject المنضمة للمجموعة
الفكرة تكمن في استخدام نمط المراقب observer بمعنى أن الكائن المتحرك سيعطي إشارة لمجموعة الكائنات المتحركة
بتغير مكانها وهذا يمكن المجموعة من التأكد من حال الكائن و هل اصطدم بكائن آخر
هذه هي الفكرة الرئيسية
2- حركات جديدة كدوران المكون حول نفسه أو دورانه حول نقطة ما

التوثيق الخاص بالحزمة:
سأكتفي مؤقتاً بالشرح الموجود هنا
مع الفئتين Test1,Test2
بصراحة لا أخفيكم أني لست رائق البال
لكي أكتب التوثيق بالإنجليزية
فلو تطوع أحد الأخوة وساعدني في ذلك
(وهذا ما لن يحصل على الأغلب :) )
سأكون له شاكر

التصميم للإصدارة:
هذه الصورة تمثل التصميم للإصدارة
أي اقتراحات للتطوير سآخذها بعين الاعتبار بإذن الله

تصميم الحزمة

تصميم الحزمة

تنزيل الحزمة:
AAnimation source code (55)
AAnimation jar file (58)

معلومات عن المبرمج:
م.علاء محمد خليل الصالحي
خريج هندسة حاسوب
الجامعة الإسلامية بغزة

تحياتي

Tags: , , , , , , , , ,

6 Responses to “حزمة المحرك الإصدارة 0.2”

  1. abuoof قال:

    مبروك إضافة الحركة القطرية جزاك الله كل خير
    أأمل أن استخدمها يوماً ما
    للأسف بدأت في السي/سي++ بالإضافة للماتلاب الآن ونسيت الجافا دعواتك

  2. admin قال:

    الله يبارك فيك عبد الله
    كل اللغات خير وبركة
    لكن لا تنسى الجافا
    فهي في رأيي درة اللغات

    تحياتي

  3. عائد قال:

    السلام عليكم
    جزاك الله خيرا ورفع الله قردك بهذه الافادات

  4. admin قال:

    وقدرك أخ عائد

    تحياتي

  5. MkSoft قال:

    يعني يا علاء بصراحة تبهرنا بإبداعاتك ,,,
    فعلا مجهود تحسد عليه ,,
    جعل الله أعمالك خيرا للإسلام و المسلمين وقدرا في ميزان حسناتك ..
    بارك الله فيك.

  6. admin قال:

    لا إبداعات ولا شيء أخ محمد
    كل ما هناك أني أحاول أن أتعلم أشياء جديدة
    وأنتم حقل التجارب الخاص بي :)

    اللهم آمين يا رب

    تحياتي

Leave a Reply