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

أداة : صانع المسارات ....+ الكود

مغلق
بدأه Abdullah.Alshammeri في 21 يونيو 2006 · 19 رد · 2,979 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

اشتقنا للمنتدى :rolleyes:

بعد ان انشوينا ( بسبب الاختبارات ) ... وبعد ان جاءت العطلة الصيفية الله يطول بعمرها ,,,

تفجرت القريحة عندي وخطرت ببالي افكار ,,,,, بعضها رهيبة وبعضها مثل قلتها ,,,

هذه واحدة من الافكار ,,

الفكرة جاءت عندما كنت العب بميتل قير ,,, يوم كنت صغير طبعا :D

الجنود يتحركون ضمن مسارات محددة ,,,

مالسبب في ذلك ,,

لا اظن ان كل شيء هو ذكاء اصطناعي ... اكيد يوجد شيء اخر ..

فقلت ليش ما يكون كوجيما صلح مسار يمشي عليه الجندي ولا يحيد عنه قيد أنملة.!!!!

فجمعت "عفشي" وبدأت بعمل هذه الاداة ولله الحمد .

الاداة الى الان بدائية جدا .. ولكن فقط أريد أن أعرض عليكم الفكرة .

يوجد حقيقة أداتان :

الاولى :

تصنع المسار وسميتها path creator.

والثانية تقرأ المسار وسميتها path reader .

21_06_06_12_19_30_1150917570aaa.JPG

بالمرفقات الملف الاول يحوي التطبيقين ...

والملف الثاني السورس كود

لتكتب ملف فقط ارسم باستخدام زر الماوس الايسر .

ولتقرأ الملف ايضا انقر على زر الماوس الايسر ,

طبعا بعد ان تنتهي من اداة صنع المسار .. وتغلق البرنامج سيتم تلقائيا إنشاء الملف اللي من نوع AT2 .

بس انتبه ,, اذا أخطأت في وضع النقطة في المكان المناسب ما فيه أمل تتراجع ... :lol: >>> امحق برنامج ....

احب أنبه على شيء وهو ان الكود لم يكتمل بعد فيوجد في الاداة العديد من bugs

ننتظر الاراء والاقتراحات البناءة من حيث :

* رأيكم في الاداة هل هي مفيدة او لا .

* هل لديكم أفكار اخرى .

* هل بالفعل هذه الطريقة تستخدم في الالعاب ,

انا اعرف اني ما سويت شيء جديد .. لكن لاني متحمس بالحيل .... انتظر الدعم :rolleyes:

projects__EXE.zip

projects__CODE.zip

تم تعديل هذه المشاركة بواسطة الشمري في 21 يونيو 2006 في 23:36

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

السلام عليكم

أخي ومشرفي الشمري إشتقنالك وفجت علينا مواضيعك المميزة

موضوعك مميز بس الغريبة صار للموضوع أربعة أيام ولحد الحين مافي ولا رد

علعموم في الألعاب الإستراتيجية دائما ترى مثل هذه الأداة( بس مطورة أكثرلأنها لعبة شركة)

ولكن تجعل متاحة للاعب بإستخدامها في أثناء اللعب

وأرجوا أنك تستمر في أبداعاتك ولاتقف وأخبرنى بكل جديد

وشكرا

#3

السلام عليكم

طرأ علي نفس التساؤل وعلى نفس اللعبه. وهذا ما أتى معي, وأتوقع ان هذا يقوم يدور طريقة هيدو كوجيما :

الطريقه الأولى :

الطريقه قائمه على اساس تحرك المجسم من نقطع لأخرى , هذه النقاط لها خصائص سأذكرها مع خطوات شرح الطريقه .

- نفترض أي نقطتين, ولتكن أ و ب, ونفترض أن المجسم ج .

- حسنا, نضع قيما للنقطه أ : مدة الوقوف عليها, الأمر الذي سيتم ج بتنفيذه , نقطة الإنتقال التاليه ,سرعة الإنتقال إلى النقطه التاليه,,إلخ .

إلى هنا لا أظن ان هناك داع لمزيد من الشرح. ولكن هذه الطريقه غيرعمليه, فتخيل أنك سترسم المسار بين نقطتين , في ممر مقوس؟

أما الطريقه الثانيه :

فهي قائمه على إستخدام الجا والجتا + الطريقه الأولى.

أي انك ستستخدم طريقة النقاط كما في الطريقه الأولى و لكن بإضافة خاصيتي الجا والجتا .

- ديناميكية التنفيذ : سيسير ج من أ إلى ب, ولكنك ستضع قيما للجا و والجتا للسير في خط سير منحني , حيث أنك ستفرض ان الجا للمحور السيني والجتا للعمق .

الطريقه معقده وللأسف لم أطبقها فعلا, بل مجرد تخمين

وبالتأكيد أن هناك نقد على كلتا الطريقتين أنتظره من الأعضاء, وشكرا.

وأخيرا, بالطبع الأمر في كلتا الحالتين سيكون سهلا للمطور بعد صنع أداة أو برنامج لهذا الغرض.

تحياتي/ هاي فولت

#4

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

ولو انه يوجد طرق لمنع حدوث هذا الارهاق .

لكن لماذا .. لانستخدم الجا والجتا ..

ببساطة ,, لانها لا تعطيك التحكم الكافي , هذا ما اظنه ,, لكن من الممكن انه يستخدم مسارات جاهزة او انه يستخدم خوارزميات ,, لنقل انه يستخدم خوارزمية pathfinding ,,

لكن على الاغلب انه سيستخدم مسار ,,

وطبعا اكيد انه عنده اداة world editor وبالتالي يرسم المسار في المرحلة بسهولة .

هذا هو ما اظنه ..

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

سأعمل مثال لعمل مسار في عالم ثلاثي .. ان شاء الله .

تم تعديل هذه المشاركة بواسطة الشمري في 7 يوليو 2006 في 08:22

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

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

#6

هناك طريقين .. طريق صنع مسار و طريق البحث عن افضل مسار للوصول لهدف Path Finding و له خوارزميات معروفة النجمة *A .

الطريقة الثانية للاخ HighVolt .. هي مستخلصة من ديناميكا الحركة للمجسمات و تسمي Curvlinear Motion و هي عبارة عن جسم له كتلة يسير بعجلة بسرعة ابتدائية علي مسار .. تستخدم هذه الفكرة في محاكاة "حركة " العاب التزحلق علي الجليد و محاكاة مسارات الكواكب مثلاً و ما شابها ..

ولكن (يجب معلومية معادلة المسار) ، اغلب المسارات تكون علي شكل قطع مكافئ Parabola من الممكن ان تقوم برسم قطع مكافىء معادلته y= x^2/10..و تقوم بتطبيق معادلات الحركة عليها ... و الفكرة هنا كما فعلها الشمري و هو استخدام اداة تقوم برسم المسار و لكن يجب ان تعلم معادلته لتطبيق معادلات الحركة و قوانين الديناميكا عليها ... "" إذا كنت تريد ان تسير علي المسار عن طريق محاكاة القوانين " .

اما لو جئنا لمسألة مطاردة الحراس للاعب

اعتقد تكلمت عن هذه الخوارزمية من قبل هي مجرد مقارنة احادثيات الاول بالاخر إن كان الاخر قريب من آه ، نزيد من احادثيات الاول عليه حتي يتتبعه و يطارده .

post-40521-1152835260_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#7

السلام عليكم, آسف لتاخري

حسنا, هذا المثال بواسطة الفيجوال بيسك 6. على استخدام طريقة الجا والجتا.

على فكره!! الأداة بدائيه :) .

وضعت المرحله الأولى فقط من استخدام الطريقه, وهي رسم المسار بوضع ما يلزمنا من نقاط .

يتضمن المثال أداه تمكنك من صنع مسار معقد(متوسط التعقيد) .

كيفية وضع النقاط , وفائدتها :

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

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

حسنا, وماذا في هذا ؟

هذه النقاط عباره عن تمهيد لتطبيق الإنحرافات(باستخدام الجا والجتا)بين كل نقطتين في المحور السيني, وستكون أعلى نقطه في القوس هي النقطه التي تم إدراجها في المحور الصادي .

الشرح غير دقيق أبدا, لك أن تشاهد المرفق لمزيد من التوضيح.

سأحاول ان اطبق المرحله الثانيه في اقرب فرصه . أما بالنسبه للقطع المكافئ, فسأحاول(محاوله) تطبيقه في مثال آخر بإذن الله.

تحياتي / هاي فولت

Path_creator.zip

تم تعديل هذه المشاركة بواسطة High volt في 15 يوليو 2006 في 17:45

#8

السلام عليكم

هذا مثال للطريقه الأولى المذكوره أعلاه .

حيث تم رسم مربع , لك ان تتخيله مبنى, وتم رسم أربع نقاط بمثابة مسار يتنقل فيه الجندي (ج) :

النقطه الأولى يقف عليها (ج) لمدة ثانيه , وخصصت حركة لـ(ج) مثلتها بتغيير لون النقطه.

وقس على ذلك النقاط الثلاث الباقيه مع تغيير في الخصائص .

تحياتي

Path_creator.zip

#9

رائع اخي ، و ننتظر طريقة الCurvLinear " لاحظ ان هذه الطريقة لم اراها في كتب الفيزياء الخاصة بالالعاب العالمية " :) . يا ليت تقوم بالمحاولة و سوف نساعدك علي قدر ما اعرفه .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#10

في الفصل الماضي اخذت مادة جرافكس (و ندمت على ذلك) و نجحت على الشعرة (نحجت بمعجزة لاني لم افهم نصف المادة) اسكت و خليهة.

كان هناك واجب يطلب منك صنع اداة تقوم بعمل اشياء من قبيل انشاء منحنيات و تدويرها .. يعني عمل surface of revolution و حاجات كدة. (اذا كنت مستخدم ثريدي ماكس فستفهم ذاك المصطلح)

طبعا فشلت في تطبيق المتطلبات الدنيا حتى .. و لكن ما قمت به هو اداة لرسم المنحنيات و تعديلها .. (المفروض ايضا انك تستطيع تدوير هذه المنحنيات لتكوين مجسمات و لكني لم اقم بذلك)

لا توجد واجهة بها ازرار, التحكم كله من خلال ازرار الكيبورد و ليس ازرار على الشاشة.

لا احد يسألني كيف رسمت المنحنيات, المسألة كلها خوارزميات جاهزة و مكتوبة ايضا بالـ Pseudo code و كل ما قمت به هو ترجمتها للسي بلص بلص.

تعليمات الاستخدام:

رسم النقاط بالماوس

ملاحظة: لا تضغط زر كيبورد غير موجود في هذه التعليمات و الا قد تحصل اشياء غريبة :P

هناك نمطين لتحرير النقاط:

اضافة نقاط جديدة, و هو النمط الافتراضي

تحريك النقاط.

لتحريك النقاط, اضغط M عالكيبورد ثم قم بتحريك اي نقطة (بالماوس)

بعد ان تنتهي من التحريك و تريد العودة الى اضافة النقاط, اضغط على N

هناك خوارزميتين, bezier و هي الافتراضية, تحصل عليها بالضغط على W

و الثانية هي bspline و تحصل عليها بالضفط على E

تستطيع زيادة درجة "النعومة" للمنحنى بالضغط على A و تنقيصها بالضغط على Z

اذا اردت حذف النقاط و البدء من جديد, اضفط Q ثم W .. اذا ضغطت شيء آخر فقد يخرب البرنامج .. او لا اعرف.

curves.rar

#11

ما احاول ان افهمه .. لماذا نستخدم خوارزميات مثل bezier .. او معادلات .. لرسم منحنيات .. اذا كنا نريدها فقط لانشاء مسار .

أليس المسار الحر .. اكثر دقة وفائدة من المعادلات والخوارزميات . . .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12

هو في الحقيقة ليس مسار .. فقط اداة لرسم curves

و يمكن الحصول على خطوط مستقيمة بين النمقاط (دون انحنائات) اذا ضغطت Z عدة مرات.

#13

السلام عليكم

أشكرك اخي احمد صالح, ردك مشجع .

أخي hasan_aljudy, تمنيت أن ارى مثالك, لكن هناك مكتبه ناقصه لدي :<GL/glut.h>, ولكن فهمت مثالك من خلال شرحك.

أخي الشمري :

الشمري كتب:
ما احاول ان افهمه .. لماذا نستخدم خوارزميات مثل bezier .. او معادلات .. لرسم منحنيات .. اذا كنا نريدها فقط لانشاء مسار .

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

وللتوضيح سأقوم بتمثيل الشخصيه (ج) كنقطه سوداء تمشي على المسار الذي سترسمه لكن من دون إنحناءات, أي على النقط الحمراء مباشرة, حيث أن النقط الخضراء تمثل شدة الإنحناء. فأنا إلى الآن لم اتوصل بعد لمعادله مناسبه, ولكني سأضعها حال إيجادها .

الشمري كتب:
أليس المسار الحر .. اكثر دقة وفائدة من المعادلات والخوارزميات . . .

عفواً, لم أفهم قصدك بالمسار الحر.

Path_creator.zip

تم تعديل هذه المشاركة بواسطة High volt في 17 يوليو 2006 في 11:35

#14

ما احاول ان افهمه .. لماذا نستخدم خوارزميات مثل bezier .. او معادلات .. لرسم منحنيات .. اذا كنا نريدها فقط لانشاء مسار .

في برمجة الجرافيكس - جميع معادلات الدرجة الاكثر من الثالثة مثل Bezier Curves-SP-Lines-Nurbs تستخدم كنوع من انواع النمذجة كما في الماكس و هناك اشياء اكثر دقة مثل الNURBS .

للزيادة

http://web.cs.wpi.edu/~matt/courses/cs563/talks/nurbs.html

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#15

حسنا .. سأصيغ السؤال بطريقة اخرى .

قرأت ( وبالتحديد من رامي لولح ) .. انه في العاب كرة القدم تستخدم معادلات ( منحنيات) لوضع مسار للكرة اثناء

تسديدها ,, وقرأت من مصادر اخرى ,, انه يستفاد من هذه المعادلات , لوضع مسارات معينة ,

اذا استخدمنا معادلة .. فسنتعب حتى نصل للمسار المطلوب .

اما لو استخدمنا مسار حر .. رسمناه بواسطة الفأرة .. وحفظنا احداثياته .. فاننا سنتحكم في شكل المسار 100% .

دون ان نرهق انفسنا بمعادلات وخوارزميات هذا هو ما اقصده ,

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#16

عادة تستخدم المقذوفات Projectiles في تحقيق مثل هذه النوعية من الحركة .

هذا الموقع بعد البحث في جوجل و جدته جيد جداً و يتحدث عن المقذوفات بشكل جميل و تطبيقي تستطيعوا و ان تطبقوا ما يحدث في الالعاب بكل سهولة .

http://hypertextbook.com/physics/mechanics/projectiles/

تم تعديل هذه المشاركة بواسطة احمد صالح في 17 يوليو 2006 في 17:16

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#17

بالنسبة لطريقة الاخ HighVolt سوف اعرض عليك فكرة رياضية يا اخي لكي تستطيع حساب اقرب معادلة للمسار المرسوم مع علم مجموعة من النقط و تسمي الطريقة ب Curve Fitting .

بغد الحصول علي اقرب تقريب لمعادلة المسار ، تستطيع تطبيق ديناميكا الحركة و تطبيق معادلات Curvlinear Motion ، بحيث تحسب سرعته عند بداية المسار و عند نهايته ، العجلة ...

http://www.physics.ncsu.edu/courses/pylabs/tutorials.htm

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#18
الشمري كتب:
حسنا .. سأصيغ السؤال بطريقة اخرى .

قرأت ( وبالتحديد من رامي لولح ) .. انه في العاب كرة القدم تستخدم معادلات ( منحنيات) لوضع مسار للكرة اثناء

تسديدها ,, وقرأت من مصادر اخرى ,, انه يستفاد من هذه المعادلات , لوضع مسارات معينة ,

اذا استخدمنا معادلة .. فسنتعب حتى نصل للمسار المطلوب .

اما لو استخدمنا مسار حر .. رسمناه بواسطة الفأرة .. وحفظنا احداثياته .. فاننا سنتحكم في شكل المسار 100% .

دون ان نرهق انفسنا بمعادلات وخوارزميات هذا هو ما اقصده ,

فهمتك منذ البدايه ولكن السؤال هنا, هو كيف ستجعل الشخصيه تمشي على المسار الذي ترسمع بالفاره ؟ إذا قلنا اننا ستحدد نقطه عند حركة الفاره؟ مستحيل .ستحصل على آلاف النقاط لقاء مسار صغير . وبالتالي إجهاد رهيب على المعالج .بالتأكيد هناك طريقه للمسار الحر بالفاره, لكن صدقني سيعتمد أيضا على المعادلات .

أخي أحمد صالح, بالنسبه لطريقتك, فقد فهمتها نظريا ولكن عند تطبيقها أفشل فشلا ذريعا .

تم تعديل هذه المشاركة بواسطة High volt في 19 يوليو 2006 في 16:57

#19

اذكر أني رأيت تطبيق يعتمد على انشاء curve (منحنى ) بواسطة خوارزمية ... كما فعل حسن الجودي ..

ثم يتم تحريك الاجسام بناء على احداثيات نقاط المنحنى..

اقتباس
ستحصل على آلاف النقاط لقاء مسار صغير . وبالتالي إجهاد رهيب على المعالج

كلامك سليم جدا .

لكن أنا لدي سؤال .

لاحظوا الصورة .

19_07_06_10_37_47_1153330667A.JPG

اريد ان احرك الجسم من النقطة A الى B

ماهي افضل الطرق ..

هل نستخدم معادلة المستقيم

Y = X*D + B

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#20

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

يعني, اعمل متجله يمثل الاتجاه من B الى A

و هذه تحصل عليها بسهولة عن طريق طرح A - B

يعني طرح الـ x و الـ y:

vector v;
v.x = a.x - b.x;
v.y = a.y - b.y;

و تبدأ في تحريك اللاعب في اتجاه الـ vector

في النهاية ايضا ستستخدم شيء يشبه معادلة الخط المستقيم.

و لكن, ما تقوم به, هو .. اذا عندك نقطة X تريد تحريكها في الاتجاه V (حيث V هو vector) بمقدار معين و ليكن هذا المقدار هو D (حيث D هو عدد حقيقي), يجب اولا ان تجعل طول V هو وحدة واحدة, يعني لازم يكون

v.length == 1

و هذه يمكن عملها عن طريق عمل normalization للـ vector و هي عملية رياضية بسيطة يمكن عملها تقريبا بثلاث اسطر

بعد ذلك, تضرب V * D ثم تضيف الناتج الى X

X.x = X.x + V.x * D; //note: X.x is a real number, V.x is a real number, D is a real number
X.y = X.y + V.y * D;

ما هي D بالضبط؟

هي المسافة اللتي تريد X ان يتحركها

لماذا نحتاجها؟

لانك في اللعبة ستقوم بتحريك X بمقدار صغير في كل فريم ... حتى تحصل على تأثير الحركة.

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

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