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

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

תבנית:Game Maker/Game Maker 3D

מבט מגוף שלישי[עריכה]

הקדמה[עריכה]

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


בנייה ראשונית של המשחק[עריכה]

אז כמובן, כדי להתחיל לבנות את המשחק נצטרך דברים בסיסים אז דבר ראשון, בוא נראה מה אנחנו צריכים:

  1. ספרייט פשוט, שייצג את האובייקט שלנו.
  2. אובייקט שבו יהיה CREATE עם התחלת התלת מימד שיקרא PLAYER

וזהו בינתיים:

עכשיו תורכם:

הכן את הרשימה שהופיעה כאן

למי שלא הצליח או כן הצליח, מומלץ להכנס לפתרון:

פיתרון

הכינו ספרייט פשוט כלשהו, תתנו אותו לאובייקט שתכינו שיקרא PLAYER, ואז כתבו באירוע ה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);
 d3d_set_fog(true,c_white,100,1000);

כל הכבוד, הכנתם את זה, עכשיו מגיע הקטע המסובך:

גוף שלישי[עריכה]

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

  zlevel = -15;
  zspeed = 0;
  direction = direction + 90;
  x1 = x;
  x2 = x;
  y1 = y;
  y2 = y;
  z1 = zlevel;
  z2 = zlevel;
  z=0
  camdir=0
  made=0
  change_x=(0)
  change_y=(0)
  change_z=(0)


  canwalk = 1
zdir=0;

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

עכשיו תורכם:

צור טקסטורה של רצפה שתקרא FLOOR וטקסטורה של צבע כלשהו, שתקרא COLOR
אחרי זה נלך ל DRAW של האובייקט ונוסיף לשם את הקוד הבא:
{
   xf=player.x-sin(degtorad(-player.direction+90+camdir))*96
   yf=player.y+cos(degtorad(-player.direction+90+camdir))*96
   zf=player.zlevel+64
   xt=player.x
   yt=player.y
   zt=player.zlevel+32
  d3d_set_projection(xf,yf,zf+change_y,    xt,yt,zt,   0,0,1);
  draw_set_alpha(1);
  draw_set_color(c_white);
 }
d3d_draw_floor(0,0,0,room_width,room_height,0,background_get_texture(floor),24,24);

d3d_transform_set_identity()
d3d_transform_add_rotation_x(-90)
d3d_transform_add_rotation_z(direction-90)
d3d_transform_add_translation(x,y,0)
d3d_draw_cylinder(-10,0,-10,  10,20,10,background_get_texture(COLOR),1,1,1,50)
d3d_transform_set_identity()

הסבר: למצלמה יש שלוש נקודות שממנה היא מתחילה , של גובה אורך ורוחב, ושלוש שאליה היא מגיע, כך שששת השורות הראשונות מכינות משתנים, שיציגו את הנקודות במצלמה, לא חובה להשתמש במשתנים, אך מאוחר יותר נצטרך אותם, השורה השביעית היא המצלמה עצמה, ה8 וה 9 הם הצבע של האור, אחרי זה מגיעים כל מיני משתנים שאתם כבר מכירים שמכינים רצפה ואת הגליל המעופף שישמש לנו אובייקט. למה צריך קוד כל-כך מסובך? כי יש לנו "בעצם" שני אובייקטים - המצלמה והדמות, שצריכים להיות מתואמים, מה שהופך את זה למעט מסובך.



אתם רואים גליל, צבוע שמרחף לו במקום על הרצפה שהכנתם.



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

עכשיו בוא נתחיל בתזוזה פשוטה של קדימה ואחורה.

עכשיו תורכם:

הכינו תזוזה קדימה ואחורה בלחיצה על המקשים למעלה ולמטה
פיתרון-גם אם הכנתם!
הכינו באירוע לחיצה על קדימה ואחורה פשוט משתנה שאומר שקדימה Speed שווה ל 5 ולמטה שווה ל -5 



כל הכבוד, אתם זזים גם קדימה ואחורה, אבל אתם ממשיכים לזוז גם אחרי שהפסקתם ללחוץ!




אז נוסיף באירוע ה DRAW שלנו קוד חדש:


if not keyboard_check(vk_up) then if not keyboard_check(vk_down) then speed = 0

הקוד הזה לא מסובך, הוא בסך הכל אומר שיעשו בדיקה אם למעלה או למטה לא לחוצים- ואם זה נכון, אז שנה את המהירות ל 0.



כשאתם לא לוחצים אתם לא זזים




בוא נוסיף עכשיו תזוזה ימינה ושמאלה, שתסובב אתכם. אז תוסיפו באירוע DRAW את הקוד הבא:

  if keyboard_check(vk_left) direction = direction + 5;
  if keyboard_check(vk_right) direction = direction - 5;

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


אתם יכולים גם להסתובב!



הכנו כבר המון, יש גוף שלישי שיכול להסתובב ולזוז!

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

עכשיו כדאי שנוסיף זווית שאפשר לשנות בקלות, נניח ע"י הכפתורים W,S,A,D כש W למעלה, S למטה, A שמאלה ו D ימינה. בוא נתחיל מ W ו S. כדי לגרום לתנועה של המצלמה למעלה ולמטה. ניצור אירוע של לחיצה על W ולחיצה על S, בלחיצה על W נכתוב את המשתנה הבא:

player.change_y += 3

וב S נכתוב את הבא:

player.change_y -= 3

הסבר: כתוב שהמשתנה של האובייקט שלנו, יהיה שווה +3\-3 בהתאם, כשבמצלמה שלנו, מופיע המשתנה הזה, שקובע מאיפה היא תתחיל. בוא נבדוק את המשחק!



אתם יכולים לשנות זווית ע"י לחיצה על W ו S!




עכשיו מגיע קטע שקצת קשה להבין אותו, אבל בכל זאת כדי לנסות, נכין עכשיו באובייקט שלנו אירוע STEP שבו נכתוב את הקוד הבא::

player.camdir+=change_x

הסבר: אנחנו רק דואגים כאן, שהמשתנה CAMDIR שיש לאובייקט PLAYER שלנו, יהיה שווה למשתנה הזה, שקובע בעצם את הזווית של המצלמה. עכשיו נוסיף עוד שני אירועים נוספים בכפתורים שתבחרו בהם לסובב את המצלמה, אני בחרתי ב A ו D לדוגמא , ניצור אירוע של לחיצה על A שבה יפנו שמאלה ולחיצה על D שבה יפנו ימינה.

באירוע של ה A אני אצור קוד שבו כתוב:

change_x=(+2)


עכשיו תורכם:

הכן את הכפתור המקביל, שיפנה ימינה.


פיתרון
למקרה שלא הצלחתם, צרו באירוע של לחיצה על כפתור המקביל  את הקוד הבא:
change_x=(-2)

הסבר:
כתבנו באחד שהמשתנה של ה CHANGE_X שדואג לכיוון ה-X של המצלמה, יעלה ב+2 ובשני ירד ב2. בוא נראה מה הצלחנו להכין!



אתם יכולים להסתובב ימינה ושמאלה ע"י שני הכפתורים, אבל המצלמה ממשיכה להסתובב אחרי שהפסקנו ללחוץ!



אפשרות ראשונה[עריכה]

מעולה, כמעט וסיימנו! עכשיו עומדות בפניכם שני אפשרויות, פשוטה או מסובכת, המסובכת יכולה להסביר קצת, אז כדי ללמוד אותה,אם לא תרצו להתחיל בה דלגו לאפשרות ב', אחרת,אתחיל בה; באירוע STEP הוסיפו את הקוד הבא:

if not keyboard_check(ord("A")) then if not keyboard_check(ord("D"))
{
change_x=(0) 
}

אז מה בעצם קורה כאן? כתבנו, שאם לא לחוץ המקש A (אותו תוכלו להחליף לאיזה מקש שבחרתם), ואם לא לחוץ המקש D (אותו תחליפו גם למה שבחרתם) אז הוא יפסיק להסתובב, בעצם כתוב שה CHANGE_X "יעלה" ב 0, מה שאומר שהוא לא יעלה. עם הצלחתם, אתם יכולים לדלג על הקטע הבא, שמציג זאת באופן יותר פשוט.

אפשרות שנייה[עריכה]

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

change_x=(0)

הוסיפו את אותו הקוד גם לסיום לחיצה על המקש השני, ובדק את המשחק!



כל הכבוד! סיימתם! אתם יכולים עכשיו לסובב זאת בקלות בלי בעיות!




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


קדימה! לשלב ג'!
הפרק הבא:
הורדה לפרק השני:
לחצו כאן להורדה!