עד כה, ראינו איך ליצור מערך ואיך לגשת אליו.
אבל, בדיוק כמו משתנים אחרים, אחד הדברים המגניבים לגבי מערכים הוא היכולת לשנות אותם באופן דינמי בזמן שהתוכנית רצה.
אוקיי, תנו לי רגע להראות לכם למה אני מתכוונת.
יש לנו כאן תוכנית שמציגה את Hopper שמחזיק כמה בלונים - ממש חמוד.
איך שזה עובד זה שיש לנו מערך של מיקומים xPositions שיש בו שני מספרים, שאומרים היכן אנחנו רוצים להציג את הבלונים.
ואז כאן למטה יש לנו לולאה, והלולאה הזו עוברת על כל האיברים של המערך
ועבור כל אחד מהם, היא מציררת קו ממיקום ה-x הזה ליד של Hopper, ואז מציירת אליפסה במיקום ה-x הזה בגודל 30x40 פיקסלים, וזה הבלון שלנו.
אוקיי, מגניב. עכשיו שאנו רואים איך זה עובד, אנחנו יודעים שאם נרצה שעוד בלון יופיע, אנחנו יכולים פשוט להוסיף עוד מספר למערך. למשל 300.
יפה. עכשיו יש לנו שלושה בלונים, ו-Hopper שמח.
אבל נניח שאנחנו רוצים לתת למשתמש שלא יודע לתכנת את היכולת להוסיף בלונים חדשים.
אז רצינו לתת את התוכנית למשתמש ולומר לו - "היי, אתה יכול ללחוץ איפה שאתה רוצה את הבלון, והבלון יופיע."
זה יהיה מגניב, לא? אני חושבת שכן.
אז, איך נעשה את זה? אנחנו רוצים שהתוכנית שלנו תשתנה עם הזמן, נכון?
בכל פעם שהמשתמש לוחץ, בלון יופיע במקום שהוא לחץ.
נתחיל בלהזיז את כל הקוד הזה לתוך פונקציית ציור (draw) כדי שיהיה קל לשנות את זה עם הזמן.
נזיז את זה למטה ונוסיף הזחה ימינה. אוקיי, נהדר.
עכשיו נרצה לבדוק, האם המשתמש לוחץ על העכבר ברגע זה?
אנחנו יכולים לעשות זאת עם תנאי if. אז נרשום if (mouseIsPressed), ואז נעשה משהו.
מה נעשה? אם העכבר לחוץ, אנחנו רוצים איכשהו להוסיף מספר למערך הזה.
בואו נחזיר אותו למצב שיכיל רק שני איברים. אוקיי.
אנחנו רוצים להוסיף מספר למערך הזה איכשהו. אני אראה לכם דרך אחת שנוכל לעשות זאת.
נרשום xPositions[2] = mouseX;
אוקיי, תנו לי רק להראות לכם שזה עובד
לחצתי, והנה יש לי בלון. אז מה זה עשה?
זה אומר שאנחנו מסתכלים על המערך, ומוצאים את האיבר במקום ה-2, ותזכרו שזה האיבר השלישי כי המערכים שלנו מתחילים מאפס.
אבל אתם רואים שאין איבר שלישי, נכון? אין שום דבר במקום הזה.
אז כתוב כאן שנמצא את המקום הזה, ונשים בו את mouseX.
לא היה שם כלום, ועכשיו במקום כלום זה יכיל את mouseX.
עכשיו המערך שלנו מכיל שלושה פריטים, ולולאת ה-for הזו כאן למטה עוברת עליו, ומציירת גם את הבלון השלישי הזה
די מגניב, עכשיו אני אלחץ עוד ונראה איך זה עובד.
אתם רואים שבכל פעם שאני לוחצת, זה מצייר את הבלון השלישי במקום שלחצתי עם העכבר
זה כי אנחנו כל הזמן דורסים את המקום ה-2, הדבר שנמצא באינדקס 2.
אנחנו כל הזמן דורסים אותו עם ה-mouseX הנוכחי.
אז תמיד יהיו לנו רק שלושה בלונים כי יש לנו את זה במקום ה-0, את זה במקום ה-1, ואנחנו תמיד משנים את המקום ה-2. אוקיי?
זה מגניב, אבל מה שאנחנו באמת רוצים זה לתת למשתמש ליצור המון בלונים, נכון?
כך שבכל פעם שהוא לוחץ, יש בלון חדש.
זה אומר שאנחנו צריכים כל הזמן להגדיל את האינדקס של האיבר במערך שאנחנו שומרים בו את המיקום.
אנחנו לא רוצים שהוא יהיה 2 כל הזמן, אנחנו רוצים שהוא יהיה 2, ואז 3, ואחר כך 4, ואז 5, ואז 6, וכן הלאה.
אנחנו יכולים לעשות את זה באמצעות משתנה סופר - counter. נרשום newInd = 2;
זה מה שהוא יתחיל איתו, ואז כאן נרשום newInd במקום 2.
ואז מה שאנחנו באמת רוצים לעשות זה לרשום newInd++
כלומר בכל פעם נוסיף לו 1. הוא יתחיל בתור 2, ואז יהפוך ל-3, ואז ל-4.
בכל פעם שלוחצים על העכבר, האינדקס יגדל. בואו ננסה את זה.
יופי! המון בלונים. מסיבת בלונים!
זה מגניב, נכון? אבל זו לא הדרך הכי טובה לעשות את זה, כי מסתבר שלהוסיף פריטים למערך זה משהו שנרצה לעשות הרבה
כך שיש לנו דרך פשוטה יותר לעשות זאת.
תנו לי רק למחוק את הדברים שעשינו. אוקיי, אנחנו לא צריכים את זה יותר. נהפוך את להערה.
אוקיי, אז עושים את זה כך - xPositions.push ואז mouseX.
אז מה שעשינו כאן זה לקרוא למתודה push על המערך xPositions.
כלומר אנחנו קוראים לסוג של פקודה על המערך. אנחנו אומרים למערך, "היי, תכניס את הערך החדש הזה, שנמצא ב-mouseX, תכניס אותו בסוף המערך".
בכל פעם שקוראים לקוד הזה, בכל פעם שהמשתמש לוחץ על העכבר, אנחנו בודקים מההמיקום של העכבר mouseX ונוסיף את המספר לסוף המערך.
כך שהמערך אמור לגדול ולגדול ולגדול. בואו נתחיל מחדש וננסה את זה.
יפה, זה עבד! וזה הרבה פחות קוד ממה שהיה לנו קודם. אוקיי?
רוב הזמן, אתם תרצו להשתמש ב-push אם אתם הולכים להוסיף דברים למערך בצורה הזאת.
וזה די מגניב כי אתם יכולים פשוט להגדיל את המערכים עוד ועוד במהלך התוכנית.
למשל כשיש לכם אנימציה או כשיש משתמשים שעושים דברים, אתם יכולים לעשות הרבה יותר.
אז עד עכשיו ראיתם בערך 90% מהדרכים שבהם כנראה תשתמשו במערכים.
אבל יש הרבה דברים אחרים שתוכלו לעשות עם מערכים. אז אם יש לכם שאלות, פשוט שאלו בדיונים.
אבל תוודאו שאתם שולטים היטב בכלים הבסיסיים האלו קודם.