الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحريك

بدأه مهدي حجازي في 31 يوليو 2010 · 28 رد · 3,640 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#26
علاء الصالحي كتب:

أخ مهدي حجازي

دعني أخبرك بالطريقة التي تعمل بها حزمة المحرك حتى تتضح الصورة أكثر

الحزمة تقوم بشكل أساسي على خيط وحيد

إذا أردت أن تحرك كائن واحد تقوم بإضافته إلى الحزمة

فيقوم المجدول بجدولته في قائمة الكائنات المتحركة (علماً بأن الحزمة تعتمد على مجدول واحد للجميع)

كل كائن له مجموعة الحركات التي سيتحركتها محددة بالوقت الذي سيتم أداء الحركة فيها

المحرك يقضي الفترات التي لا يوجد فيها حركات للكائنات المتحركة في سبات

ويضبط وقت الصحيان من السبات على الوقت الذي سيتحرك فيه أول كائن متحرك

في حال كون الكائنات المتحركة ليس لديها حركات فيبقى المحرك في حالة سبات حتى الوقت الذي تضاف فيه حركات جديدة

فيقوم بجدولتها وتنبيه المحرك للعمل

لاحظ أن المحرك يعرف فعلياً متى عليه تنفيذ الحركة

بدون أن يمر على كل كائن ويسأله متى ستتحرك يا أستاذ

فهناك مدير يعرف بالضبط من سيتحرك ومتى سيتحرك وإلى أين ستحرك بدون أي تخاطب مع المطور (أقصد عملية الرسم paint)

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

بالنسبة للنظام الموجود في الحزمة LWUIT

فهو لا يعرف وإنما يظل يسأل هل ستتحرك يا أستاذ هل ستتحرك يا أستاذ بالطبع لو كان عدد الأساتذة كثر والقرار الذي يأخذه كل أستاذ ليقول لك سأتحرك أو لا يأخذ وقتاً جيداً

ستجد أن هناك إجمالي وقت مهدر بدون فائدة فعلية

على كل أنا اعتمدت على هيكلية إرسال التحديثات من قبل العملاء (لو هناك كائن متحرك يريد أن يتحرك بعد 100 ثانية سيرسل لي يقول أريد أن أتحرك)

بينما الحزمة اعتمدت على هيكلية اطلب التحديثات من العملاء (لو هناك كائن متحرك يريد أن يتحرك بعد 100 ثانية سينتظر حتى تمر المئة ثانية ثم يجيب علي عندما أسأله إن كان يريد أن يتحرك بالإيجاب)

والأخيرة مشهورة بأنها تضيع الوقت في طلب

هنا تكمن النقطة أريد أن أفهم لماذا استخدم هذه الهيكلية ولم يستخدم الأولى

هل اتخذ قراره بناءاً على بعض المعوقات في بيئة المحمول؟ (إنسان انلدع من المعوقات في بيئة المحمول laugh.gif )

أم أن قراره بني على السهولة؟ بمعنى أنه وجد أن هذه الآلية تسهل عليه بناء الحزمة فاستخدمها وأراح نفسه

الرد طول وخايف يضيع

لذا أرسله وسأكمل في رد آخر بالنسبة للسؤال الآخر

تحياتي

حسنا يبدو أن الأمر غير واضح لك بالنسبه ل LWUIT. LWUIT لا تقوم بسؤال كل المكونات بل فقط المكونات التي تريد التحرك وأنت تسجل المكون الذي تريد تحريكه عن طريق registerAnimated وبعدها سيقوم المحرك بسؤاله عن هل يريد التحرك أم لا؟ الان بالنسبه لمتى يتحرك الكائن فهذه غالبا لا نحتاجها, في غالب الاحيان الكائن الذي يريد الحركه سيتحرك مباشره أو سينتظر فتره بسيطه ثم يبدأ الحركه فالاهدار ليس كبير ثم لا زلت أنت تستخدم خيطان وهو خيط واحد..طبعا لن أخبرك عن مدى سوء ال Scheduling بين ال Threads في JME ثم هنالك مشكله أعم وأكثر ظهورا عندي في المحمول وهي أنني أريد القيام بحركات متقطعه أي أريد أن أحرك المكون لثانيتان ثم أقف لثانيتان ثم أعيد الكره وهكذا..هذه الحاله تتكرر كثيرا معي وباستخدام LWUIT الموضوع ممتاز حيث لا حاجه لي لاعده جدوله الكائن كل ما علي ان أخبر المحرك أنني الان اريد التحرك أو التوقف وعندما انتهي أخبره بازالته من قائمه الكائنات المتحركه..هل لك أن تطلعني على كيفيه معالجه هذه الحاله عندك.

#27
علاء الصالحي كتب:

هذه الخصائص أو الفئات التي استخدمها وأخشى أنها غير موجودة في JavaMe

1- استخدم enum

2-استخدم Generics

3- الفئات Comparable و Iterable من الحزمة java.lang

4- استخدم reflection

5- استخدم collection

بالأخص الفئات التالية

ArrayList

List

Iterator

PriorityQueue

Collections

6- استخدم foreach

تحياتي

لا شيء مما ذكر :) بس انت سيد العارفين انو معظم المكتوب يمكن الاستغناء عنه او كتابته بايدك واذا احتجت بعض الاشياء اطلبها أول بجوز اتكون عندي جاهزه ,واحنا ما منقصر ان شاء الله

#28

أعرف أنه يسأل الكائنات المسجلة

وهذا ما يتم عندي أيضاً أنا أتعامل مع من يسجل نفسه ككائن متحرك

لكن مع وجود عدد كبير من الكائنات المتحركة يظهر الفرق

اقتباس

ثم لا زلت أنت تستخدم خيطان وهو خيط واحد..طبعا لن أخبرك عن مدى سوء ال Scheduling بين ال Threads في JME

هذه نقطة تحسب له

بأمانة أول مرة أعرف بهذا المعوق ويبدو لي منطقياً

لكن هل الأمر بهذا السوء لدرجة أن خيطان سيكون هناك مشكلة في جدولتهم؟

أعالجها ببساطة لأن الحركة في AAnimation تعتمد على ثلاثة متغيرات

الوقت الذي سيقضيه الكائن في الحركة

مقدار الحركة على محور x

مقدار الحركة على محور y

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

بل وأنا قادر في أي وقت أن أغير رأيي وأحذف الحركة أو أضيف حركة أخرى أو أؤخرها بدون أن أكتب سطر شيفرة واحد

بالنسبة للمكونات

شكلها زهزهت معي على الآخر وشكلي هعيد ثلاثة أرباع الحزمة لو حبيت أشغلها على JavaMe

(بشكل أساسي عملية Scheduling مبنية على وجود Priority Querue فلا وجود للحزمة أصلاً)

ماذا عن Android؟ هل الوضع يختلف؟

تحياتي

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

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#29

شكرا لكم

مواضيع مشابهة