المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [درس]عمل لعبة 3Dعلى الجيم ميكر



AMB0
24-06-2008, 05:01 PM
بسم الله الرحمن الرحيم




]درس[عمل لعبة 3Dعلى الجيم ميكر




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




المهم......نبدأ:-



1-أدرج سبعة sprites ويجب أن يكونTransparent غير مفعل



وأيضن يجب ألا يكون في أي سبرايت صح في مربعة



إلا السبرايت الأول sprite1





http://www6.0zz0.com/2008/06/24/13/792006039.jpg










أ-السبرايت الأول:

الاسم: sprite1

اللون:أصفر

الحجم:(W:32) (H:32)

Bonding box:Manual





ب-السبرايت التاني:

الاسم: spr_corners_1

اللون:أسود

الحجم:(W:800) (H:600)

Bonding box:Automatic



ج-السبرايت الثالث:

الاسم: spr_player

اللون:أسود

الحجم:(W:6) (H:6)

Bonding box:Automatic





د-السبرايت الرابع:

الاسم: spr_wall_16

اللون:أسود

الحجم:(W:16) (H:16)

Bonding box:Automatic





س-السبرايت الخامس:

الاسم: spr_wall_8

اللون:أسود

الحجم:(W:8) (H:8)

Bonding box:Automatic





ص-السبرايت السادس:

الاسم: spr_wall_hs

اللون:أسود

الحجم:(W:12) (H:4)

Bonding box:full image





و-السبرايت السابع:

الاسم: spr_dot

اللون:أخضر غامق(مثل اللون الأصلي)

الحجم:(W:1) (H:1)

Bonding box:Automatic
2-أضيف الصوت




أنا عندي صوت




تحميل (http://www.zshare.net/download/14132116f3f4d0f4/)




يجب أن يكون الصوت على اسم النغمة




3-أضف Background



أنا عندي




تحميل (http://www.zshare.net/download/14132084c348e704/)




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

AMB0
24-06-2008, 05:06 PM
4-أضف إسكربت



أ-الاسم: scr_compare_angles

النص:




//angle_dist(ang1,ang2);


return ((((argument0 - argument1) mod 360) + 540) mod 360) - 180;






يحدد مساحة السطح ورؤية الكميرا



ب-الاسم: createFromObj

النص:




// MOSAIC Light 3D OBJ IMPORTER


// (c) 2006. Zoltan Percsich. All Rights Reserved.


// Don't edit this script





filename=argument0;


flipnormals = 1;


if (argument1>0) flipnormals=-1;


vertex_list1=ds_list_create();ds_list_clear(vertex_list1);ds_list_add(vertex_list1,0);


vertex_list2=ds_list_create();ds_list_clear(vertex_list2);ds_list_add(vertex_list2,0);


vertex_list3=ds_list_create();ds_list_clear(vertex_list3);ds_list_add(vertex_list3,0);


normal_list1=ds_list_create();ds_list_clear(normal_list1);ds_list_add(normal_list1,0);


normal_list2=ds_list_create();ds_list_clear(normal_list2);ds_list_add(normal_list2,0);


normal_list3=ds_list_create();ds_list_clear(normal_list3);ds_list_add(normal_list3,0);


texture_list1=ds_list_create();ds_list_clear(texture_list1);ds_list_add(texture_list1,0);


texture_list2=ds_list_create();ds_list_clear(texture_list2);ds_list_add(texture_list2,0);


faces_list=ds_list_create();ds_list_clear(faces_list);


fp=file_text_open_read(filename);





for (i=0;file_text_eof(fp)==false;i+=1) {





row=file_text_read_string(fp);row=string_replace_all(row," "," ");





if (string_char_at(row,1)=="v" && string_char_at(row,2)==" ") {


row=string_delete(row,1,string_pos(" ",row));


vx=real(string_copy(row,1,string_pos(" ",row)));


row=string_delete(row,1,string_pos(" ",row));


vy=real(string_copy(row,1,string_pos(" ",row)));


row=string_delete(row,1,string_pos(" ",row));


vz=real(string_copy(row,1,string_length(row)));


ds_list_add(vertex_list1,vx);


ds_list_add(vertex_list2,vy);


ds_list_add(vertex_list3,vz);


}





if (string_char_at(row,1)=="v" && string_char_at(row,2)=="n") {


row=string_delete(row,1,string_pos(" ",row));


nx=real(string_copy(row,1,string_pos(" ",row)));


row=string_delete(row,1,string_pos(" ",row));


ny=real(string_copy(row,1,string_pos(" ",row)));


row=string_delete(row,1,string_pos(" ",row));


nz=real(string_copy(row,1,string_length(row)));


ds_list_add(normal_list1,nx);


ds_list_add(normal_list2,ny);


ds_list_add(normal_list3,nz);


}





if (string_char_at(row,1)=="v" && string_char_at(row,2)=="t") {


row=string_delete(row,1,string_pos(" ",row));


tx=real(string_copy(row,1,string_pos(" ",row)));


row=string_delete(row,1,string_pos(" ",row));


ty=real(string_copy(row,1,string_length(row)));


ds_list_add(texture_list1,tx);


ds_list_add(texture_list2,ty);


}





if (string_char_at(row,1)=="f" && string_char_at(row,2)==" ") {


row=string_replace_all(row," "," ");


row=string_delete(row,1,string_pos(" ",row));


if (string_char_at(row,string_length(row))==" ") row=string_copy(row,0,string_length(row)-1);


face_num=string_count(" ",row);


face_division=1;


temp_faces[0]=0;





for (fc=0;fc<face_num;fc+=1) {


f=string_copy(row,1,string_pos(" ",row));


row=string_delete(row,1,string_pos(" ",row));


temp_faces[face_division]=f;


face_division+=1;


}





f=string_copy(row,1,string_length(row));temp_faces[face_division]=f;


if (face_division==3) {


f1=temp_faces[2];


f2=temp_faces[3];


f3=temp_faces[1];


ds_list_add(faces_list,f1);


ds_list_add(faces_list,f2);


ds_list_add(faces_list,f3);


} else {


f1=temp_faces[2];


f2=temp_faces[3];


f3=temp_faces[1];


ds_list_add(faces_list,f1);


ds_list_add(faces_list,f2);


ds_list_add(faces_list,f3);


for (t=0;t<face_division-3;t+=1) {


f1=temp_faces[4+t];


f2=temp_faces[1];


f3=temp_faces[3+t];


ds_list_add(faces_list,f1);


ds_list_add(faces_list,f2);


ds_list_add(faces_list,f3);


}


}


}





file_text_readln(fp);


}


file_text_close(fp);





tm=d3d_model_create();


tsn=0;


d3d_model_primitive_begin(tm,pr_trianglelist);





for (fc=0;fc<ds_list_size(faces_list);fc+=1) {





sub_face=ds_list_find_value(faces_list,fc);





if (string_count("/",sub_face)==0) {


f_index=sub_face;


t_index=-1;


n_index=-1;


}





if (string_count("/",sub_face)==1) {


f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);


sub_face=string_delete(sub_face,1,string_pos("/",sub_face));


t_index=string_copy(sub_face,1,string_length(sub_face));


n_index=-1;


}





if (string_count("/",sub_face)==2 && string_count("//",sub_face)==0) {


f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);


sub_face= string_delete(sub_face,1,string_pos("/",sub_face));


t_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);


sub_face= string_delete(sub_face,1,string_pos("/",sub_face));


n_index=string_copy(sub_face,1,string_length(sub_face));


}





if (string_count("/",sub_face)==2 && string_count("//",sub_face)==1) {


sub_face=string_replace(sub_face,"//","/");


f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);


sub_face= string_delete(sub_face,1,string_pos("/",sub_face));


t_index=-1;


n_index=string_copy(sub_face,1,string_length(sub_face));


}





vx=ds_list_find_value(vertex_list1,floor(real(f_index)));


vy=ds_list_find_value(vertex_list2,floor(real(f_index)));


vz=ds_list_find_value(vertex_list3,floor(real(f_index)));





if (floor(real(n_index))!=-1 && ds_list_size(normal_list1)>=1) {


nx=flipnormals*ds_list_find_value(normal_list1,floor(real(n_index)));


ny=flipnormals*ds_list_find_value(normal_list2,floor(real(n_index)));


nz=flipnormals*ds_list_find_value(normal_list3,floor(real(n_index)));


} else {


nx=0;


ny=0;


nz=0;


}





if (floor(real(t_index))!=-1 && ds_list_size(texture_list1)>=1) {


tx=ds_list_find_value(texture_list1,floor(real(t_index)));


ty=ds_list_find_value(texture_list2,floor(real(t_index)));


} else {


tx=0;


ty=0;


}





d3d_model_vertex_normal_texture(tm,vx,vy,vz,nx,ny,nz,tx,ty);





tsn+=1;


if (tsn==999) {


tsn=0;


d3d_model_primitive_end(tm);


d3d_model_primitive_begin(tm,pr_trianglelist);


}


}





d3d_model_primitive_end(tm);


return tm;





أما هذا فهو للتحكم بالأبجكت و اللاعب

AMB0
24-06-2008, 05:09 PM
ج-الاسم: build_models


النص:



global.tracer = d3d_model_create();
d3d_model_wall(global.tracer,-20,0,.5,20,0,-.5,1,1);
d3d_model_wall(global.tracer,-20,.5,0,20,-.5,0,1,1);

//create the tree model
global.tree1 = createFromObj("models/tree1.obj");
global.tree2 = createFromObj("models/tree2.obj");
global.treetex1 = background_get_texture(bg_wood);
global.treetex2 = background_get_texture(bg_tree);



كي يحدث إصتدام مع الجسم المستظم




د-الاسم: scr_find_z


النص:


var grid,temp_x,temp_y,temp_z,temp_gridx,temp_gridy,temp_offsetx,temp_offsety,temp_z1,temp_z2,temp_z3,te mp_z4;
temp_x = argument0;
temp_y = argument1;
grid = 50;

//determine which grid the instance is in
temp_gridx=floor(temp_x/grid)
temp_gridy=floor(temp_y/grid)

//determine where in the grid the instance is
temp_offsetx= temp_x-grid*temp_gridx
temp_offsety= temp_y-grid*temp_gridy

temp_z1=ds_grid_get(global.termap,temp_gridx,temp_gridy)
temp_z2=ds_grid_get(global.termap,(temp_gridx+1),temp_gridy)
temp_z3=ds_grid_get(global.termap,(temp_gridx+1),(temp_gridy+1))
temp_z4=ds_grid_get(global.termap,temp_gridx,(temp_gridy+1))

if temp_offsetx>temp_offsety {
temp_z = temp_z1-temp_offsetx*(temp_z1-temp_z2)/grid-temp_offsety*(temp_z2-temp_z3)/grid;} else {
temp_z = temp_z1-temp_offsetx*(temp_z4-temp_z3)/grid-temp_offsety*(temp_z1-temp_z4)/grid;}

return temp_z;




مهم لجعل اللاعب يلمس الأرض




س-الاسم: svplay


النص:



sound_volume(argument0,argument1);
sound_play(argument0);





يعمل عل خلق مشهد حقيقي للعبة بدمج الصوت و الحركة




ص-الاسم: svrand


النص:



var temp_snd,rand;
temp_snd = ds_list_create();
if (argument1){ds_list_add(temp_snd,argument1);}
if (argument2){ds_list_add(temp_snd,argument2);}
if (argument3){ds_list_add(temp_snd,argument3);}
if (argument4){ds_list_add(temp_snd,argument4);}
if (argument5){ds_list_add(temp_snd,argument5);}
rand = floor(random(ds_list_size(temp_snd)));
sound_volume(ds_list_find_value(temp_snd,rand),argument0);
sound_play(ds_list_find_value(temp_snd,rand));
ds_list_destroy(temp_snd);




مهم جدا لعمل أرضية اللعبة




و-الاسم: build_sky


النص:




sky_up_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_up_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_up_ID0,-1000, 1000, 1000,0,0);
d3d_model_vertex_texture(sky_up_ID0, 1000, 1000, 1000,1,0);
d3d_model_vertex_texture(sky_up_ID0,-1000,-1000, 1000,0,1);
d3d_model_vertex_texture(sky_up_ID0, 1000,-1000, 1000,1,1);
d3d_model_primitive_end(sky_up_ID0);

sky_down_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_down_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_down_ID0,-1000,-1000,-1000,0,0);
d3d_model_vertex_texture(sky_down_ID0, 1000,-1000,-1000,1,0);
d3d_model_vertex_texture(sky_down_ID0,-1000, 1000,-1000,0,1);
d3d_model_vertex_texture(sky_down_ID0, 1000, 1000,-1000,1,1);
d3d_model_primitive_end(sky_down_ID0);

sky_east_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_east_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_east_ID0, 1000,-1000, 1000,0,0);
d3d_model_vertex_texture(sky_east_ID0, 1000, 1000, 1000,1,0);
d3d_model_vertex_texture(sky_east_ID0, 1000,-1000,-1000,0,1);
d3d_model_vertex_texture(sky_east_ID0, 1000, 1000,-1000,1,1);
d3d_model_primitive_end(sky_east_ID0);

sky_west_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_west_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_west_ID0,-1000, 1000, 1000,0,0);
d3d_model_vertex_texture(sky_west_ID0,-1000,-1000, 1000,1,0);
d3d_model_vertex_texture(sky_west_ID0,-1000, 1000,-1000,0,1);
d3d_model_vertex_texture(sky_west_ID0,-1000,-1000,-1000,1,1);
d3d_model_primitive_end(sky_west_ID0);

sky_north_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_north_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_north_ID0,-1000,-1000, 1000,0,0);
d3d_model_vertex_texture(sky_north_ID0, 1000,-1000, 1000,1,0);
d3d_model_vertex_texture(sky_north_ID0,-1000,-1000,-1000,0,1);
d3d_model_vertex_texture(sky_north_ID0, 1000,-1000,-1000,1,1);
d3d_model_primitive_end(sky_north_ID0);

sky_south_ID0 = d3d_model_create();

d3d_model_primitive_begin(sky_south_ID0,pr_trianglestrip);
d3d_model_vertex_texture(sky_south_ID0, 1000,1000, 1000,0,0);
d3d_model_vertex_texture(sky_south_ID0,-1000,1000, 1000,1,0);
d3d_model_vertex_texture(sky_south_ID0, 1000,1000,-1000,0,1);
d3d_model_vertex_texture(sky_south_ID0,-1000,1000,-1000,1,1);
d3d_model_primitive_end(sky_south_ID0);




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




4-نضع الأبجكت


وهذا في الملف المرفق




5-ثم ننشىء الروم


بأي شكل بشرط أن تكون الأبجكت جميعها في الروم


لكي تتناسق الصور و الؤرسمات وحركة اللاعب




وليس هذا فقط هناك مثال على ذلك




تحميل المثال (http://www.zshare.net/download/14132333a00a2539/)




أو




الملف المرفق




يجب ن يكون لك برنامج لصنع أجسام الثلاثي الأبعاد (لصنع لعبة)


مثل




Cenima 4D


3D Max


Maya




لصنع الأشجار و السطوح كما في المثال الذي أرفقت معه بعض الأجسام




وعفوا على الطول هذا


أرجو أن يكون الدرس مفهوما


ملاحظة هامة جداً:-
سيعمل المثال مع البرنامج المرفق بكرارك



تحميل الكراك (http://www.keygen.ms/crack/99163/)

سامي.خ
24-06-2008, 07:15 PM
بارك الله فيك
الدرس هذا كثير يبحثون عنه
وخاصة ان مشكلة توريد الموديلات في الجيم ميكر إنحلت في الإصدار السابع
شكراً لك

ديمو1
24-06-2008, 09:36 PM
مشكور اخوي ولك جزيل الشكر دروس متعوبة صراحه أستمر........

اسود الرافدين
25-06-2008, 12:59 AM
ممتاز عاشت ايديك اخوي ولو الشرح مختصر جدا جدا لكن ايضا مفيد

MASO2008
25-06-2008, 04:12 PM
مشكور أخي على هذا الدرس
من زمان وانا ابحث عنة

AMB0
25-06-2008, 04:45 PM
شكرا على المرور

وهذا الدرس ينفي كلام كل من يقول أن الجيم ميكر غير قادر على صنع ألعاب الثري دي
والمثال دليل على ذلك

تحميل المثال (http://www.zshare.net/download/14132333a00a2539/)

iraqihaya
25-06-2008, 05:11 PM
مشكووور والشرح روعة

firon12
27-08-2012, 10:30 AM
تسلم يا غالى, انا عمرى مهلائى شرح احسن من كدة والمثال شغال 100%100 شكراً بجد على المجهود الرائع وكنت بطلب يريت تحتلنا شرح لصنع الأشكال ال3d وربنا يديك كمان وكمان:)