תכנות לילדים באמצעות Game Maker/GML/משתנים ומתמטיקה
משתנים
עריכהמשתנים
עריכהבGML רוב הטקסט מבוסס על משתנים. למעשה, על זה מבוסס GAME MAKER.
משתנים, כשמם הם, משתנים, מהמילה להשתנות. הם בעצם תא, או מקום בזכרון בו מאוחסן הערך של אותו המשתנה.
ערך למשתנה, הוא המספר, או האות, או רצף האותיות (כולל רווח) שנקבל כאשר נפנה למשתנה.
לדוגמא, אם הערך של המשתנה "משחק" שווה "כיף", אז מעכשיו כאשר נאמר למחשב משחק, הוא יפנה למקום בזכרון
שבו מאוחסן המשתנה "משחק", ימצא שמה "כיף" ויחליף.
הצבה
עריכהכדי ליצור משתנה, צריך להגדיר את ערכו.
בפעם הראשונה שבו תכניס, או תציב, ערך במשתנה חדש, הוא יקרא משתנה.
לדוגמא אם תגיד למחשב "תן לי את הערך של המשתנה X",
כאשר לא הצבת בו ערך,
הוא יצעק, בטענה שאין לו כזה משתנה.
בעצם, משתנה נקרא משתנה ב- Game Maker רק כאשר יש לו ערך.
כשאומרים על מחשב שהוא "יצעק", זה אומר שהוא יגיע למצב שיש לו בעיה, או תקלה, והוא יוצא מהתוכנית או התוכנה שבה צעק. לדוגמא, אם מופיע לך על המחשב את ההודעה הבא: "Game Maker is not reponding" או כול הודעה אחרת שמתחילה במילה Error,
המחשב צועק.
כדי ליצור ולהציב למשתנה ערך, כותבים כך:
<ערך> = <משתנה>
במקום <משתנה> רושמים את שם המשתנה, לדוגמא X, ובמקום <ערך> רושמים את הערך של המשתנה הזה. לדוגמא, 5.
שימוש
עריכהכמו שאמרתי, למשתנים יש שימושים רבים מאד. למשל, נגיד ורוצים ליצר משתנה שייצג את מספר החיים שנותר לשחקן עד שייפסל, ניתן לעשות זאת כך:
lives = 3
כך, אפשר להשתמש במשתנה כדי שתמיד נוכל לדעת כמה חיים נותרו לשחקן עד שימות או יפסל.
הצבת משתנים
עריכהכאשר רוצים להציב בתוך משתנה כולשהוא, ערך של משתנה אחר, אנחנו בעצם מציבים משתנה במשתנה.
לדוגמא, בתחילת המשחק, נרצה להציב במשתנה lives , את מספר החיים שאיתו מתחילים, ולשם כך נוכל להשתמש במשתנה TotalLives.
רושמים זאת כך:
lives = TotalLives
משתנים גלובליים ומשתנים עצמיים
עריכהלאובייקט ניתן להציב משתנה, לדוגמה: Score. המשתנה הזה הוא משתנה של נקודות במשחק; אך, המשתנה הזה מכיל את הנקודות, וברוב המשחקים, לא רק השחקן הוא זה שמשנה את הנקודות, לפעמים גם אובייקטים אחרים צריכים לעשות את זה. נסו לצייר 2 דמויות, ליצור 2 אובייקטים, באובייקט הראשון נפתח את אירוע Create, שמה נשים בלוק של משתנה, ונכתוב את הערך 5 במשתנה T. עכשיו הצבנו, או יצרנו משתנה. נלך לאובייקט השני, שם נפתח אירוע Step. הציבו בלוק מתומן של בדיקת משתנה, שם נכתוב את הערך 5 למשתנה T. כדי לבדוק, נציב אחרי המתומן את הבלוק עם החיצים האדומים שבלשונית Move, שמה נסמן את החץ ימינה, ונכתוב 2. עכשיו צרו חדר, ושימו את שני האובייקטים בחדר.
עכשיו, איך נדע שהאובייקט השני קיבל את המשתנה?
רק אם האובייקט השני זז ימינה, נדע שזה עובד.
עכשיו נפעיל את זה.
המחשב צועק לנו, ואומר לנו שאובייקט 2 לא יודע על איזה משתנה מדובר ב- T.
להסביר לכם למה? זה מפני שקבענו את T להיות משתנה עצמי של האובייקט הראשון.
ולאובייקט השני אין את משתנה T.
עכשיו נפתור את הבעיה בעזרת משתנה גלובלי. זהו משתנה ששייך לכל המשחק, ולא רק לאובייקט אחד.
איך מציבים משתנה גלובלי? זה פשוט: כל מה שצריך לעשות זה רק להחליף את שם המשתנה T ב:
global.T
. עכשיו החליפו את השם בשני האובייקטים ובדקו שוב.
האובייקט זז ימינה. אך האם נוכל באמת לדעת אם המשתנה global.T שווה ל- 5?
בשביל זה יש את המשולש האדום, שמאפשר לנו לראות את ערכם של המשתנים בזמן המשחק ללא הפרעות במשחק. לחצו עליו.
עכשיו... הפעלנו את המשחק ואנחנו רואים מולנו חלון. בחלון הזה רואים טבלה.
Expression
Value
. Expression הוא שם המשתנה ו- Value הוא הערך. בטבלה לא רואים כלום.
למעלה אפשר לראות סמלים, שניתן ללחוץ עליהם. עכשיו, בואו ניצור נקודת צפיה על המשתנה global.T.
נלחץ על הפלוס, שם נכתוב global.T, כמובן.
עכשיו נוצרה שורה בטבלה, שבה כתוב משמאל global.T, ומימין כתוב 5.
עכשיו אנו יודעים בוודאות שהמשתנה global.T שווה ל- 5.
משתנים מובנים
עריכהלגיים מייקר לא חייבים לקבוע משתנים. ישנם מלא משתנים (שאפילו אני לא ידעתי שקיימים) שמוצבים לכל אובייקט. ישנם גם משתנים גלובליים שכבר קיימים ולא צריך להגדיר אותם.
לדוגמה - לכל אובייקט יש את המשתנה x בנוי בתוכו.
עצמיים (אל תתייחסו למילה local):
local: alarm
local: bbox_bottom
local: bbox_left
local: bbox_right
local: bbox_top
local: depth
local: direction
local: friction
local: gravity
local: gravity_direction
local: hspeed
local: id
local: image_alpha
local: image_angle
local: image_blend
local: image_index
local: image_number
local: image_single
local: image_speed
local: image_xscale
local: image_yscale
local: mask_index
local: object_index
local: path_endaction
local: path_index
local: path_orientation
local: path_position
local: path_positionprevious
local: path_scale
local: path_speed
local: persistent
local: phy_active
local: phy_angular_velocity
local: phy_bullet
local: phy_col_normal_x
local: phy_col_normal_y
local: phy_collision_points
local: phy_collision_x
local: phy_collision_y
local: phy_com_x
local: phy_com_y
local: phy_dynamic
local: phy_fixed_rotation
local: phy_inertia
local: phy_kinematic
local: phy_linear_velocity_x
local: phy_linear_velocity_y
local: phy_mass
local: phy_position_x
local: phy_position_y
local: phy_rotation
local: phy_sleeping
local: phy_speed_x
local: phy_speed_y
local: solid
local: speed
local: sprite_height
local: sprite_index
local: sprite_width
local: sprite_xoffset
local: sprite_yoffset
local: timeline_index
local: timeline_loop
local: timeline_position
local: timeline_running
local: timeline_speed
local: visible
local: vspeed
local: x
local: xprevious
local: xstart
local: y
local: yprevious
local: ystart
גלובליים (אל תתייחסו למילה global): הערה: לא כל המשתנים הגלובליים מתחילים במילה global ונקודה.
global: argument
global: argument0
global: argument1
global: argument10
global: argument11
global: argument12
global: argument13
global: argument14
global: argument15
global: argument2
global: argument3
global: argument4
global: argument5
global: argument6
global: argument7
global: argument8
global: argument9
global: argument_count
global: argument_relative
global: async_load
global: background_alpha
global: background_blend
global: background_color
global: background_foreground
global: background_height
global: background_hspeed
global: background_htiled
global: background_index
global: background_showcolor
global: background_visible
global: background_vspeed
global: background_vtiled
global: background_width
global: background_x
global: background_xscale
global: background_y
global: background_yscale
global: browser_height
global: browser_width
global: caption_health
global: caption_lives
global: caption_score
global: current_day
global: current_hour
global: current_minute
global: current_month
global: current_second
global: current_time
global: current_weekday
global: current_year
global: cursor_sprite
global: debug_mode
global: delta_time
global: display_aa
global: error_last
global: error_occurred
global: event_action
global: event_number
global: event_object
global: event_type
global: fps
global: game_id
global: gamemaker_pro
global: gamemaker_registered
global: gamemaker_version
global: health
global: instance_count
global: instance_id
global: keyboard_key
global: keyboard_lastchar
global: keyboard_lastkey
global: keyboard_string
global: lives
global: mouse_button
global: mouse_lastbutton
global: mouse_x
global: mouse_y
global: os_browser
global: os_device
global: os_type
global: os_version
global: program_directory
global: room
global: room_caption
global: room_first
global: room_height
global: room_last
global: room_persistent
global: room_speed
global: room_width
global: score
global: secure_mode
global: show_health
global: show_lives
global: show_score
global: temp_directory
global: transition_color
global: transition_kind
global: transition_steps
global: view_angle
global: view_current
global: view_enabled
global: view_hborder
global: view_hport
global: view_hspeed
global: view_hview
global: view_object
global: view_surface_id
global: view_vborder
global: view_visible
global: view_vspeed
global: view_wport
global: view_wview
global: view_xport
global: view_xview
global: view_yport
global: view_yview
global: webgl_enabled
global: working_directory
ניתן להשתמש בכל אלו בלי ליצור או להציב אותם.