أكثر ما دوخني في الكود هو مسألة الEvents، خصوصا طريقة النداء على الدوال الخاصة بها. فمثلا داخل الدالة doEvent تستعمل Method.invoke؟؟ :wacko: والله دخت.
ما أصعب قراءة وفهم كود كتبه شخص آخر :blush:
أكثر ما دوخني في الكود هو مسألة الEvents، خصوصا طريقة النداء على الدوال الخاصة بها. فمثلا داخل الدالة doEvent تستعمل Method.invoke؟؟ :wacko: والله دخت.
ما أصعب قراءة وفهم كود كتبه شخص آخر :blush:
مجهود رائع اخي علاء... و اعذرني لعدم اختباري للحزمة ولكنني فعلا فقدت الاهتمام تجاه جافا لسطح المكتب منذ سنين عدة...
اتمنى ان تتابع على هذا المنوال ولا باس بان تطرح الحزمة باللغة الانكليزية ايضا ولكن يجب ان يعرفو ان مصدر الحزمة عربي
بالتوفيق
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why
لك علي أن أشرح الطريقة يا عصام
لكن أعطني صورة السيارة لكي أعمل مثال بسيط لك
شكراً يا رامي على الدعم المعنوي
وسأحاول أن أطرح مجموعة من الأمثلة على الحزمة
ربما يعنيك الموضوع لو تعلق الأمر بـ JApplet :lol:
تحياتي
لماذا لا تاخذ صورة السيارة من الصورة التي وضعها؟؟
باسوئ الاحوال اعمل برنت سكرين يا اخي!
تقدر تعملها اي امتداد تريده اعملها png واشتغل
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why
ياه يا رامي حرام عليك
أنا أصلاً مكسل أعمل المثال
وبقول يا رب ما يجيب الصورة عصام
يا رب ما يجيب الصورة عصام :lol:
ايش أعمل فيك أنا
يلا بما أنك فقستني مضطرين نعمله للمثال :(
تحياتي
أنا ما جبت الصورة حتى ما تعمل المثال :wink: لأن هدفي كان فهم الكود وليس استعماله
السلام عليكم .
في موضوع ما :) ، اثار الاخ علاء هذه النقطة :
اقتباسالمشكلة أن الحزمة لدي تعتمد فكرة أنه هناك حاوية Container ومكون Componentوهذا المكون يتم تحريكه على الحاوية
يمكنني التفكير في طريقة للتغليف تشبه تماماً الطريقة المستخدمة في java2d
لكي يكون في وسعي الاستفادة من AAnimation في العمل هنا
لك المشكلة أنه وكما فهمت من شرحك فإن OpenGL يقوم بالرسم داخل تكرار
وهذا شيء سيء جداً
لأنه يستهلك المعالج استهلاكاً كبيراً
لاحظ في java2D عملية إعادة الرسم تعتمد على طلب نظام التشغيل وهذا هو النظام المتبع في غالب لغات البرمجة
هل فهمي صحيح في هذه النقطة؟؟ أم أن هناك حلول أخرى تحسن من هذا الأداء؟
أم أن برمجة الألعاب لديها طريقة أخرى في الفهم
فرد عليه الاخ الكون قائلاً :
الكون كتب:السلام عليكــم ورحمـة الله وبركاتــه ،،كل محركات الرسوميات تستخدم نفس المبدأ اذا الهدف هو برمجة لعبة لانه يتم مسح كامل المشهد و اعادة رسمه خلال الثانية الواحده عده مرات
طبعا ليس شرطا الرسم داخل تكرار ففي حالات مثل تصميم برنامج رسام كل ما نحتاجه هو اضافة الرسم الجديد على القديم و بالتالي عدم مسح المشهد السابق و الدخول في تكرار رسم كافة الصور التي تم مسحها
تعليقي :
كما قال الاخ الكون ، في برمجة الالعاب في الغالب نستخدم Loop لتحديث الاجسام في كل لحظة ( تحديث المواقع - عمليات الذكاء - الفيزياء - الرسوميات .. الخ ) لانك في بيئة تفاعلية .
في برامج الرسم الاخرى .. نحدث الرسوم .. فقط اذا وقع الحدث paint ، أي عند اعادة رسم النافذة لأي سبب .
اترك مسألة التوافق بين توقيتك وتوقيت محرك ألعاب مثلاً .. لانها معقدة قليلا .. وتحتاج الى نقاش موسع .
النقطة التي يجب أن تتغير في الحزمة هي اعتمادك على Component في المحرك وهي حالة خاصة من حالات أعم .
يجب أن تحرك شكل عادي ، يمكنك أن تستقبل كائن من نوع Point له احداثيات x و y .
وبالتالي يمكن استخدام الحزمة في أي مكان .. اعزلها عن GUI الخاص بالجافا .
ثم لامانع أن تدعم Component ولكن كحالة خاصة في المحرك للتسهيل فقط على المستخدم النهائي .
هذا رأيي في الموضوع .
لي عودة ان شاء الله .
تم تعديل هذه المشاركة بواسطة الشمري في 27 سبتمبر 2009 في 19:46
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
هذا الكلام سيئ جداً يا عبد الله
أحتاج إلى شيء يحتوي أكثر من شيء
بمعنى أحتاج إلى شيء يجمع مجموعة الأشياء
لو لم أقم باستخدام Component ففعلياً سأتشجم إنشاء واحدة خاصة بي
لهذا لم أقم بذلك هنا في java2D
يفترض أن تكون OpenGL تحتوي على شيء كهذا
سأعطيك مثال لعبة ماريو الشخصية المتحركة هي ماريو
هذه الشخصية تتحرك على عدة مستويات
فهي مثلاً تمشي أي الجسم كله يمشي
ستقول لي الشخصية عبارة عن صورة
هذا خطأ بالتأكيد الشخصية عبارة عن مجموعة من الصور تمثل الشخصية ككل
لماذا لا تكون صورة واحدة؟
لأن هناك بعض الأجزاء في الشخصية تتحرك بطريقة بشكل منفرد عن باقي الصورة
كالرجلين مثلاً
الرجلين تتحرك في إطار الجسم والجسم يتحرك في إطار الصورة الكلية
لهذا اقترحت أن يكون العمل على Container و Component هذا من شأنه أن يسهل على المبرمج
عدا عن ذلك فأنا كمستخدم للحزمة مضطر أن أحرك كل عنصر فيها على حدة
يجب أن نجد حلاً في OpenGL وليس أن أغير الحزمة
حتى لو اضطررنا أن نقوم بعمل شيء شبيه بالمكون Component هناك
ربما أكون مخطأً لذا رجاءاً قومني
أو وضح لي وجهة نظرك
تحياتي
أنا لم أتعمّق كثيراً في دراسة لماذا تستخدم Container .
لكن حسب ما فهمت ، أنك فقط تغيّر احداثياتتها ( تستخدم setLocation و setDimension وماشابههما ( لا اذكر اسماء الدوال بالظبط ) .
لذلك اذا كان هذا هو الواقع فأظن انه يمكنك أن تعمل التالي : ( كل ما أقوله مجرد رأي .. قد يحتمل الخطأ .. أحتاج الى مراجعة أكثر لقلب المحرك) :
1- تستبدل Container أو Component بكلاس بسيط اسمه مثلا Shape أو حتى Point
2- المحرك يقوم بتحريك هذه النقطة .. يقوم بتغيير احداثياتها .
3- انتهى دور المحرك ..
4- أقوم برسم النقطة بعد تحريكها .
5- نعود الى 2 .
نأتي لصورة سوبرماريو المتحركة .. هو يتحرك الى اليمين :
1- المحرك يقوم بتحريك نقطة Point .
2- انتهى دور المحرك .
3- تجعل احداثيات الصورة ( مركزها مثلا ) مساوي لاحداثيات النقطة Point .
4- ترسم الصورة ..
5- بعد مدة معينة تقوم بزيادة الفريم frame بمقدار واحد لرسم اطار الصورة التالي .
6- نعود الى 1 .
رسم Component عادي .
1- المحرك يحرك نقطة .
2- انتهى دور المحرك .
3- ترسم Component ويكون موقعها مساوي لموقع النقطة .
4- تعود الى 1 .
اذا .. انت تحرك نقطة .. وتستطيع أن تستفيد من هذه النقطة في كل شيء .
محركك يجب أن لايرسم .. هو خاص بالتحريك فقط .. اذا أردته أن يرسم .. فأنت تحصر عمله في Java2D
المشكلة الحقيقية هي بالتالي :
لو كنا نريد استخدامه مع OpenGL في محرك الاندلس ، فاننا سنقع بين مؤقتين مختلفين .. لذلك يجب أن يملك المحرك مرونة في هذا الجانب بحيث يمكن استخدامه للالعاب التي تعتمد على loop وليس مبدا اعادة الرسم .
أما Container لايمكن استخدامها داخل OpenGL بأي حال من الأحوال ..
عموماً .. مثل ماقلت .. أحتاج للاطلاع على محركك بشكل أكبر .. يبدو أن هناك شيء لم أفهمه بعد .
( بالمناسبة .. كنت أريد أن اضع مثال على كيفية استغلال المحرك في GUI الجافا .. اعتقد نقطة قوّته يجب أن تظهر في هذا :) ، أتمنى أن اترك الكسل فقط ، سأحاول أن أضع أمثلة حتى أستطيع أن أوصّل الفكرة .. )
تم تعديل هذه المشاركة بواسطة الشمري في 28 سبتمبر 2009 في 06:59
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
لماذا أستخدم Component و Container
لأن Container يساعدني على تجميع مجموعة الأشياء المتحركة في مكان واحد
وهذا يسمح لي بإنشاء التحريك على عدة مستويات
كما أعطيتك المثال في ماريو الجسم ككل يتحرك بما فيه القدمين والقدمين تتحرك بمعزل عن باقي الجسم
ولأن Component تمكنني من رسم مجموعة أشكال في مكان واحد وهذا بدوره يساعدني على تحريك هذه الأشكال مع بعض
محركي فعلياً لا يرسم أبداً وليس له علاقة بالرسم
بالنسبة لموضوع النقطة المتحركة لست أفهم المغزى بالضبط
لذا أخبرني إن كان التالي هو ما تقصد
تقصد أن نقطة بداية الرسم للشكل هي من يتغير وبالتالي يتغير موقع الشكل
ويصبح كأنه يتحرك
هذا فعلياً ما أقوم به هنا أنا أغير مكان Component
لكي أكون صريحاً معاك أظن أننا بحاجة إلى إنشاء Component ,Container في OpenGL
لكي نحصل على محرك ألعاب ممتاز
بالمناسبة هل لديك أمثلة على محركات تعمل على جافا مفتوحة المصادر
وتدعم OpenGL
ربما نستفيد من شيفرتها
تحياتي
اقتباستقصد أن نقطة بداية الرسم للشكل هي من يتغير وبالتالي يتغير موقع الشكل
أقصد أن صورة سوبر ماريو .. تحرك فقط نقطة واحدة فيها ( تحرك صورة عادية ) .. أي أنك تحرك مثلا نقطة المنتصف فيها .
ما علاقة أقدام الصورة .. هذا لم أفهمه .
هذه صورة سوبر ماريو :
عندما نحرك الصورة .. نحن نحرك موقع الصورة ( في الغالب النقطة اليسرى العلوية .. وستتحرك الصورة )
كلما تحركت الصورة .. مثلا بعد نصف ثانية من الحركة .. نقوم بالانتقال الى الصورة التالية لايهام المستخدم أنه يتحرك .
محركك فقط يحرك نقطة .. والمستخدم النهائي يحصل على احداثيات هذه النقطة ويسندها للصورة .
عموماً أخ علاء .. أحتاج لدراسة معمقة للمحرك وكيف يعمل .. واحاول اعمل عليه كم مثال .. حتى لا أشتتك .. قد أكون في وادي اخر وأنا لا أعلم :D .
هذا الاسبوع فترة تسجيل جداول .. وتعديلها .. لبداية الدراسة + مشروع المحرك يأخذ كل وقتي .
أتمنى أتفرغ يوم الجمعة أو الخميس لأعمل مثال وأدرس المحرك .
اقتباسبالمناسبة هل لديك أمثلة على محركات تعمل على جافا مفتوحة المصادر
شاهدت بعضها .. ولكن لايعلق بالذاكرة الكثير الان ..
لكن الى أن أعثر على محرك جيد .. شاهد هذا الموقع :
http://www.devmaster.net/engines/list.php?fid=6&sid=1
حيث مستودع المحركات .. تجدها هناك ;)
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
في برمجة الألعاب لا يقومون برسم صورة لكل حركة
لأن هذا يستنفذ الذاكرة
لذا وبما أن الرجل تتحرك لوحدها يتم فصلها عن باقي الجسد في صورة مختلفة
في انتظار أمثلتك
تحياتي
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…