Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

ورشة تصميم لعبة طائرات

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • ورشة تصميم لعبة طائرات

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

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




    في هده الورشة نحتاج الى ما يلي :

    *مودل جاهز لطائرة حربية ( ساضعه في المرفقات)
    *صورة لسماء كخلفية ( ساضعه ايضا في المرفقات)
    *مودل مكعب صغير ( سنحتاجه للكمرا)
    * سكربت ايديتور
    * خبرة بسيطة في لغة سي

    لتحميل الموديلات الضرورية

    http://www.mediafire.com/?f69he60k5svdp2l

    ولنبدأ على بركة الله


    اول شيء نخلق مجلد جديد لكي نضع فيه مودل طائرة وصورة الخلفية بالاضافة نضع ملف فارغ دات امتداد c ولنسمه متلا game

    اضغط على الصورة لعرض أكبر. 

الإسم:	ddd.jpg 
مشاهدات:	1 
الحجم:	42.9 كيلوبايت 
الهوية:	3303325


    نفتح ملف game.c الي خلقناه من قبل داخل سكربت ايديتور

    اضغط على الصورة لعرض أكبر. 

الإسم:	pic1.jpg 
مشاهدات:	1 
الحجم:	50.8 كيلوبايت 
الهوية:	3303326

    والخطوة الهامة لكي نعمل بلغة سي لازم نضع سطر هيدر في الاعلى

    كود:
    #include <acknex.h>
    بعد دالك نضع فانكشن main والتي تعتبر اول فانكشن يقراها المحرك بعد دالك نفتح مرحلة جديدة

    كود:
    void main()
    {
    
    wait(1);
    level_load(""  );
    
    
    }
    بعد ما انشانا ملف الرئيسي ناتي الان لتصميم ملف خاص بفانكشنات الطائرة

    ننشأ ملف جديد نسميه airplane ويكون دات امتداد c بعد دالك نفتحه داخل سكربت ايديتور بجنب ملف game.c

    بعده نعمل ضم لهدا الملف الى الملف الرئيسي عن طريق Include

    ونضيف السطر التالي اسفل سطر الهيدر acknex.h

    كود:
    #include "airplane.c"
    ولنبدا ببرمجة سكربت الطائرة الحربية ( لم نستدعي الطائرة بعد داخل المحرك نحن سنصمم فقط السكربت الخاص بها بعدها سنستدعيها)

    اول شيء نبدا بانشاء اكشن جديد خاص بالطائرة ولنسميه f15

    اضغط على الصورة لعرض أكبر. 

الإسم:	ddd.jpg 
مشاهدات:	1 
الحجم:	62.7 كيلوبايت 
الهوية:	3303327


    نعمل في هدا الاكشن حلقة تكرار while وداخل هده الحلقة اي شيء وضعته سيبقى يكرر حتى ينتهي هدا الاكشن متلا مسحته

    كود:
    action f15()
    {
    	while(1)
    	{
    		
    		wait(1);
    	}
    }

    ملاحظة : اتناء وضعك لحرلقة تكرار لازم تضع داخلها wait(1); لكي لا يتجمد لك المحرك.


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

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

    ندهب للملف game.c و داخل الدالة main بعد level_load نضع :

    كود:
    ent_create("f15.mdl",vector(0,0,0),f15);
    f15.mdl هو اسم المودل الموجود في المجلد
    vector(0,0,0): هي موقع الطائرة داخل المحرك وانا وضعت x=0و y=0و z=0

    f15 : هي الاكشن الي صممناها لهدا المودل وهي المسؤولة عن تحركاته والفانكشنات المتعلقة به


    نضغط save تم ندهب لملف game.c ونضغط ايضا save بعدها نضغط على المتلت الازرق الموجود في الاعلى.

    وهكدا نكون انتهينا من اهم خطوة

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

    ندهب لدالة main واسفل ent_create نضع :

    كود:
    ent_createlayer("skysunset+6.tga", SKY | CUBE | VISIBLE, 0);
    لاحضو الفرق بين ent_create و ent_createlayer فالاولى مخصصة لخلق موديلات والتانية مخصصة لوضع سبرايتات غير ملموسة متل السماء وغيرها

    ناتي لشرح السطر

    skysunset+6.tga : هدا اسم صورة السماء والتي قمت بوضعها داخل مجلد File الدي رفعته

    SKY | CUBE | VISIBLE : هي مجرد flags وهي ضرورية وتحدد طريقة عرض السماء متلا انا وضعت sky بمعنى ان الشيء الدي وضعته اريده ان يكون سماء و CUBE بمعنى ان شكلها مكعب VISIBLE بمعنى انني اريها ان تضهر حالما ادخل للعبة



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


    كود:
    
    function move_plane(ENTITY*plane,key_up,key_down,key_right,key_left ,speed_key)
    {
    
    
    
    
    }
    شرح ما بين قوسين :
    اي فانكشن يمكن تضع بجانبهااقواس وداخل هده الاقواس يمكن تضع تعليمات يا اما تستطيع تحكم في التعليمات الاساسية داخل هده الفانكشن او تعرفها بكائنات والكتيير وستفهمون في الاخير لمادا وضعت تعليمات داخل قوسين

    ENTITY* plane هو تعريف بان هناك كائن اسمه plane

    key_up,key_down,key_right,key_left هي مجرد تعليمات ساضع مكانها اسم الزر الاصلي ويمكن تسميها متلا هدا ادا كان الانجن لديك يقبل العربية ( مفتاح_اعلى , مفتاح_اسفل , مفتاح_يمين , مفتاح_يسار) وهكدا
    المهم هده تعليمات فقط وستغير لاحقا

    ننشا متغير لسرعة خارج الفانكشن و ناتي الى داخل الفانكشن ونبدا بانشاء شروط لتحكم بالمتغير ونكتب :
    كود:
    	var speed_airplane = 0;
    
    function move_plane(ENTITY*plane,key_up,key_down,key_right,key_left,speed_key)
    {
    
    
    	if(speed_key == 1)
    	{
    		if(speed_airplane < 40   )
    		{
    			speed_airplane += 5;
    		}
    	}
    	else
    	{
    		if(speed_airplane > 0   )
    		{
    			speed_airplane -= 5;
    		}		
    	}
    }

    ناتي الان لتفسير الاسطر


    var speed_airplane = 0; : هو متغير لسرعة انشئناه ويمكن تسميه ما تشاء وانا هنا سميته ب speed_airplane وانا جعلته يساوي 0


    if(speed_key == 1)
    {
    if(speed_airplane < 40 )
    {
    speed_airplane += 5;
    }
    }
    else
    {
    if(speed_airplane > 0 )
    {
    speed_airplane -= 5;
    }
    }
    }

    هدا الكود يعني ادا ضغطت على زر السرعة فستزداد سرعة الطائرة لتصل الى 40 والا ادا لم اضغط فستنزل السرعة الى الصفر



    ناتي الان الى دوران المودل بعدها نربط دورانه باتجاها داخل المحرك بمعنى اننا سنخلق خدعة فيرى الاعب انه عندما يضغط على زر يمين تميل الطائرة وتدور نحو اليمين لاكن في الحقيقة الميلان هو مجرد خدعة تخدع بها الاعب ونكتب داخل الفانكشن move_plane ,و اسفل كود الي كتبناه :

    كود:
    
    function move_plane(ENTITY*plane,key_up,key_down,key_right,key_left,speed_key)
    {
    
    	var speed_airplane = 0;
    	if(speed_key == 1)
    	{
    		if(speed_airplane < 40   )
    		{
    			speed_airplane += 5;
    		}
    	}
    	else
    	{
    		if(speed_airplane > 0   )
    		{
    			speed_airplane -= 5;
    		}		
    	}
    	
    	
    	
    	if(key_right == 1)
    	{
    		if(plane.roll < 70)
    		{
    			plane.roll += 5 ;
    		}
    	}
    	if(key_left == 1)
    	{
    		if(plane.roll > -70)
    		{
    			plane.roll -= 5 ;
    		}
    	}
    	if((key_left == 0)&&(key_right == 0))
    	{
    		if(plane.roll > -70)
    		{
    			plane.roll -= 5 ;
    		}
    
    	}
    
    	if(key_up == 1)
    	{
    		if(plane.tilt<70)
    		{
    			plane.tilt += 1;
    		}
    	}
    	if(key_down == 1)
    	{
    		if(plane.tilt>-70)
    		{
    			plane.tilt -= 1;
    		}
    	}	
    	
    	if((key_down == 0)&&(key_up == 0))
    	{
    		if(plane.tilt>0)
    		{
    			plane.tilt -= 0.2;
    		}
    		if(plane.tilt<0)
    		{
    			plane.tilt += 0.2;
    		}
    	}
    	plane.pan -= plane.roll *0.1;
    
    }

    plane.pan -= plane.roll *0.1; : في هدا السطر انا عملت علاقة لدوران المودل باتجاهه يعني دوران pan بدوران roll اللخاص بالمودل

    الان ناتي لاخر الدالة ونضع كود لنجعل الطائرة قابلة لتحرك

    كود:
    function move_plane(ENTITY*plane,key_up,key_down,key_right,key_left,speed_key)
    {
    
    	var speed_airplane = 0;
    	if(speed_key == 1)
    	{
    		if(speed_airplane < 40   )
    		{
    			speed_airplane += 5;
    		}
    	}
    	else
    	{
    		if(speed_airplane > 0   )
    		{
    			speed_airplane -= 5;
    		}		
    	}
    	
    	
    	
    	if(key_right == 1)
    	{
    		if(plane.roll < 70)
    		{
    			plane.roll += 5 ;
    		}
    	}
    	if(key_left == 1)
    	{
    		if(plane.roll > -70)
    		{
    			plane.roll -= 5 ;
    		}
    	}
    	if((key_left == 0)&&(key_right == 0))
    	{
    		if(plane.roll > -70)
    		{
    			plane.roll -= 5 ;
    		}
    	if(key_up == 1)
    	{
    		if(plane.tilt<70)
    		{
    			plane.tilt += 1;
    		}
    	}
    	if(key_down == 1)
    	{
    		if(plane.tilt>-70)
    		{
    			plane.tilt -= 1;
    		}
    	}	
    	
    	if((key_down == 0)&&(key_up == 0))
    	{
    		if(plane.tilt>0)
    		{
    			plane.tilt -= 0.2;
    		}
    		if(plane.tilt<0)
    		{
    			plane.tilt += 0.2;
    		}
    	}
    	}
    
    	plane.pan -= plane.roll *0.1;
    	c_move(plane,vector(speed_airplane,0,0),nullvector,IGNORE_ME|IGNORE_PASSABLE);
    }

    شرح السطر :
    كود:
    c_move(plane,vector(speed_airplane,0,0),nullvector,IGNORE_ME|IGNORE_PASSABLE);
    plane : هو اسم الكائن الدي سيتحرك
    vector : خاص بالاتجاهات xyz وادا لاحضتم اني واضع في x ألخاصة بالفكتور speed_airplane وهو المتغير اللدي وضعناه في الاعلى وتحكمنا في سرعته الان نعمل له علاقة بالكائن لكي يكون هو مصدر سرعته.
    IGNORE_ME : بمعنى ان التحرك سيتجاهل الكائن نفسه لكي لايكون الكائن معرقل نفسه من الحركة
    IGNORE_PASSABLE : بمعنى ان الكائن يتجاهل اي كائن اخر شفاف متل المياه و ......


    والان انتهينا من دالة التحريك ورغم بساطتها الا انها تفي بالغرض حاليا
    وفي الاخير بقي علينا فقط ربط الدالة بالاكشن الخاصة بالكائن وسنتبع هده الطريقة :

    ندهب للاكشن الي صممناه من قبل f15
    ونضع داخل حلقة التكرار الكود :move_plane(me,key_cuu,key_cud,key_cur,key_cul,key_x);

    وستكون الاكشن على الشكل التالي :

    كود:
    action f15()
    {
    	while(1)
    	{
    		move_plane(me,key_cuu,key_cud,key_cur,key_cul,key_x);
    		wait(1);
    	}
    }

    شرح السطر

    me ويعني انا وبالتالي اسم plane الموجود داخل فانكشن move_plane سيتبدل الى me ومعناه ان كل التعليمات صارت ملك للاكشن f15 .


    key_cuu,key_cud,key_cur,key_cul,key_x هي اسماء الازرار الكيبورد الحقيقية ويمكنك تبدلها لاي زر تريده وعلى حسب رغبتك


    يبقى الان كود الكمرا فقط

    وانا ساضعه مباشرة واشرحه

    كود:
    
    VECTOR cam_set;
    VECTOR offset;
    VECTOR camera_to;
    
    
    function handle_camera(ENTITY* ent_model,model_distance,model_y,hight)
    {
    
    
    	camera.pan = ent_model.pan;  في هدا السطر انا جعلت اتجاه الكمرا هو اتحاه ent_model
    
    	
    	
    	
    	vec_set(offset.x,vector(-model_distance,model_y,hight)); هنا في هدا سطر وضعت التعليمات الخاصة ب اتجاه offset 
    	vec_rotate(offset.x,camera.pan); ,هنا كدالك جعلت اتجاه ال offset هو اتجاه الكمرا
    	vec_add(offset.x,ent_model.x); هنا الصقت ال offset بمحور x الخاص ب ent_model
    	cam_set.x = offset.x + fcos((camera.pan),fcos(camera.tilt,-100)); هنا حددت بعد ال cam_set عن محور x لل offset 
    	cam_set.y = offset.y + fsin((camera.pan),fcos(camera.tilt,-100)); وكدالك هنا بالنسبة للمحور y 
    	cam_set.z = offset.z + fsin(camera.tilt,-100);	وكدالك هنا بالنسبة للمحور z 
    
    
    
    
    
    	vec_lerp(camera.x,camera.x,cam_set.x,0.5);  هدا الكود خاص بتاخير لحاق الاوبجكت باخر وانا جعلت الكمرا تتاخر باللحاق ب cam_set
    
    الان جاء وقت وضع الكمرا ترى في المودل فقط 
    	vec_set (camera_to.x, vector(my.x,my.y,my.z+10));  
    	vec_sub (camera_to.x, camera.x);
    	vec_to_angle (camera.pan,vector(camera_to.x,camera_to.y,camera_to.z));
    
    	camera.arc= 90; كود خاص ب الارك
    
    	//////////////////////////////////////////////////
    
    }
    ادا اي حد فيكم لم يفهم شيء يبقى يسال وانا ساجاوبه

    المهم الان انتهينا من كود الكمرا وصار فينا نضعه في حلقة تكرار الاكشن f15
    وفي الاخير ستكون اكشن f15 هكدا :


    كود:
    action f15()
    {
    	while(1)
    	{
    		move_plane(me,key_cuu,key_cud,key_cur,key_cul,key_x);
    		handle_camera(me,-50,0,10);
    		wait(1);
    	}
    }

    النتيجة نهائية مع وضع بعض المؤترات



    متاسف على جودة الفديو فحجمه الاصلي 80 ميجا وانا قللته حتى صار 2 ميجا

    رابط التجربة لمن يريد تجريبها
    http://www.mediafire.com/?4jnfnk9cy9e07gy
    المهم اللعبة يمكنكم تجربوها وتضعو موديل لطائرة احسن من الطائرة المستعملة لكي تضهر اللعبة بجودة اكبر



    نصل الان الى طريقة اضافة شيدرز للعبة للحصول على نفس الجرافك الي في التجربة

    اولا سندهب للملف الاول الي صممناه game.c ونضيف اسفل #include <acknex.h> السطر:
    كود:
    #include <mtlView.c>
    بعد اضافة هدا الكود الان صار فينا نضيف شيدر كيف ما نشاء وسادرج لائحة لشيدرز المتوفرة كما انه يمكن صنع شيدرز جديدة بانفسكم

    اضغط على الصورة لعرض أكبر. 

الإسم:	shaders.jpg 
مشاهدات:	1 
الحجم:	120.8 كيلوبايت 
الهوية:	3303329

    و انا ساختار شيدر mtl_desaturate ولتطبيق ها شيدر على الكمرا نقوم بعمل الاتي :

    ندهب لداخل فانكشن main تم اسفلها نضع كود تالي:

    كود:
    pp_set(camera,mtl_desaturate);
    وبالتالي طبقنا الشيدر على الكمرا ولاضافة شيدر جديد وانا اختار mtl_bleach نقوم بوضع الكود التالي اسفل pp_set:

    كود:
    pp_add (mtl_bleach);

    وبهده الطريقة يمكنكم الحصول على افضل جرافك بالمزج فقط في شيدرز














    التعديل الأخير تم بواسطة amineGS; 22 / 07 / 2012, 04:06 PM.

  • #2
    اللعبة عالية بالدقة وكانها طائره حقيقية

    هذه اول ورشة لجيم ستديو اتمنى ان تكون الورشة تعرض لنا اكواد مع صور للبرنامج وفيدو\

    اجمل ما في قيم ستديو ان اغلب اللذين يعملون عليه يكونون محترفين

    متابعين الورشة وتمنياتي بالتوفيق
    اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
    وتفتك باعدائك اعداء الدين


    تعليق


    • #3
      عندك حق فاللعبة عالية في الدقة لاكن ان شاء الله في هده الورشة سنحاول نعمل كل ما بمقدورنا عمله لنصل نفس الجودة
      لاكن في الاول لازم يكون عدد المنضمين اكبر من 4 لتعم الفائدة

      تعليق


      • #4
        انا اتابع معك
        اجمل ما في قيم ستديو ان اغلب اللذين يعملون عليه يكونون محترفين
        لان هذا مايتطلبه

        تعليق


        • #5
          انا متابعك
          UDK-Team

          UNREAL ENGINE 4

          تعليق


          • #6
            المشاركة الأصلية بواسطة nadir02 مشاهدة المشاركة
            انا اتابع معك

            المشاركة الأصلية بواسطة maya.help مشاهدة المشاركة
            انا متابعك
            هدا جيد والورشة ان شاء الله سابدا ها اليوم بالليل

            تعليق


            • #7
              متابع
              {قل لي وسوف أنسى, أرني ولعلي أتذكر, أشركني وسوف أفهم}

              تعليق


              • #8
                انا الان بدات بوضع الورشة وستكون جميع الاضافات التي ساضعها بالاعلى لكي يبقى الموضوع جميلا وواضحا وادا كان اي استفسار فارجو وضعه .

                تعليق


                • #9
                  ماشاء الله كنت رح استخدم الجيم ستديو في مشروعي ولكن اخترنا اليونتي بعد تفكير طووويل ....
                  لكن حلو الحين رح نشوف ورشة ومنكم نستفيد إن شاء الله ...

                  متااابعة ...
                  يَ ربْ علمنيَ كيف آعفوَولآ تعلمنَي كيفَ آنتقمْ ,,
                  يَ رب آعطنيْ [ آبتسآمهَ ] لآ تغيبَ
                  وحزنَ لآ يدومَ ,,
                  آللهمَ آمييينْ
                  .

                  .


                  اللهم إني استودعتك سوريا وأهلها, أمنها وأمانها, ليلها ونهارها, أرضها وسماءها فأحفظها ربي ,,,
                  اللهم إنا نستودعك إخواننا في سوريا رجالهم ونسائهم وأطفالهم يامن لاتضيع عنده الودائع ,,,
                  سامحيني يا سوريا هذأ أقل مايمكنني فعله ,,,


                  تعليق


                  • #10
                    المشاركة الأصلية بواسطة غـــروب مشاهدة المشاركة
                    ماشاء الله كنت رح استخدم الجيم ستديو في مشروعي ولكن اخترنا اليونتي بعد تفكير طووويل ....
                    لكن حلو الحين رح نشوف ورشة ومنكم نستفيد إن شاء الله ...

                    متااابعة ...
                    جميل وانشاء الله تستفيدين من الورشة والغرض منها هو فتح ابواب البرمجة للاعضاء بلغة سي

                    تعليق


                    • #11
                      وانا منتضر كل من الاعضاء ادا ارادو ان يجربو البرمجة ويضعو اقتراحاته والمشاكل ادا واجهوها وانشاء الله انا بالخدمة فهده اول ورشة لي

                      تعليق


                      • #12
                        شغل جميل والله

                        بس هوا ينفع ابرمج بالسى شارب بدل السى
                        -:| My Games |:-
                        AfterEarth Online SOON

                        -:| Contact Us |:-
                        Facebook Page :- NTStudio

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة NTSoft مشاهدة المشاركة
                          شغل جميل والله

                          بس هوا ينفع ابرمج بالسى شارب بدل السى
                          صحيح وويمكنك البحت عنه هنا
                          http://www.conitec.net/english/gstudio/download.php

                          تعليق


                          • #14
                            واااو جميل جدا اخي ما توقعت بعد كل الاسطر البرمجيه يكون الجرافك بهذا الجمال وخصوصا التحكم
                            موضوع مفيد ننتظر الجديد
                            مصمم مبدع + مبرمج ذكي = مصمم ألعاب متميز

                            *<( سبحان الله و بحمده ................. سبحان الله العظيم )>*

                            GameEnvironmentDesigner

                            || مشروع "مهمة آلي " ||

                            تعليق


                            • #15
                              مشاء الله النتيجة غاية في الروعة ومحترف مشاء الله عليك

                              الغريب انني لم الاحظ عند الدوران ان الطائره دائما تبقى في منتصف رؤيا الكاميرا

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

                              اتسال اذا قمت بتقليد التجربة هل ستكون نفس النتيجة .... وهل سوف تستهلك اقل جهد او اكثر ...؟
                              اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
                              وتفتك باعدائك اعداء الدين


                              تعليق

                              يعمل...
                              X