abshammeri

ورشة عمل: محرك ثنائي الابعاد (عمل جماعي)

38 ردود في هذا الموضوع

السلام عليكم ,,,

كثيرا من المشاريع التي ظهرت على السطح باءت بالفشل ,,

السبب على ما اعتقد ,, هو الزيادة في الطموح .

لذلك نحن الان نريد أن نعمل محرك ثنائي الابعاد .

هذا المحرك يكون بسيط جدا .

- هذا العمل جماعي .

- نطلب من الكل المشاركة .

- كيف يمكنك أن تشارك في هذا المشروع ...

حسنا ,,

نريدك أن تعمل تحليل وتخطيط للمحرك .

كيف ستكون الكائنات في المحرك .

كيف تترابط فيما بينها ,

ثم الخطوة الثانية سندخل في لب المحرك .

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

بمعنى أن يكون تركيزنا منصبا على انشاء محرك جرافكس في الاساس مع بعض الاضافات الاخرى .

ماهي مكتبة الجرافكس التي سنستخدمها ,

أنتم أحرار .. المسألة ديمو قراط ية ,

ولكن أفضل أن نستخدم

OpenGL لعدة أسباب أهمها :

1- سهلة .. وتساعدنا كثيرا على انجاح مشروعنا هذا ( محرك ثنائي الابعاد )

2- أغلب اعضاء وزوار المنتدى هم من مستخدمي هذه المكتبة حسب ما أرى ,

ولكن هل هذا يعني أن مبرمجي DX ليس لهم نصيب ؟

الجواب :

بالعكس .. حميع المبرمجين يفيدوننا.

مبرجي لغة السي ....بشكل عام

لغة البيسك

لغات الدوت نت .

نحن في البداية سنركز على انشاء مخطط عام وتحليل نظري للمحرك .

قبل أن أبدأ بسرد التحليل النظري ,,, أريد أن اقول ..

أتمنى أن نستخدم المكتبة glut في تجاربنا لانها الاسهل والاشهر ..

صحيح أن SDL مكتبة أقوى .. لكن قد تكون غريبة على البعض .

لذا اقترح ان نستخدم glut ... ولا نقوم بتغليفها .,,

اي نترك للمستخدم حرية الاختيار اما glut او SDL او حتى WIN API ..

===========

أريد أن اقول .. كل ما ستقرأه هنا مجرد اقتراحات فقط ..

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

وايضا أتمنى ما يظن البعض أني نصبت نفسي قائدا للمشروع :D

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

أعتقد المحرك يجب أن يتكون من عدة كائنات اساسية لا غنى عنها ..

وهي

كائن اساسي للمحرك .. قلب المحرك ...

كائن يمكن من خلاله رسم بعض الاشكال .

كائن الاكساء .

كائن لتصيير النصوص .

كائن لاكتشاف التصادم بين المجسمات ....

من خلال القائمة السابقة ,, بامكاننا صناعة لعبة .. ثنائية الابعاد .

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

#include"GL/glut.h"


typedef struct _IMAGEDATA
{
int width;
int height;
unsigned char *data;
}IMAGEDATA;

class GENERAL
{
public:
void InitEngine();
void Reshape(int width, int height );//2d --
void EnableAlpha(int alpha);
void DisableAlpha();
private:
};


class SHAPE
{
public :
void SetPosition(int x,int y);
void Rotate(int angle);
void Scale(int size);

void SetColor();
void GetColor();
void SetStyle();
void Rectangle();
void Circle();
void Line();
void Point();




private:



};


class IMAGE
{
public:
void LoadBMPImage(char*ImageName);
IMAGEDATA GetImageDate();


private:
int imagewidth;
int imageheight;
unsigned char *imagedata;


};



class Texture
{

public:
void CreateTexture(IMAGEDATA imagedata);
void CreateMipMappingTexture(IMAGEDATA imagedata);
void CreateMultiTexture(/* .......*/ );
unsigned int GetTexture();
void DeleteTexture();




private:
unsigned int TextureID;


};



class Collision
{
public:


private:

};


class TEXT
{
public:


private:

};

طبعا الى الان لم أبدأ ..

مارأيكم حول هذا التقسيم ..

هل هناك ترابط ..

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

بمعنى كل كائن يحتوي على خصائصه

فمثلا يجب أن نكتب كذا

SHAPE shape

shape.rectangle(...);
shape.SetPosition(......);
.
.

.

ولا نكتب كذا لانه سيحصل تداخل في الوظائف

shape.rectangle(.....)
shape.circle(.....);
shape.setposition();

بمعنى كل كائن له خصائصه الخاصة به ..

على هذا الاساس قمت بذلك التقسيم ..

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

انسوا تماماا مسالة opengl

العقبة الاساسية في تنظيم الكائنات ..

ليس المهم أن نستخدم جميع خصائص البرمجة الكائنية ,,

من تعدد واجهات ووراثة وووو

المهم يكون المحرك قوي ومنظم هذا المهم ,

أعطيكم بعض المسائل والمشاكل التي تواجهنا ..

ماهي أنسب طريقة لتصميم كائن الاكساء ,, وبالتالي استخدامه مع الكائنات التي تحتاجه ,

فمثلا كائن النص يحتاج الى الاكساء ,,

كائن shape يحتاج للاكساء ..

المشاكل كثيرة ..

المجال مفتوح للنقاش ..

كل ما قلته مجرد رأي ..

بامكانك اعادة تشكيل الموضوع من جديد وكما تريد

المهم يكون الهدف الوصول لنتيجة ..

وياليت تركزون على مسألة تخطيط المحرك .

على فكرة اسم المحرك

ATE

Arab Team Engine

ATE.zip

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

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

اولا قبل كل شيء, بما أن المحرك سيكون ثنائي الأبعاد فاعتقد انه لا داعي لاستخدام اي من ogl او dx لأن هاتين المكتبتين مخصصتان لبرمجة 3d graphics و استخدامها في محرك بسيط ثنائي الابعاد هو مثل استخدام طائرة نفاثة ضخمة من اجل الذهاب من البيت الى المدرسة. اعتقد انها ستجلب لنا مشاكل اكثر مما تحل.

أنا ارشح استخدام SDL لأنه بصراحة لا استسيغ التعامل مع glut, فهو مبسط جدا لدرجة انني اشعر اني لا استطيع السيطرة على البرنامج بشكل كامل. و لا أرى اي صعوبة في sdl فهو مثل glut و لكنه أسهل و اكثر مرونة.

دعونا من الشكليات .. و لنتحدث عن تصميم المحرك.

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

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

و ايضا اضيف انه عند تصميم المحرك فإننا لا نكتب اكواد .. بل نحدد فقط اسماء الـ classes و الـ methods الموجودة فيها.

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

و كما تفضلت, ليس بالضرورة ان نستخدم الوراثة و الـ polymorphism دائما.

اعتقد انه من الأفضل ايضا قبل البدء في تصميم و تخطيط المحرك .. ان نقوم بعمل تجارب صغيرة لبعض الخصائص و الوظائف المختلفة.

مثلا تجربة لعمل animation, و تجربة لعمل كائنات تتحرك من تلقاء نفسها, و تجربة لعمل كائن يتحرك عن طريق الكيبورد و الماوس .. و مثلا نعمل تجربة لكشف التصادم .. تجربة لانشاء كامرة تتحرك في عالم الـ 2D .. الخ.

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

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

طبعا هذا اذا فشلنا, و انا لا اقول هذا الكلام من باب التثبيط, بالعكس انا اقول يجب ان نشيل فكرة الفشل من دماغنا نهائيا. و لكن هذا شيء و هذا شيء آخر. لا داعي لتعريض اسم الموقع لمشاكل او ما شابه.

احم .. ارجو من الاعضاء المتحمسين للفكرة ان يشاركوا في الموضوع و يخبرونا بذلك .. و لا يكتفوا بالتفرج و المشاركة "الوجدانية"!!!

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله وبركاته

باختصار، نسخة دلفي من المحرك علي ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

طرح الموضوع أكثر من رائع و بإذن الله يا أخي hasan_aljudy فلن يفشل المحرك فلا أرى مانعاً من الآن أن يسمى بــ Arab Team Engine ...

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

بالنسبة إلى الإختيارات فإني أفضل أن نعمل بــ opengl أو directX و السبب أنه لو وفقنا الله و استطعنا إنجاز المحرك الثنائي فعملية تطويره إلى ثلاثي لن تصبح صعبة في حالة إعتمدنا من البداية على إحداهما .. أفضل opengl و السبب أن لا يكون المحرك خاصاُ بنظام دون آخر ...

بالنسبة إلى glut أو winapi أو Sdl و رغم أني أعمل على winapi فإني أرى أن نعتمد على glut و السبب أن يكون المحرك لجميع الأنظمة ...

أتمتى عملية تنظيم المشروع أي تحديد جداول زمنية للعمل يلتزم بها حتى لا تصبح فكرة المشروع مثلها مثل بقية الأفكار التي كان نصيبها النسيان .....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

طيب أخواني ماهو مستوى المبرمج المطلوب بالنسبة للغة c++

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حقيقة أتمنى ان نبقى على Opengl او dx حتى نتمكن فيما بعد من تطوير المحرك .

اما Sdl فبامكاننا الاستفادة منها في :

عمل محرك الادخال input ... انشاء النوافذ ونحوها .. تحميل الصور .. طباعة النصوص ..

بهذه ممكن نستفيد من SDL >

لكن اتمنى ان يعتمد المحرك على مكتبة واحدة فقط هي opengl .. حتى يستطيع اي شخص في وقت لاحق استخدام المكتبة التي يريد ..glut- SDL او حتى Win API .

على العموم لا يهم SDL او OpenGL المهم الان تخطيط المحرك ,,, ونتفق على الامور الثانوية بعدين .

أريد التعليق حول نقطتين :

1 - مالذي نريده من المحرك .

نريد منه ان يكون قادر على انشاء الاشكال ثنائية الابعاد .

ونريد منه ان يكون قادى على تحميل عدة أنواع من الصور .

ونريد منه أن يكون قادر على الاكساء .

ونريد من أن يكون قادر على طباعة النصوص .

ونريد منه أن يكون قادر على اكتشاف التصادم .

كل ما سبق سهل الا الخطوة الاخيرة تحتاج ...شوية جهد ,

اذا ماينقصنا هو التخطيط السليم للمحرك ,

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

وأعتقد ايضا انه من الافضل ان نضيف لهذا الكائن دوال الازاحة والدوران ,,,

ثانيا : كائن للصور .. واخر للاكساء ,

بالنسبة لاكتشاف التصادم .. اعتقد معك حق .. يا حسن ,, ممكن نستخدم دوال بدون كائنات , افضل .

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

السلام عليكم

طيب أخواني ماهو مستوى المبرمج المطلوب بالنسبة للغة c++

اي شيء ممكن تفيدنا فيه .. قم باضافته ,,

====

أريد منكم .. تخطيط للمحرك ,, عجزت الوصول للشكل العام :wacko:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لحظة لحظة ...

ما معنى الإكساء و الأشكال في محرك ثنائي الأبعاد؟!

كما أني لا افهم ما اللذي سنستفيده من opengl في محرك ثنائي الأبعاد؟

هي مجرد مجموعة صورة تتحرك على الشاشة .. ما هو دور opengl؟

تحميل الصورة بحد ذاتها ليست مشكلة محرك لعبة .. و على كل هناك devil و هو يحل مشكلة الصور .. فهذه المشكلة ليست من وظائف محرك لعبة.

و لكن ممكن تكون احدى مهمات المحرك هي تحميل عدة صور و عمل animation, مثلا.

حتى نوضح أكثر ما اللذي نريده من المحرك, اعتقد يجب ان نفكر لماذا نريد انشاء المحرك, صح؟

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

إذن, حتى نعرف ما هي وظائف المحرك, علينا ان نسأل, ما هي الأمور الأساسية في كل الألعاب؟! ما اللذي تتطلبه و تحتاجه؟

اعتقد ان اي لعبة في العالم هي عبارة عن مجموعة كائنات تعيش في عالم افتراضي, اللاعب عادة يتحكم بواحد من هذه الكائنات. كل كائن له خصائص معينة, و هذه الكائنات تتحرك و تتصادم مع بعضها .. و تتصادم مع العالم الافتراضي.

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

اعتقد انه على هذا الأساس ينبغي ان نفكر اكثر في عمل ووظائف المحرك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حسن .,,

في opengl و sdl والمكتبات المشابهة .. يجب رسم الشكل ( مربع ) ثم اكسائه .. اي من الصعب ان ترسم صورة فقط .. الا باستخدام glDrawPixel ..

وهذا بطيء جدا .

اذا اشتغلنا على Win API .. عندها بامكاننا عرض الصور بدون استخدام الاكساء

sdl تحتوي على مكتبة صور هذا صحيح .. لكن لا يمكنك استخدام هذه الصور .. الا باكسائها على الاشكال .

opengl او اي مكتبة اخرى ,, ستفي بالغرض .. لو استخدمنا opengl فلن يصل عدد الدوال الى 15 دالة .. حتى !!!

ما رأيكم بالمكتبة ALLegro .. :rolleyes: ..

نرجع لامر المحرك وهو الاهم :

أتمنى نركز على شيء مهم ..

يجب أن نحاول أن نركز على مكتبة او اثنتين فقط ..عشان ما يكبر حجمه على الفاضي >

بالنسبة لتخطيط المحرك .

اعتقد ان اي لعبة في العالم هي عبارة عن مجموعة كائنات تعيش في عالم افتراضي, اللاعب عادة يتحكم بواحد من هذه الكائنات. كل كائن له خصائص معينة, و هذه الكائنات تتحرك و تتصادم مع بعضها .. و تتصادم مع العالم الافتراضي.

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

طيب .

اذا يوجد عندنا في هذه الحالة كائن .

الكائن ماريو :rolleyes: :

له خصائص ( لون - صورة - شكل )

له أبعاد .

بامكاننا تحريكه .

الكائنة زيلدا :rolleyes: :

لها خصائص ( لون - صورة - شكل معين )

لها أبعاد .

بامكاننا تحريكها .

نريد method لكشف التصادم بين ماريو وزيلدا .

في الاخير ماريو وزيلدا و الحجر والمنزل والشجرة .. هما عبارة عن CSHAPE (كلاس) .

بالتالي هذه أمرها سهل .

لكن يجب حسب معلوماتي .. أن نطبق مبدأ :)

كل كائن له مهمته المحددة .

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

.. هنا وصلنا لمربط الفرس على ما قالوا .

كيف نوزع هذه الكائنات ., ونجعل لكل منها مهمة محددة .. وماهي methods التي ستحتوي عليها ,,

أي لعبة ..

سوبر ماريو .

سباق سيارات .

تترس .

الثعبان ,.

هي في الاخير قائمة على :

  1. اشكال لها خصائص كالحجم والحركة واللون
  2. طريقة لكشف التصادم بين هذه الكائنات
  3. فئات مساعدة او ما تسمى بـ Helper classes .

----

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ماللذي تقصده بأن ماريو هو عبارة عن shape؟

ماريو ليس شكل .. بل هو كائن .. عنده شكل (جزء من خصائصه)

و لو اني اظن ان شكله و شكل كل الكئانت هو مربع .. لذلك فهو ليس له شكل مميز عن غيره .. بل له صورة.

و لكن هذه الصورة قد تكون animation, لذلك فهي ليست صورة فقط.

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

الكائنات في اللعبة لديها على الأقل الخصائص التالية:

- موقع (مكان .. position), يعني x,y و هذه الاحداثيات هي في عالم اللعبة و ليس بالضرورة في الشاشة.

- أبعاد .. (طول و عرض)

- صورة او جرافكس او انيميشن .. و هو الصورة المرئية للكائن .. كما نريد اللاعب ان يراها.

هذا على أقل تقدير ..

إلا إذا اردنا تعقيد الأمور و تعريف اشكال هندسية مختلفة للكائنات.

في الحقيقة لا زلت لا افهم ما هو معنى الإكساء في محرك ثنائي الأبعاد.

SDL ليس فيه اكساء .. بل فيه صور فقط, و انت ترسم الصورة في مكان معين.

الاكساء او texture لا معنى لها إلا في سياق الـ 3D Graphics. حيث تقوم بتحديد اجسام ثلاثية الأبعاد ثم تكسوها بصورة عادية.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

غالبا ما تكون هناك صورة BackGround اكبر من ابعاد الشاشة

هناك تحرك لهذه الصورة Scrolling اما عموديا او افقيا او الاثنين معا

يوجد شخصيات Sprite عبارة عن صورة مربعة بها لون شفاف بحيث تظهر الشخصية بشكل غير مربع

غالبا ما تتحرك الشخصية وتصادم الشخصية مع شخصيات اخرى او جزئ من الديكور يجدث حدث ما

هذا ما افهمه من لعبة 2D وارجوا التوضيح ان كان الهذف شيئ أخر :blink:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي محمد حديثك صحيح تماماً و لكن هذه الأمور تطبق على java 2d (كائنات sprite حيث أن هناك كلاسات خاصة للتعامل معها ) ...

بالنسبة إلى النقاش بين الأخوين العزيزين : أظن أن أخي الشمري يفكر بعالم ثلاثي و لديه النظرة إلى المستقبل نحو محرك ثلاثي البعد لذلك يفكر بالإكساء كما أظن ....

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حلو .. اختلاف رائع وعلمي .

سوف أعلق الان على قضية الاكساء

حسن :

في الحقيقة لا زلت لا افهم ما هو معنى الإكساء في محرك ثنائي الأبعاد.

SDL ليس فيه اكساء .. بل فيه صور فقط, و انت ترسم الصورة في مكان معين.

الاكساء او texture لا معنى لها إلا في سياق الـ 3D Graphics. حيث تقوم بتحديد اجسام ثلاثية الأبعاد ثم تكسوها بصورة عادية.

محمد :

غالبا ما تكون هناك صورة BackGround اكبر من ابعاد الشاشة

هناك تحرك لهذه الصورة Scrolling اما عموديا او افقيا او الاثنين معا

يوجد شخصيات Sprite عبارة عن صورة مربعة بها لون شفاف بحيث تظهر الشخصية بشكل غير مربع

غالبا ما تتحرك الشخصية وتصادم الشخصية مع شخصيات اخرى او جزئ من الديكور يجدث حدث ما

هذا ما افهمه من لعبة 2D وارجوا التوضيح ان كان الهذف شيئ

informat

أظن أن أخي الشمري يفكر بعالم ثلاثي و لديه النظرة إلى المستقبل نحو محرك ثلاثي البعد لذلك يفكر بالإكساء كما أظن ....

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

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

لذلك لنقوم من الان ببناء النواة الاساسية .

اخوي محمد : كلامك صحيح .. هذه صفات المحرك الثنائي الابعاد .

لكن sprite و Tiling و عمل Scrolling ..للخلفية .. كلها تعتمد على كائنات اخرى .. مثل كائن الصور .

لذلك أعتقد أنه يجب علينا الان ان لانفكر في sprite او في عمل نظام جزيئات ثنائي الابعاد .... في هذا الوقت .

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

نرجع لاخونا حسن :

كلامك عشرة على عشرة ..

"لماذا نستخدم الاكساء في حين أنه يمكن تحميل الصورة وعرضها كما في SDL .. كما تقول . "

اولا تعرف أنه عند استخدام الصور نقوم بالتالي :

DATA data = LoadImage("image.bmp");

ShowImage(date);

لكن في الاكساء

DATA date =LoadImage("image.bmp"); 

int ID_1 = CreateTexture(date);

UseTexture(ID_1);
Rectangle(width,height);
.
.
.
.

ماذا يوجد في داخل Rectangle

Rectangle(int width ,int height ) 
{
glBegin(...);

glTexCoor2f(...)
glVertex2f(.....)

glTexCoor2f(...)
glVertex2f(.....)

glTexCoor2f(...)
glVertex2f(.....)

glTexCoor2f(...)
glVertex2f(.....)


glEnd()
}

اذا نلاحظ أنه في الاكساء الشغلة طويلة عريضة .. بعكس طريقة الصورة مباشرة .

نرجع للسؤال :

لماذا نستخدم الاكساء في حين أنه يمكن تحميل الصورة وعرضها كما في SDL .. كما تقول . --

لعدة أسباب .. لا اعرف هل هي مقنعة أو لا .

1- لاني ماكنت أعرف أن SDL بامكانها عرض الصور بدون اكساء :D .

2- لاننا وكما قال الاخ informat والاخوة من قبله .. نفكر في ان نطور في المستقبل . . لو عملنا كائنات إكساء الان فان هذا يختصر علينا الوقت والجهد لاحقا بعون الله .

3- الاكساء يتوفر فيه صفات ممتازة منها .. يوجد اكساء MipMapping .. باستخدام هذا الكساء يمكننا " مط " الصورة طولا و عرضنا كما نريد ويكون التشوه قليل . .. ويوجد أيضا اكساء MultiTexture وميزته أنك تعطيه صورتين وهو يقوم بدمجهما مع بعض بشكل حلو .

4- أهم نقطة :

اذا استخدمنا الاكساء يمكننا أن :

- نطبق الشفافية على الصورة

- نحذف الخلفية السوداء من الصورة

- نستفيد من Blending في عملية مزج الوان الصور مع بعضها .

فاذا كان بامكاننا في SDL أن نحذف الخلفية السوداء من الصورة ونطبق الشفافية ..

فلا مانع من استخدام SDL ... بعد اتفاق الاعضاء .

السؤال الان .. هل sdl يمكنها التحكم بالصورة كما نريد ؟

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

سوف أطلع على وثائق SDL .

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

اكول لك :D .. الاكساء مو قضية .... أني أعجبتني أول جملة قلتها في اول رد وهذا هو الاهم الان :

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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
اكول لك teeth_smile.gif .. الاكساء مو قضية .... أني أعجبتني أول جملة قلتها في اول رد وهذا هو الاهم الان :
اعتقد انه من مبادئ هندسة البرمجيات, انك لا تبدأ بوضع مخطط للـ classes ثم تحاول تنفيذ المخطط. بل تبدأ من دراسة الموضوع و تحليله و من ثم تحويل النتائج الى مخطط لهيكل البرنامج (او المحرك). يعني غلط اننا نفكر في تصميم هيكل المحرك كأول خطوة

اي .. استاذنا وقتها كتلنا بهذي القضية .. :lol:

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

لذلك لنقوم من الان ببناء النواة الاساسية .

اي بس شوف ..

انا في السابق كنت اتبنى هذه النظرية ..

و لكن غيرت رأيي قليلا .. لازم نضع لأنفسنا حدود.

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

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

يعني لو فكرنا كثيرا في تطوير المحرك فسوف نحير "كيف نصممه لكي يتطور" و ننسى اننا اصلا نريد تصميم المحرك .. اقصد سنغرق كثيرا في ذلك التساؤل و في النهاية لا ننجز شيء.

خلينا اول شي ننجز محرك ثنائي عادي .. و بعدين نفكر شو نساوي بعدهة.

نرجع للسؤال :

لماذا نستخدم الاكساء في حين أنه يمكن تحميل الصورة وعرضها كما في SDL .. كما تقول . --

لعدة أسباب .. لا اعرف هل هي مقنعة أو لا .

1- لاني ماكنت أعرف أن SDL بامكانها عرض الصور بدون اكساء teeth_smile.gif .

2- لاننا وكما قال الاخ informat والاخوة من قبله .. نفكر في ان نطور في المستقبل . . لو عملنا كائنات إكساء الان فان هذا يختصر علينا الوقت والجهد لاحقا بعون الله .

3- الاكساء يتوفر فيه صفات ممتازة منها .. يوجد اكساء MipMapping .. باستخدام هذا الكساء يمكننا " مط " الصورة طولا و عرضنا كما نريد ويكون التشوه قليل . .. ويوجد أيضا اكساء MultiTexture وميزته أنك تعطيه صورتين وهو يقوم بدمجهما مع بعض بشكل حلو .

4- أهم نقطة :

اذا استخدمنا الاكساء يمكننا أن :

- نطبق الشفافية على الصورة

- نحذف الخلفية السوداء من الصورة

- نستفيد من Blending في عملية مزج الوان الصور مع بعضها .

فاذا كان بامكاننا في SDL أن نحذف الخلفية السوداء من الصورة ونطبق الشفافية ..

فلا مانع من استخدام SDL ... بعد اتفاق الاعضاء .

السؤال الان .. هل sdl يمكنها التحكم بالصورة كما نريد ؟

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

نعم حبيبي .. sdl فيها هاي الأشياء!!

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

و أزيدك من الشعر بيت .. sdl فيها محرك نصوص يستخدم مكتبة freetype من اجل رسم النصوص على شكل صورة, بالخط اللذي تريده.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اللي موافق على SDL يرفع يده ... :)

نريد رأيي كل الاعضاء .

بسرعة شباب .. لانه في بالي كلام كثير .. لكن لازلنا نريد من البقية أن يشاركوا ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أنا موافق على SDL ....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

طيب على راحتكم .

نستخدم SDL . واذا أردنا تحويله الى Opengl .. نستطيع ذلك .

لكن اليوم عملت جولة مكوكية في عالم " الهاردسك " في جهازي .. ووجدت أقوى محرك ثنائي الابعاد ... وهو يعتمد اعتماد كلي على DX .

لا استطيع إلا ان اقول أنه رائع .

أنصح الجميع بتحميله .

اسم المحرك HGE

قوموا بالنظر لملف التعليمات doc ..

هنا :

http://hge.relishgames.com/files/hgedoc.zip

وانظروا الى اسلوب التنظيم الرائع الذي انتهجه هذا المحرك ,

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

وانظر لهذه المواضيع والتي تناقش مسألة إنشاء محرك ثنائي الابعاد

http://gpwiki.org/index.php/SDL#Creating_a...plete_2D_Engine

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

نعود لمسألة التحليل .

ما رأيكم : هل ننشئ لكل مهمة ... كائن !

بعد أن رأيت المحرك HGE غيرت رأيي ...

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

لكن قبل ذلك أريد أن اذكر باختصار .. المزايا التي أعتقد أنها مهمة .

المحرك رسومي بالدرجة الاولى .. أي اننا لن ننشئ input engine ولا sound engine ولا

network engine .

يجب أن يكون المحرك قادر على رسم الاشكال الثنائية الابعاد الاساسية .

يجب أن يكون للمحرك القدرة على عرض الصور .

يجب أن يكون للمحرك عرض النصوص .

يجب أن يحتوي المحرك على كائن او دالة .. لاكتشاف التصادم . الان نريد اكتشاف التصادم بين شكلين رباعيين .. يعني نريد الابتعاد عن مسألة اكتشاف التصادم بين دائرتين , لان هذا متعب

نريد أن يكون في المحرك كائن sprite .... صحيح أنها خطوة متقدمة . لكن أنا تعمدت ذلك .

حتى يمكننا أن نقول أن المحرك .. يستحق الاشادة .. فهو يحوي sprite .

====

يا اخوان :

ماهي الخطوة القادمة ,

هل نقوم بمزيد من المناقشات .

او

نقوم بعمل تطبيقات صغيرة على sdl كتدريب ... قبل ان نعمل المحرك .

او نبدا بتصميم المحرك .

=========

أحب أن أنبه أني سأغيب حوالي الاسبوع .. بسبب بعض الظروف ..

=========

المرفقات تحوي المحرك ... لاتنسى

lesson.zip

hge.zip

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اعتقد الافضل ان نقوم بتطبيقات صغيرة .. حتى نمرن عضلاتنا شوية.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سلام عليكم

فكرة ممتازة و نقاش جميل ارجو ان لا يكون فاتنى الكثير

و اتمنى المشاركة.

بداية انا لا املك خبرة كبيرة (او صغيرة) فى عمل المحركات

لكن فى حدود فهمى للامور يجب تحديد اشياء مثل نوع الكائنات و حجم التمثيل الفزيائى لهذه الكائنات. فى العادة و كمجموعة عمل يتم كتابة mission statement و منها تحدد الاسمء ككائنات و الافعال كطرق.

لذلك اعتقد اننا يجب ان نبداء بصياغة لغوية mission statement وهذه الصياغة ستكون الاساس للمطلوب عملة. اما عن المكتبات و ما الى ذلك فهى مرحلة ستكون بإذن الله ميسرة اذا عرف المطلوب تحديداً.

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

احم .. يرفع للاستيقاظ من النوم!!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لحظة شوي :) ..

اريد ان اضيف تجارب على SPRITE و FONT و SHAPES للتدريب فقط .

في خلال يوم واحد ... اصبروا شوي ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

أنا أخواني معلوماتي عن المحركات قليلة ولكن هل تقصدوا أن المحرك يستطيع رسم الأشكال الثنائية الأبعاد الأساسية

هي أنكم تغلفوا دالة في sdl

لرسم مثلا مربع وتضعوا القيم

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

مثلا نعمل دالة لرسم مربع أو مستطيل عن طريق الفأرة

وإحنا نعرف أنا المربع يحتاج إلى أربع نقاط

النقطة الأولة (النقطة السفلى اليسرى): عبارة عن إحداثيات الفأرة عند الضغط على الزر الأيسر

النقطة الثانية(النقطة السفلى اليمنى) :

الإحداثي الصادي للنقطة = الإحدلثي الصادي للنقطة الأولة

الإحداثي السيني للنقطة = الإحداثي السيني للنقطة الثالثة

النقطة الثالثة (النقطة العليا اليمنى) :عبارة عن إحداثيات الفأرة عند ترك الزر الأيسر

النقطة الرابعة (النقطة العليا اليسرى):

الإحداثي الصادي للنقطة =الإحداثي الصادي للنقطة الثالثة

الإحداثي السيني للنقطة = الإحداثي السيني للنقطة الأولة

يعني لو أخدنا مثال

النقطة الأولة =(5و4)

النقطة الثالثة =(10و8)

فسينتج

النقطة الثانية =(10و4)

النقطة الرابعة =(5و8)

وتالي تمرر القيم إلى الدالة المغلفة وترسم المستطيل أو المربع

أخي العزيز حسن في أحد المواضيع وضعت محرك لك فهل كان محرك رسومي أم ماذا

لأني حاولت تحميله ولم أستطيع

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

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

بالنسبة للمحرك أنا جالس أبرمج محرك يستخدم تقنية الـDX وفي فجول بيسك 6

بس المحرك إلى عملته للألعاب RPG وفقط يخدم هذا النوع من الألعاب هذه هي المشكلة .

بالعربي أنا مستعد لأي شيء تطلبوه ...

ودائماً نجاح المحرك يكون من بساطته وليس من تعقيده .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الحين أنا جاهز لاكمال الموضوع :) ..

بسرعة ..

يجب ان يوجد كائن .. للصور .. وكائن لSPRITE .. حتى يكون هناك نوعا من التحدي .

ودائماً نجاح المحرك يكون من بساطته وليس من تعقيده .

تستاهل قبلة على الرأس ,,,, :) ,, كلام سليم 100% .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

UP .

نريد احد يبدأ لان ليس عندي الجرأة للتعامل مع الكلاسات :(

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

المشكلة إنو أنا مني عارف من فين أبدأ والمشكلة إنو لو حأعمل الإنجن حأعمو على الفجول بيسك 6 وبالدايركت إكس 8

وإنتو تبغو بالـOpen Gl

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .