Tip:
Highlight text to annotate it
X
>> DAVID מלאן: בואו לכתוב תכנית מעורב חלון ומעגל עם
המעגל מקפץ קדימה ואחורה מימין ומהשמאל
קצוות של חלון זה.
לשם כך, בואו נשתמש בסטנפורד ספרייה ניידת, ובואו ראשון
כולל gevents.h כך שנוכל להקשיב לתנועות עכבר.
בואו לאחר מכן לכלול gobjects.h כך אנחנו יכולים להכריז על דברים כמו אליפסות או
חוגים, באמת.
ואז בואו כוללים gwindow.h כך יש לנו חלון גרפי ל
הכל.
>> בואו נכריז עיקרי בדרך הרגילה.
ובואו עכשיו להכריז ומופע או ליצור חלון ש, GWindow -
ואנחנו קוראים לחלון משתנה -
מקבל newGWindow.
ואנחנו נעשה את זה באופן שרירותי 320 פיקסלים על 240 פיקסלים.
>> בואו הבא מופע מעגל.
אבל להפעלת המעגל הזה, אנחנו צריכים לעשות את העבודה קצת יותר.
בפרט, בואו למלא במעגל הזה כך שכל העניין הוא
שחור ולא רק להתוות ממנו.
GOval -
אנחנו קוראים לזה המעגל -
מקבל newGOval.
אנחנו נשים את סגלגלים זה על 0, 110, ואנחנו לעשות 20 פיקסלים הסגלגלים רחב על ידי
20 פיקסלים גבוהים - במילים אחרות, קוטר של 20 או רדיוס של 10.
>> בואו עכשיו להגדיר את הצבע של המעגל להיות ציטוט, סוף ציטוט, "שחור". בואו
כעת נקבע שמלאו אותו על ידי ציון אמיתי.
ועכשיו סוף סוף, בואו נוסיף המעגל החלון כדלקמן, לפיה
האחרון מתווסף לשעבר.
>> בואו עכשיו להכריז כפול.
אנחנו קוראים לזה מהירות.
ושרירותי במידה מסוימת, נניח מהירות של מעגל זה תהיה
2.0, במילים אחרות, 2 פיקסלים לכל יחידת זמן.
ועכשיו בואו במכוון לגרום ללולאה אינסופית.
>> אז איך לעשות את המעגל הזה להקפיץ קדימה ואחורה?
ובכן בואו נניח בתוך לולאה זו ש לכל יחידת זמן, אנחנו
הולך להזיז את העיגול רק קצת המבוסס על מהירותה של 2 מגה ביט
ליחידת זמן.
אבל ללא הרף, אנחנו הולכים צריכים לבדוק אם המעגל נוגע
קצה ימני של המסך או מהשמאל קצה של המסך, כי אם כן, אנחנו
צריך את זה כדי להקפיץ, כביכול.
>> כיצד ליישם רעיון של הקפצה?
ובכן, אם אנחנו הולכים על 2 פיקסלים ל נכונה ליחידת זמן, כדי להקפיץ את
הקצה הימני, אנחנו יכולים פשוט להפוך כי כדי להיות 2 פיקסלים שליליים ליחידה
של זמן, ובכך שולל את את המהירות.
אז למעשה, הקפצה היא יחסית פשוט.
>> בואו להזיז את העיגול ראשון על ידי זה רבים פיקסלים לאורך ציר x, על ידי זה
פיקסלים רבים לאורך ציר ה-Y.
במילים אחרות, אנחנו לא רוצים שזה לנוע לאורך ציר ה-Y בכל.
אנחנו רוצים את זה רק כדי להתאושש ועזבתי שוב ונכון.
>> ובואו עכשיו לבדוק בתוך לולאה זה אם קואורדינטת x של העיגול בתוספת
רוחבו של המעגל הוא גדול יותר או שווה ל
רוחבו של החלון -
במילים אחרות, אם המיקום של המעגל בתוספת הרוחב של המעגל
עצמו הוא החברה האחרונה הקצה מהחלון, כולנו הייתי
טוב יותר להפוך המהירות שלנו -
מהירות מקבלת מהירות שלילית, ובכך רפרף חיובי
שלילי או שלילי לחיובי.
אבל מה אם המעגל עובר מ מימין לשמאל ולכן פוגע
הקצה השמאלי?
במילים אחרות, אם קואורדינטת x של המעגל הוא החברה קטן או שווה
ל -0, בואו נלך קדימה ושוב להפוך המהירות שלנו.
>> אז למה לי לא הוספתי ב רוחבו של המעגל זה
זמן, כפי שעשיתי בעבר?
ובכן, יש לזכור כי את הקואורדינטות של אובייקט מוגדר
בפינה השמאלית העליונה שלה, לא באמצע שלה.
וכך, כאשר המעגל עובר מ משמאל לימין, אנחנו צריכים לבדוק
אם הקצה הימני של המעגל עבר
קצה ימני של החלון.
אז כדי להבין מה זה, יש לנו כדי לקבל את קואורדינטת x של המעגל
בתוספת הרוחב של המעגל לנוע את עצמנו מלמעלה שמאלי
פינה, בצורה יעילה, כדי פינה הימנית עליונה.
כאשר המעגל הוא נע מימין ל שמאל, לעומת זאת, אנחנו לא צריכים
לטרוח עם תוספת כזו, כי פינה השמאלית העליונה של המעגל היא
כבר הערך שנציע להגיע מx הגט.
>> בואו עכשיו להזיז את הכדור.
בואו עכשיו להציל, לקמפל ולהריץ את זה תכנית, להפוך את להקפיץ,. / להקפיץ.
ויש לנו תכנית.
>> אבל המעגל הוא זז כל כך המעצבן הזה מהר, זה כמעט בלתי אפשרי כדי לראות מה
הולך דווקא על.
אז בואו למדי את התכנית בכוח על ידי לחיצה על X ביד ימין למעלה
פינה כאן.
עכשיו בואו נחזור לקוד המקור ודברים להאט קצת.
>> במילים אחרות, בתוך זה אינסופי לולאה, ולא רק ומהלך
להעביר ושוב, עד זרא, בואו נתעכב רק כמה אלפיות שנייה
לפני שתמשיך לנוע שוב.
בפרט, בואו נלך לתחתית של הלולאה האינסופית כאן ופשוט
להשהות, למשל, 10 אלפיות שנייה בכל איטרציה.
בואו עכשיו קומפילציה ולהקפיץ להפעיל מחדש.
ועכשיו אנחנו רואים הרבה יותר סבירים יישום, שבו אנו יכולים לראות את
המעגל באמת מקפץ על שמאל וימין קצה.