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

ورش عمل..خاصة بالمشاركين في المسابقة

مغلقرائج
بدأه Abdullah.Alshammeri في 27 يوليو 2005 · 142 رد · 10,889 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#51

الشمري :

خلي مسار الشخصية كـــكقطع مكافىء parabola او اجعله كمقذوفه Projectile لها مركبتين في السيني و الصادي بجتا الزاوية مضروباً في السرعة الافقية و الرأسية بجا الزاوية مضروباً في السرعة الرأسية .... هناك قوانين للمقذوفات ... http://www.gamedev.net/reference/articles/article1596.asp

طريقة اخري كما ذكرها الاخوة : تستطيع ان تقوم بالانقاص من عجلة الجاذبية 9.8 متر / ث تربيع مع بعض ال Tweaks علي الاحداثيات تستطيع محاكاة ذلك .

جاري رؤية عمل الشمري

الاعمال المستلمة : Sayedf - الشمري

ننتظر المزيد .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#52

مشكور احمد ... الحين اشيك على الوصلة .

==

****جاري رؤية عمل الشمري ********

انا ما انتهيت الى الان ... لاتقيموني :) ... كود اللعبة مفصول عن المحرك .. يعني المحرك وضعته بس كذا ... اصبروا علي :)

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#53

بالنسبة لـ

اقتباس
خلي مسار الشخصية كـــكقطع مكافىء parabola او اجعله كمقذوفه Projectile لها مركبتين في السيني و الصادي

لم ادرس القطع المكافئ ... يعني ما فيه امل اعرف ...

اما المقذوفات ,,,, الرأسية ,,, سأحاول بها ... مع اني حاولت :)..

لكن شوفوا الملف المرفق ... وهو احد دروس يزيد الدليقان ...لقيته وسط زحمة الملفات ... احاول تطبيق الدرس . على الاقل لانه واضح واكثر سهولة :) ..... على الاقل شيء درسته ... :)

yzeed.zip

تم تعديل هذه المشاركة بواسطة الشـمري في 5 أغسطس 2005 في 05:55

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#54

عيني الشمري, الطريقة هي نفسها اللتي ذكرتها لك في الموضوع السابق,

/index.ph...ic=66181&st=45#

اول شي, نحتاج نعرف فرق الوقت بين هذا الفريم و الفريم السابق, كيف؟ نقوم بتسجيل الوقت في كل فريم, و نقوم ايضا بعمل متغير لوقت الفريم السابق, و حتى تشوف مثال حي, هذا هو كود الـ game loop من مشروعي:

في Game.java

    /**
         runs the game loop
     */
    public void run()
    {
        while(state.stillRunning())
        {
            internalUpdateFrameTime();            
            runFrame();
        }
    }

في الـ internalUpdateFrameTime اقوم بتغيير المتغيرات المتعلقة بالزمن, هكذا:

    private void internalUpdateFrameTime()
    {
        lastFrameTime = currentTime;
        currentTime = System.currentTimeMillis();
    }

الـ currentTime هو متغير لتخزين وقت الفريم الحالي .. مثلا الان بدأ فريم جديد, و الوقت هو 123, نسجله في currentTime, بعدين في الفريم القادم, اصبح الوقت هو 145, عندها سنغير currentTime ليصبح 145 .. الخ.

اما الـ lastFrameTime فنستخدمه لتذكر ما كان الوقت عليه في الفريم السابق, و طبعا عندما يأتي فريم جديد, فإن الـ currentTime ستكون محتوية على وقت الفريم السابق, لنذلك نقوم اولا بنسخها الى lastFrameTime ثم نقوم بتحديثها لتصيح وقت الفريم الحالي.

و علشان اعرف الفرق بين مدة هذا الفريم و الفريم السابق, اقوم بالطرح ..

طبعا في حالتي, انا استخدم الجافا, و الفنكشن اللي يعطيك الوقت هو System.currentTimeMillis, و هو يعطيك الوقت بالمللي ثانية, و لو طرحت الوقت الحالي من الوقت السابق و كان مثلا الفرق هو 120, فهذا يعني ان الفرق هو 120 مللي ثانية, و لكن انا لاسباب شخصية اريد ان يكون الفرق بالثانية, يعني المللي ثانية اريدها تكون 0.001 و ليس 1, و الـ 120 مللي ثانية ستكون 0.120

لذلك قمت بتقسيم الفارق على 1000:

    /**
         returns the timedelta between this frame and the last frame in seconds.
         milliseconds are represented as 0.001 (1 milli)
     */
    public double getFrameTimeDelta()
    {
        return ((currentTime - lastFrameTime) / 1000.0);
    }

زين, الجزء الاخر من الـ game loop هو runFrame, و هذا هو كود الفنكشن:

    public void runFrame()
    {
        entityManager.updateEntities();
        camera.update();
        renderer.renderFrame( camera );
    }

الـ updateEntities يقوم بالمرور على جميع الكائنات في اللعبة و يحدثها ..

اما الـ renderFrame يقوم برسم الصورة على الشاشة, و اثناء العملية ياخذ موقع كل كائن و يرسمه على الشاشة بالشكل المناسب, يعني علشان نحرك اي كائن, ما علينا سوى تغيير موقعه عند تحديثه, و عندها سيقوم محرك الرسم برسمه في الموقع الجديد

اما الكامرة فهذي كلاوات, معليك بيها :lol:

في MovingEntity.java, عملنا كلاس لكائن في اللعبة عنده سرعة و تسارع .., اول شي نعلن عن متغيرات السرعة و التسارع:

public abstract class MovingEntity extends Entity
{
    private Vector velocity = new Vector();
    private Vector acceleration = null;

    ..........
    ..........
}

طبعا في الجافا, التعامل مع الكائنات دائما مع الـ reference و هي مثل المؤشرات في السي بلص بلص, مع فارق بسيط و هو انك لا تستطيع القيام بعمليات رياضية على عناوين الذاكرة, و لا تستطيع استخراج عنوان الذاكرة اصلا.

المهم, السرعة نعمللها initalization, بينما التسارع نخليه null (يعني نعتبر انه لا يوجد تسارع)

لاحظ ان الـ MovingEntity يرث من Entity, و الـ Entity تحتوي على موقع او position, يعني الـ MovingEntity يرث الموقع من الـ Entity ..

بعدين, في الفنكشن اللذي يتم استدعائه في كل فريم (تحديث معلومات الكائن) نقوم بالتلاعب بالسرعة و التسارع كما شرحت في الموضوع السابق:

    public void update()
    {
        double timeDelta = Game.getTheGame().getFrameTimeDelta();
        
        if( acceleration != null )
        {
            velocity = Vector.addition( velocity, Vector.multiplication( acceleration, timeDelta ) ); //velocity = velocity + acceleration * timeDelta;
        }
        
        setAbsPosition( Vector.addition( getAbsPosition(), Vector.multiplication( velocity, timeDelta ) ) ); //position = position + velocity * timeDelta;

     .......
     .......
      //بقية الكود هي امور مالها علاقة بالسرعة و التسارع, اضفتها انا لاسبابي الخاصة :P

طبعا الجافا لا تسمح لك بعمل operator overloading, لذلك لا استطيع كتابة velocity += acceleration * timeDelta

لذلك استخدمت مجموعة من الـ functions للتعويض عنها.

اقلك, انا حاسس انه في شغلة انت مش فاهمهة في الموضوع .. ايش هي؟

لتكون بخصوص فرق الوقت بين الفريمات؟ او فائدتها في العملية؟

#56

السلام عليكم

انا بصراحه اريد ان احيكم فقط لأبداعاتكم ويوم شفتها فرحة اننا العرب إن شاء الله في الأمام دائماً

واحيكم مره اخرى يا اخواني

#57
MoaM كتب:
هذه هي لعبتي المتواضعة , أريد أن أشترك بها في المسابقة

أتمنى أن تحرز مركز متقدم  :lol:

نزلت اللعبه ولم تعمل عندى اعطتنى هذه الرساله فى المرفقات

والبورجكت مضغوت بكلمه سر ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

اذا لماذا وضعته

ولماذا كلمة سر B)

post-45582-1123241305_thumb.jpg

163374357.gif

#58

خطأ عجيب!

05_08_05_05_34_03_1123245243ErrorGame.JPG

#59

بالنسبة لمسألة الصوت الافضل استعمال دوال WIN API لانها توفي بالغرض واسهل من المكتبات المتخصصة .

المتطلبات :

يجب ان يكون عندك ملفات الهيدر والمكتبات الخاصة بتطبقات الويندوز ... وهي تأتي تلقائيا مع العديد من المترجمات مثل الفيجوال سي ..

اولات اربط هذه المكتبة في برنامجك ..

winmm.lib

ثم استدعي هذا الملف .

#include <windows.h>

انت الان جاهز للعمل ..

اذا اردت تشغيل صوت ما ويكون صيغة الصوت wav .. :

 	 PlaySound (TEXT ("20.wav"), NULL, SND_FILENAME |SND_ASYNC);

البارمتر الاول الصوت

الثاني اعدادات ..

لو اردت الصوت يتكرر

 	 PlaySound (TEXT ("20.wav"), NULL, SND_FILENAME |SND_LOOP|SND_ASYNC); //);

لو اردت ايقاف الصوت

 	 PlaySound (0, NULL, 0);

يوجد مثال تطبيقي باستخدام

GLUT

اذا نقرت بالزر الايمن يشتغل الصوت

الايسر يوقف الصوت

اذا لم توجد عند المكتبة

winmm.lib

لاي سبب ...

نرفعها هنا .

لكن جرب البرنامج اولا لتتأكد

====

MoaM

انا ايضا لم تشتغل عندي ... ننتظرك ,,

snd.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#61

أعتقد أن ذلك الخطأ بسبب ملف الـ Winmm.dll :angry:

على العموم , هذا الملف الجديد بعد إزالة كلمة السر و محاولة لحل الخطأ :lol:

أرجو إخباري بالنتيجة , هل عملت اللعبة بشكل جيد :lol: أم لا :(

SHOT IT .zip

تم تعديل هذه المشاركة بواسطة MoaM في 5 أغسطس 2005 في 21:36

#62

ارجو من كل من يضع لعبه او مثال يراعى تعدد لغات البرمجه ويضع نسخه تنفيزيه (exe)

وشكرا للجميع :D

163374357.gif

#63
اقتباس
عيني الشمري, الطريقة هي نفسها اللتي ذكرتها لك في الموضوع السابق,

28d31cc269.gif

اعرف ان بعض الاسئلة غبية ... لكن لازم تتحملونا .,,,,,

اقتباس
اقلك, انا حاسس انه في شغلة انت مش فاهمهة في الموضوع .. ايش هي؟

لتكون بخصوص فرق الوقت بين الفريمات؟ او فائدتها في العملية؟

والله فيه شغلات كثيرة ,,, واعتقد السبب يعود الى الضغط الكبير ,,,, >>>يتفلسف .

لكن سأحاول ان ارتب الوضع .. مع كم حبة بنادول .. يتحسن الوضع , ان شاء الله .

المهم ...

سويت طريقة مشابهة للي قلته انت ,,, وان شاء الله ,, ان الامور بدأت توضح .,, لكن انا قررت اني اطلع قانون قفز جديد 7fced554bc.gif

هذا اسهل حل .,,,,,

وسويت شوية حركات .,,, + 8 جمل شرطية ,,, + عشرات المتغيرات مابين ستاتيكية وعادية .. واخيرا .. ماريو .,, يقفز .,,, B)

يعني هالمشكلة تعديناه بتصرف ...

شوف التطبيق ان شاء الله ييشتغل ,,

عشان تقفز اضغط زر المسافة ,,

والله ما عندي الا هالحل .. بشكل مؤقت .,, وان شاء الله .. لازم نتعلم برمجة الالعاب على اصولها :) ,,, لكن خلنا نخلص من هالمسابقة .

لكن على فكرة .... يعني ماريو لازم يقفز ... ماينفع سلالم .... :) ,,, ساضع سلم .. وارتاح ...

==========

اخي /: MoaM

يا ليت تضع الملف التطبيقي .. على طول .. معه الصور والاصوات ... لان الدوت نت مش عندي... عشان اترجم الملفات ,,,

my game.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#64

قفزه ميه ميه

والله من غير مجامله تخطيت مشكلة القفزه كمل نتظر لعبتك

الله يوفقك وإن شاء الله نتعلم منك

#65

مرحباً :lol:

ما لأخبار مشاريعكم :D

=============

بالنسبة للمثال الذي وضعته يا شمري فهي لم تعمل جيداً

يظهر مستطيل أبيض و عند الضغط على زر تظهر رسالة خطأ

اقتباس
Error, Failed to open DIB file right.bmp.
اقتباس
Error, Failed to open DIB file left.bmp.

إنظر الصورة المرفقة

و المستطيل يقفز كل مرة بقوة \ سرعة مختلفة , لا أعلم لماذا :P

=============

و هذه هي لعبتي طبعاً لن تعمل ما لم يكن الـ .NET FW موجود على جهازك

post-48648-1123306264_thumb.jpg

Exe.zip

#66
اقتباس
و المستطيل يقفز كل مرة بقوة \ سرعة مختلفة , لا أعلم لماذا

ذا طول الله عمرك نتيجة قانوني الجديد :lol:

اذا عندك طريقة احسن ,, قلنا ,,, بس لايكون فيها تسارع :lol:

بالنسبة للخطأ .. اعرف ذلك .. لان صورة الشخصية غير مرفقة .. ما ارفقتها .. حتى اطبق ما يسمى بالتكتم الاعلامي <_<

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#67
الشـمري كتب:
ذا طول الله عمرك نتيجة قانوني الجديد  :lol:

اذا عندك طريقة احسن ,, قلنا ,,, بس لايكون فيها تسارع  :lol:

بالنسبة للخطأ .. اعرف ذلك .. لان صورة الشخصية غير مرفقة ..  ما ارفقتها .. حتى اطبق ما يسمى بالتكتم الاعلامي  <_<

ليس عندي (للأسف) قانون للقفز <_<

و كان بإمكانك إزالة الكود الذي يؤدي إلى حصول الخطأ نتيجة عدم وجود الصورة :P

هل عملت لعبتي عندك ؟؟

#68

اللعبة ما اشتغلت .:(

تطلع رسالتين ويغلق

جربت نقل التطبيق الى المجلد السابق اللي فيه الصور والاصوات وايضا ما تشتغل ..

انتظر البقية ممكن يكون الخطأ من عندي

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#69

اللعبة ما اشتغلت .:(

تطلع رسالتين ويغلق

جربت نقل التطبيق الى المجلد السابق اللي فيه الصور والاصوات وايضا ما تشتغل ..

انتظر البقية ممكن يكون الخطأ من عندي

=======

اتمنى من المشرف حذ ف الردود المتكررة .. اسف .

post-42837-1123310673_thumb.gif

post-42837-1123310692_thumb.gif

تم تعديل هذه المشاركة بواسطة الشـمري في 6 أغسطس 2005 في 09:49

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#70

مثال الشمري جيد ولقد عمل ... ولتنفيذ القفز في المثال يجب الضغط على " فراغ"

وشكرا

موقعي :- www.gamesdevteam.com

#71

اخي الشمري لو تقوم بوضع الطريقه التي بواسطتها جعلت امكانية القفز .... اكون شاكر لك

موقعي :- www.gamesdevteam.com

#72
TeamGameProg كتب:
اخي الشمري لو تقوم بوضع الطريقه التي بواسطتها جعلت امكانية القفز .... اكون شاكر لك

لا لا ..

الطريقة سيئة وغير عملية اطلاقا .... يكفيك انها كلها جمل افية :lol:

سأحاول تطبيق كلام حسن اللي فوق .... وان شاء الله انجح ....

على العموم الكود بالطريق ان شاء ربي ...

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#73

قمت بتحويل ملفات الجافا الى exe (عن طريق برنامج اسمه JET)

مرفق تجربة للمحرك (مع القفز)

و تستطيع تحريك الصورة الفوقانية عن طريق WASD

لا ادري اذا كان سيعمل ام لا ..

هذه مجرد تجربة و ليست النتيجة النهائية للمسابقة

game-contest.rar

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 6 أغسطس 2005 في 10:56

#74

لم يعمل،، تخرج رسالة سريعة في واجهة سطر الأوامر!! لا أستطيع اللحاق بها!!

#75

هذا مثال للقفز ارجو ان يكون هو المطلوب

my test.rar

163374357.gif

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…