תכנות לילדים באמצעות Game Maker/אפשרויות נוספות בתלת מימד/עיצוב התלת מימד

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי


יצירת הבסיס[עריכה]

דבר ראשון, בשביל התלת מימד, נצטרך בסיס, במקרה שלנו, אובייקט הבסיס יהיה ה-מצלמה.
תיצרו אובייקט חדש, וקראו לו Obj_cam , דבר ראשון, צריך להוסיף את הפקודה שמוסיפה את התלת מימד באופן כללי.

עכשיו תורכם:

צור את התלת-מימד באופן כללי

אני מניח שהצלחתם, בכל מקרה, אם לא:

פיתרון
כתבו באירוע הCreate של האובייקט את הקוד הבא:
d3d_start();


לאחר מכן,הוסיפו לאותו הקוד את הקוד הבא:

d3d_set_hidden(true);
d3d_set_lighting(true);
d3d_light_define_direction(1,7.5,-7.5,-7,c_white);
d3d_set_culling(false);
d3d_light_enable(1,true);
texture_set_interpolation(true);
draw_set_color(c_white);

הסבר: על כמה מהדברים פה כבר למדתם, אז נדלג עליהם, בשורה השלישית, יש את מאפייני האור, אין פה הרבה מה להסביר, ראשון זה האינדקס, אין טעם לשנות למספר אחר, השלושה הבאים, הם המקום ממנו נובע האור, והחמישי, זה צבעו, שבמקרה שלנו זה Whiteלאחר מכן, מגיע האופציה של החידוד, אותה אנחנו מבטלים, לאחר מכן, יש את האור בעצמו, הנקודה הראשונה זה האינדקס, אותו לא צריך לשנות, והשניה זה אם הוא פעיל, לאחר מכן,לאחר מכן, יש את אפשרות "שרבוב" הטקסטורה שנכונה כאן, ולבסוף, את הצבע שיהיה בציור, כאן הוא לבן. עכשיו, תצרו ספרייט כלשהו (לדוגמא ריבוע) צבעו אותו והוסיפו אותו לאובייקט, צרו חדר והוסיפו לשם את האובייקט בוא נראה מה הכנו!




כל מה שאתם רואים, זה הצורה של מה שיצרתם, בלי תלת מימד.




עכשיו, ניצור אובייקט חדש, שנקרא: obj_floor_roof שבו נכין את התקרה והרצפה, הכינו את האובייקט, ולאחר נוסיף שני רקעים חדשים שישמשו בתור טקסטורות, את הטקסטורות אפשר למצוא באתרהזה אותו אתם כבר מכירים. ממנו קחו שני טקסטורות שאתם רוצים לתקרה ולרצפה, שמרו אותם בשם במקום שאליו אתם יודעים להכנס וחזרה לגיים מייקר, עכשיו, בגיים מייקר, תיצרו רקע חדש, שנקרא Floor שיהווה את הרצפה שלכם ובחרו לו אתה טקסטורה. לאחר מכן, תיצרו את ה Roof שיהיה התקרה שלכם לו תעשו את אותו הדבר, עכשיו צריך להכין את הקוד שלהם!


עכשיו תורכם:

הכן את הרצפה ואת התקרה.
פיתרון
כתבו באירוע הDraw של האובייקט את הקוד הבא:
d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(floor),24,24);
d3d_draw_floor(0,0,64,room_width,room_height,64,background_get_texture(roof),12,12);();

יופי, עכשיו נבדוק זאת!


אתם רואים רק קשקושים על כל המסך




נקודת מבט[עריכה]

זה, כמובן, כי אין לנו "נקודת מבט" עכשיו, ניצור את המצלמה, באובייקט ה obj_cam שלנו. דבר ראשון, הוסיפו לקוד שבאירוע ה Create את הקוד הבא:

pitch = 0;
z = 20;

הסבר: אנחנו שמים שני משתנים חדשים, Pitch ו Z, ה Pitch הוא משתנה שייצג את הזווית של המצלמה, ו Z ייצג את הגובה שלה, בעצם המימד השלישי.


ועכשיו, באובייקט המצלמה שלנו, נוסיף אירוע DRAW שבו נכתוב את הקוד הבא: d3d_set_projection(x,y,z,x+cos(direction*pi/180),y-sin(direction*pi/180),z-sin(pitch*pi/180),0,0,1);

הסבר: אנחנו מציבים פה מצלמה, שלושת הערכים הראשונים, הם הנקודת אורך, רוחב וגובה שלה, בעצם, מאיפה היא תתחיל ל "ראות", ושלושת הערכים שאחריהם, הם עד לאיפה היא תראה, והאחרונים הם עוד הם ה "למעלה" שלה.


עכשיו אתם כבר רואים בתלת מימד, אבל אי אפשר לעשות כלום!




תזוזה[עריכה]

עכשיו נוסיף אפשרות לזוז, נתחיל מצד שמאל. הוסיפו לאובייקט obj_cam את האירוע לחיצה על Left שם רשמו את הקוד הבא:

{
  var xn,yn;
  xn = x - sin(direction*pi/180);
  yn = y - cos(direction*pi/180);
    { x = xn; y = yn; }
}

הסבר: יש פה שתי משתנים חדשים, XN ו YN , ה XN שווה ל X פחות סינוס, וה YN שווה ל Y - COS = כוסינוס, ולאחר מכן, כתוב, X = XN ו Y=YN בעצם, הX ו ה Y שווים למשתנים החדשים, XN ו YN, שמזיזים אותך שמאלה. לאחר שהוספתם, נראה מה קורה:



עכשיו אתם יכולים גם לזוז שמאלה




עכשיו תורכם:

צור תזוזה לצד ימין.


פיתרון
כתבו באירוע הRight של האובייקט את הקוד הבא:
  var xn,yn;
  xn = x + sin(direction*pi/180);
  yn = y + cos(direction*pi/180);
    { x = xn; y = yn;



הסבר: עשינו את אותו הדבר כמו בצד שמאל, רק שהפעם, עשינו את זה חיובי ( פלוס ) במקום מינוס.


עכשיו תורכם:

עשה התקדמות קדימה ואחורה.


פיתרון

{{{2}}}



עכשיו אתם יכולים לזוז בחופשיות, אבל בכל זאת, אי אפשר לשנות זווית.




זווית[עריכה]

טוב, אז עכשיו, אם תרצו לשנות זווית, כך שתושפע ע"י העכבר, צרו אירוע Step ב אובייקט obj_cam , ובו רשמו את הקוד הבא:

direction -= (display_mouse_get_x() -display_get_width()/2)/10;
pitch += (display_mouse_get_y() -display_get_height()/2)/10;
pitch = max(min(pitch,100),-100);
display_mouse_set(display_get_width()/2,display_get_height()/2);

הסבר: בשורה הראשונה יש את הזווית, ששווה לחיסור מיקום העכבר ב X פחות רוחב- כדי שיחשב את הכיוון נכון. החדר חלקי 2 עם הכל חלקי 10 (שלא יזוז מהר מדי), ובשורה שאחרי, יש את ה Pitch שבעצם יהיה הזווית כלפי מעלה, שווה לחיבור הY של העכבר פחות גובה החדר, כדי למדוד את הזווית נכון, עם החילוק, כדי להאט את המהירות. שורה אחרי זה, יש את המקסימום זווית והמינימום, ולבסוף סוף המיקום של העכבר.


עכשיו נבדוק מה עשינו!



עכשיו, בעזרת העכבר, אפשר לשנות את הזווית בחופשיות!




אובייקטים תלת מימדים[עריכה]

עכשיו אפשר לזוז בחופשיות, אבל עדיין, קצת מפריע שאפשר לעבור את השטח שלנו בקלות, כדאי לחסום אותו בקיר, כדי להכין קיר, בוא נתחיל ביצירת הספרייט שייצג אותו, עדיף שיהיה בגודל 32*32 או 16*16 שבו יש ריבוע, לאחר מכן, הכינו אובייקט שיקרא כך: obj_wall. שנו את הספרייט שלו לספרייט שהכנתם. בוא נשנה את הקיר למודל תלת מימדי, צרו אירוע Draw באובייקט החדש, ובו כתבו:

d3d_set_lighting(false)

d3d_draw_block(x+16,y+16,32,x,y,0,wall,1,1)
d3d_set_lighting(true)

הסבר: בשורה הראשונה כתוב, על ה אור של ה3D False , כי אם יהיה כתוב TRUE בהתחלה אז כמעט ולא יראו את הקיר, אחרי זה כתוב את מה שנלמד עליו כל-כך הרבה, זהו המידול, כאן אמנם לא מתייחסים אליו כמודל, אבל רק בגלל הטקסטורות, טוב, אז איך מכינים אחד? דבר ראשון יש לכתוב את הפקודה, D3D_DRAW_ עכשיו אפשר לכתוב כל מיני אפשרויות, במקרה שלנו זה BLOCK .עכשיו לנקודות, הנקודה הראשונה היא נקודה שנמצאת בצד האובייקט, בעצם במיקום שלו על הרצפה, ה Y הוא הקו המקביל שלו, גם כן, על הרצפה, לאחר מכן יש Z שהוא הגובה, כן זה מייצג את הנקודה הגבוהה שבבלוק, ואז יש את הX הראשוני, שממנו מתחיל הציור, הY הראשוני, ו ה Z הראשוני, אחרי זה יש את הטקסטורה, אותה תוכלו למצוא באתר שנתתי קודם לכן, שימו אותה בתור רקע, וקראו לרקע WALL בשני הנקודות האחורונות אין טעם לגעת, כאן לדוגמא, כתוב בנקודה הראשונה X+16 כדי ששם יסתיים האובייקט- 16 פיקסלים אחרי הX שבו הוא ממוקם, אחרי זה זה נכון גם ל Y, ב Z יש את הגבוה שאליו זה יגיע - במקרה שלנו - 32 , וכל השאר הם הנקודות התחיליות. בשורה הבאה, כתוב שוב פעם SET LIGHTING אך הפעם זה TRUE כדי שהאור כן יפעל על שאר החדר.עכשיו לכו לאובייקט OBJ_CAM והוסיפו לו אירוע התנגשות עם הקיר, עכשיו כתבו שם את הקוד הבא:

x=xprevious;

y=yprevious;

הסבר: ה X שווה ל X הקודם- לפני שנגע בקיר, וכך גם הY, כך שלא תוכלו לעבור דרך הקיר והוא יעצור אתכם!


אתגר:

במשחק FIRST PERSON SHOOTER שנה את הקירות לאובייקטים מהסוג הזה!


מקמו את הקירות בצורה שאתם רוצים, ובדקו את המשחק! 



אתם יכולים לראות קירות עם הטקסטורה ולא יכולים לעבור דרכם!




אובייקטים תלת מימדים אחרים ותזוזתם[עריכה]

עכשיו הכנו קירות, תקרה ורצפה- בקיצור ממש חדר! אבל החדר עדיין קצת ריק, בוא נוסיף לו מעט דברים. בוא נתחיל בחרוט, כדי להוסיף חרוט, דבר ראשון צריך טקסטורה, הפעם לא כל כך חשוב הטקסטורה, אתם יכולים ליצור רקע חדש, ולצבוע אותו בצבע כלשהו. תנו לו את השם : COLOR. עכשיו ניצור את החרוט, תתחילו ביצירת אובייקט חדש בשם : CONE שיהיה החרוט שלנו, עכשיו הוסיפו לו אירוע DRAW, ובתוכו תשימו את הקוד הבא:

d3d_transform_set_identity()
d3d_transform_add_rotation_z(direction-90)
d3d_transform_add_translation(x,y,0)
d3d_draw_cone(-10,-10,0,10,10,0+20,background_get_texture(color),1,1,1,50)
d3d_transform_set_identity()

הסבר: על השורה הראשונה כבר למדתם, בשורה השנייה משנה לזה את הזווית. השורה השלישית מראה את הגובה והמיקום, בעצם ה Z מייצג את הגובה שממנו זה יתחיל, ועכשיו, לבסוף יש את השורה עם ציור החרוט בו יש את הנקודות הבאות: X1 - הנקודה הראשונה, כאן יש -10 זה המקום שבו יהיה החרוט. Y1 - עוד חלק מהמיקום של החרוט. Z1 - הגובה שממנו יתחיל החרוט X2 - רוחב החרוט (ביחס ל X1) Y2 - כנ"ל Z2 - הגובה הסופי TEX_ID - הטקסטורה שלו. על כל השאר אין צורך בהסבר כרגע.

הציבו את החרוט במקום כלשהו, ונסו את המשחק!



אתם רואים את החרוט!




הצלחנו לגרום לזה שיהיה פה חרוט, אבל בכל זאת, הוא עדיין די משעממם. נוכל להוסיף עניין למשחק, אם נגרום לו לקפוץ! דבר ראשון, כדי שיקפוץ, נצטרך שישנה את שני ה Z שלו ביחד, ויגדיל אותם! אז דבר ראשון נצטרך ליצור שני משתנים: Z2 ו Z אותם אפשר ליצור ב CREATE של האובייקט. עכשיו נצטרך לתת להם ערכים שיתאימו לחרוט שלנו, ה Z2 יהיה בשביל החרוט, כשהוא עצמו שווה ל0 (Z1 בחרוט שלנו) וגם ל עשרים, אז נשנה את הקוד שב Draw לקוד הבא:


d3d_transform_set_identity()
d3d_transform_add_rotation_z(direction-90)
d3d_transform_add_translation(x,y,0)
d3d_draw_cone(-10,-10''',Z2''',10,10,'''Z2+20''',background_get_texture(color),1,1,1,50)
d3d_transform_set_identity()

עכשיו, יש לנו את אותו המשולש, רק עם משתנים במקום Z, אבל עכשיו עדיין צריך לשנות את הגובה התחילי שלו שיהיה יכול לקפוץ, לכך נועד המשתנה Z שייצג אותו, נעשה את המשתנה הזה 0. נעשה את הקוד שעשינו ככה:


d3d_transform_set_identity()
d3d_transform_add_rotation_z(direction-90)
d3d_transform_add_translation(x,y''',Z)'''
d3d_draw_cone(-10,-10''',Z2''',10,10,'''Z2+20''',background_get_texture(color),1,1,1,50)
d3d_transform_set_identity()

עכשיו נצטרך גם לגרום לו לקפוץ, איך נעשה זאת? פשוט מאד, ע"י משתנה חדש, שיקרה ZUP ויבדוק כמה ה Z2 גדול וככה יגדיל או יקטין אותו, הוסיפו לאירוע הCREATE משתנה חדש שנקרא ZUP עם הערך 1, ואז הוסיפו ב Step את הקוד הבא:

if zup = 1
{
z2 += 0.4
}
if zup = 0
{
z2 -= 0.4
}
if z2 > 10
zup = 0
if z2 < 0
zup = 1

ואז את זה:

הסבר:
כתבנו שאם כתוב במשתנה ZUP -1 אז זה עולה, וכשהוא שווה ל 0 אז ה Z2 יורד, ואז עשינו שאם Z2 יהיה שווה יותר מ10, אז ה ZUP ירד - יהיה שווה ל 0, וכאשר Z2 קטן מ 0, אז הZUP חוזר לעלות, וחוזר חלילה.



המשולש קופץ :D




כל הכבוד! הכנתם את הפרק הראשון![עריכה]

עוד מעט יגיע הפרק השני- משחק מגוף שלישי!
הורדה של הפרק:
להורדה לחץ כאן!