
הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 23» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז בשיעור הקודם לא הוספנו פונקציונליות כי אם רק שינינו את מורכבות הקוד. הפכנו את הקוד ליותר פשוט. בשיעור הזה אנחנו נמשיך במגמה הזו וננסה ליצור קוד יותר ויותר פשוט.
נחזור לפאנל ויידבורד ודבר ראשון אפתור את השאלה שהצבתי בפניכם בסוף השיעור הקודם. אוקיי, אז לין על אותו משקל אנחנו לא ניכנס. זה קוד שנראה מורכב, זה מפחיד, אנחנו לא רוצים את זה כאן.
לא רוצים להתעסק עם הפנימיות המורכבת של הליין. זה מה עם כל האנדרוסקורים ו-P1 ו-P2 ו-X ו-Y. אני לא רוצה להתעסק עם זה כרגע.
זה הופך לי את הקוד של הגוי הטריוויאלי למשהו מפחיד. מה שאני אעשה זה, אני אפנה, נעצור את הריצה על ידי שיפט F5, אני אפנה לליין ואני אגיד לו גם כן draw וקבל את E נקודה גרפיק.
אנחנו נוסיף את הפונקציה על ידי האוטו קומפליטר, generate methods tab, tab זה המינימום של פונקציה. generate methods tab for draw in line אנחנו נותנים לline להוסיף את draw יפה היא נוספה עכשיו אנחנו ניקח את שתי השורות האלו לשם הגענו לפה זה ה-method tab נסיר את ה-throw שבעצם אמור לחרוג בזמן ריצה
the method or operation is not implemented אם נריץ את זה ככה כמובן שנחטוף חריגה אם נגיד אם נצייר לין ואז ננסה לגרום לו לצייר את עצמו בעזרת מעבר שקף יפה זה מה שקורה אנחנו מגיעים לחריגה שמזכירה לנו שבעצם עוד לא סיימנו אז נעצור פה את התוכנית נמחק את השורה הזו ונוסיף את הקוד שלקחנו מתוך פיינט שוב פה אנחנו לא צריכים
להגיד לו color אנחנו לא צריכים להגיד לו we אנחנו לא צריכים להגיד לו כי הוא מכיר את P1 הוא מכיר את P1 הוא מכיר את P2 הוא מכיר את P2 כי הן נמצאות פה לידו.
זה גם הופך את הקוד הזה ליותר פשוט. הטיפול ב-P1 וב-P2 הוא מקומי ואז מי שקורא את הקוד הזה הכל יותר פשוט P1 אה זאתי P1 בסדר זה מאוד ברור כנ"ל לגבי קלר מאוד ברור יחסית לאם ה-P1 ו-P2 מופיעות כאן.
טוב, אז זה היה לין, מה עוד אנחנו יכולים לעשות? בואו נחפש, בואו נחפש דברים מעניינים. אז על אותו עיקרון בעצם, שוב, פי שתיים מבצבץ לו בכל מיני מקומות שאולי הוא לא אמור לבצבץ לו שם.
את לין חילצנו, אז אולי נגיד ללין, במקום לגשת לפי שתיים של לין ולעדכן אותו בעצמנו, אולי פשוט ניתן לו.
נגיד לו תתעדכן וקבל כאן את נגיד לו בעצם את p2 זה לא יהיה הבדל משמעותי אבל זה יהיה כן זה גם יהיה הבדל יפה אז נגיד לו פה point או שנשאיר את זה בשבילו שהוא יטפל בזה אנחנו רק נעביר לו את e.x ו-e.y הוא יקבל את זה ואת כל השאר כבר יעשה בעצמו אפילו את create graphics הוא לא יוכל כי אין
לו פה אינטר לפאנל אז נצטרך לתת לו גם את create graphics אז לפני כן ניקח מפה את השורה הזו נשים אותה כאן ונעביר גם את g כל הקוד הזה ניקח מכאן ואת Update, ניצור Generate Method, Update for Line, ונלך לשם, נמחק את ה-Throw, נוסיף את הקוד שלנו, נמחק את כל מה שקשור ל-L, האמת היא שקיבלנו פה, כן, הוא קרא לזה שמות מגוחכים, זה Int X וזה
Int Y, ופשוט נקבל פה את X ואת Y, ביצירה של הפן נגיד לו Color, ובדרול ליין נגיד לו הכל בלי מה שמיותר. זו הייתה אפדייט.
בואו נריט, זה לא כל כך עובד, מה הבעיה? E אינו מוכר, נגדיר פה את G ולזה נקרא G ונריט. עדיין יש בעיה, גרפיקס מיותר ונריט. נצייר ציור בפרי-הנד, נצייר ציור בליין, B נציג, נלך קדימה, נחזור אחורה, זה עובד מצוין.
מה עוד אפשר לנקות? אנחנו כרגע בשלב שבו אנחנו בעצם מנקים קוד. אז יש לנו קלאס line, יש לנו קלאס freehand, בואו שוב נחזור לפאנל, נסתכל על pain, בוא נגיד שאנחנו מחפשים עוד איזה אינקפסולציה ניתן לבצע, עוד איזה קוד נמצא מחוץ לקלאס שאפשר להכניס אותו לתוך הקלאס.
זה button line ופה אנחנו פשוט קוראים ל update יותר מזה אי אפשר כרגע לעשות שום דבר במוב מה יש לנו כאן אז יש לנו אותו דבר לגבי freehand בעצם אנחנו יכולים לפנות לfreehand ולהגיד לו תדכן בעצם קבל עוד נקודה כי זה בעצם המהות של כל הפונקציה הזו הוספת הנקודה לpoint של הfreehand שוב גם כאן את g אנחנו נשלח וגם את g נשלח ואת e.x ואת e.y.
ניקח את הקוד הזה על הכתפיים ונוסיף את update לפרי-הנד ונלך לבקר אותה. זאתי update, נדביק את הקוד שלנו כאן, אני רואה ש... כן, זה בסדר.
שמות המשתנים, זה אנחנו יודעים שקוראים לו e.y. וזה נקרא x. כאן אנחנו לא צריכים את פרי-הנד ולא צריכים את פרי-הנד ו-G draw line זה ה-X וה-Y הקודמים וזה קצת בעייתי.
תכף נדבר על ה-X וה-Y הקודמים ועל העדכון של ה-X וה-Y הקודמים ועל יצירת נקודה חדשה מתוך ה-X וה-Y החדשים שקיבלנו והוספתם לפוינט אז האמת היא שהשמירה של x והy הקודמים אנחנו לא צריכים כי זה נמצא בפוינט זה הנקודה האחרונה של פוינט אז בכלל כל הx והy האלה שני אלו בכלל מיותרים אין טעם לשמור אותם אני יכול לחלט
אותם בכלל מתוך פוינט ואת זה כבר יכולנו לעשות באחד מהשיעורים הראשונים טוב אז מה שאנחנו נעשה עכשיו זה אנחנו נחלט את הנקודה ואז זו הנקודה החדשה, אנחנו רוצים לחלט את הנקודה הישנה.
אז אולי, תכף נעשה פה סדר, אז נגדיר פה פוינט P, יש לנו כבר כמה דברים, אז זה יהיה, נקרא לזה, נחלט P1 ונגדיר כאן את P2, ו-P2 ניצור אותה מה-X וה-Y שקיבלנו, וכאן נשלח את פי שתיים וכאן נשלח את פי אחת אולי לזה נקרא פן כדי לא ליצור בלבול אז פי אחת שווה אוקיי אנחנו צריכים לחלץ את מסוג
פוינט מתוך פוינט במקום האחרון קאונט פחות אחד זה המקום האחרון זו הכניסה האחרונה במערך אז חילטנו את שתי הנקודות ואז אנחנו קוראים ל-draw line ומעבירים לה את pen, את p1 ואת p2.
לא צריך לעדכן איזשהו משתנה גלובלי כי אנחנו כבר ממילא מעדכנים משתנה גלובלי הלא הוא פוינט בשתי הנקודות החדשות שהתקבלו x וy. האמת אפילו לא צריך ליצור נקודה חדשה כי זו למעשה p2.
שוב נחזור לאיפה שהיינו, היינו ב-mouse move. כל הקוד המורכב הזה שעכשיו התעסקנו איתו העברנו לתוך הפונקציה Update.
עשינו אינקפסולציה. אנחנו לא מטפלים מחוץ לקפסולה בתוכן של הקפסולה. קפסולה, הרכיב, היחידה, האובייק, יטפל בעצמו.
אנחנו רק נעביר לו את מה שהוא צריך. הוא צריך את G ואת ה-E. את ה-EX ו-EY. בואו נוריד את זה. שגיאות, יפה.
במאוס דאון אנחנו מעדכנים משתנים גלובליים שכבר לא קיימים. מה אנחנו עוד עושים? אנחנו עושים עוד דברים שכנראה תלויים ב-X ו-Y.
ב-Free Hand, במאוס דאון, מה אמרנו כאן? נתנו ל-FH Width ו-Color, אוקיי? ואז הוספנו לו את הנקודה T בלי לצפות שהוא יצייר שום דבר, אוקיי?
אבל עדיין זה די דומה ל-Update. אז נקרא אולי ל update, נראה מה היא מקבלת. היא רוצה את g, את int x ואת int y. אז זה לא בדיוק אותה update, אבל היא דומה. אנחנו רוצים update שפשוט מקבלת את x ואת y.
אז נגדיר update שמקבל את x ו-y, ואת הפוינט הזו נסיר,