السلام عليكم ,,,
كثيرا من المشاريع التي ظهرت على السطح باءت بالفشل ,,
السبب على ما اعتقد ,, هو الزيادة في الطموح .
لذلك نحن الان نريد أن نعمل محرك ثنائي الابعاد .
هذا المحرك يكون بسيط جدا .
- هذا العمل جماعي .
- نطلب من الكل المشاركة .
- كيف يمكنك أن تشارك في هذا المشروع ...
حسنا ,,
نريدك أن تعمل تحليل وتخطيط للمحرك .
كيف ستكون الكائنات في المحرك .
كيف تترابط فيما بينها ,
ثم الخطوة الثانية سندخل في لب المحرك .
أنا أقترح ايها الاخوة أننا لانعمل تغليف الا لدوال الجرافكس فقط .
بمعنى أن يكون تركيزنا منصبا على انشاء محرك جرافكس في الاساس مع بعض الاضافات الاخرى .
ماهي مكتبة الجرافكس التي سنستخدمها ,
أنتم أحرار .. المسألة ديمو قراط ية ,
ولكن أفضل أن نستخدم
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

