עיצוב משחקים בבלנדר - רמה 3

<כרמית לוי>

carmit3levi@gmail.com

היסטוריית גירסאות
גירסה 0.9 30-10-2008 <כרמית לוי>
טיוטא ראשונה

זכויות יוצרים ורשיון

כל הזכויות שמורות © 2007, <כרמית לוי>, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL
Linux הוא סימן מסחרי רשום של Linus Torvalds.

הסרת אחריות

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

משוב

תגובות, תלונות, הערות והארות לכתובת: carmit3levi@gmail.com.

מבוא

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

ידע נדרש למדריך קצת לוגיקה של תכנות בארועים ואובייקטים ובלנדר שלב 1 ואולי גם אנימציה שלב 2 לחלק מהמדריך… אין כאן לימוד של שימוש בפייתון סקריפטינג לשימוש במנוע משחקים…

מצב משחק

כשנכנסים למצב משחק בבלנדר הוא נכנס במצב תצוגה שאיתו עובדים. קיימים מספר מצבי תצוגה לאובייקים והם: תצוגת אובייקטים במעטפת קופסה ללא צבע הצללה או משהו, תצוגת אובייקים רק בקוי מתאר של הצורה, תצוגת אובייקטים בצורתם ללא הצללה, תצוגת אובייקטים עם צל, תצוגת אובייקטים עם כל האלמנטים כולל צבעים שהוסיפו במצב texture paint.

texture paint - אחד ממצבי העבודה על אובייקטים. נבחר היכן שבוחרים מצב עריכה ומצב אובייקט.

מצבי תצוגה (מוצלל קוים בלבד צורה בלבד וכד'..) במצב אובייקט לחצן לידו.

מצב התצוגה באובייקט הוא שמשמש גם במשחק.

כדי להכנס למצב משחק לוחצים על P

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

כדי לחזור לבלנדר ממצב משחק Esc הוא המקש.

לוגיקה של משחק F4

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

הפאנל של הלוגיקה של המשחק מחולק ל- 4 עמודות. עמודה ראשונה מכילה הגדרות על האובייקט עצמו אם הוא סטטי או דינמי ואיך שמנוע הפיסיקה צריך להתיחס אליו. עמודה שניה מכילה סנסור שהוא בעצם סוג של ארוע כמו לחיצת מקש ואחרים. עמודה שלישית נקראת קונטרולר שמכילה ביטויים לוגיים כמו פונקציות שמכילות מצד אחד את ערך הארוע הנבחר עמודה רביעית נקראת actuators מכילה טבלה עם ערכים של x y z עבור האובייקט עם תגובות גראפיות שהוא יבצע כמו רוטציה סיבובית על ציר נבחר או תזוזה במיקום.

Bullet - מנוע פיזיקה

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

דוגמא - לחיצת מקש תגובת אובייקט

יש לבחור אובייקט למשל “קוביה” במצב אובייקט. ללכת לפאנל הלוגיקה לבחור בעמודה ראשונה שהוא יהיה דינאמי ולא סטטי ואקטור. בעמודות הסנסור קונרולר ואקטואטורס ללחוץ על ADD ליד כל מאפיין בעמודה יש עיגול קטן שיש לקשר אותו למאפיין שבעמודה הבאה.

בעמודה השניה של הסנסור יש את שם האובייק עליו עובדים מתחתיו ברירת המחדל always יש לשנות ל keyborad אחרת המאפיינים בעמודה השלישית שנכניס יחולו על האובייקט כל הזמן והוא יברח מהמסך (אפשר לנסות). בתוך keyboard יש ללחוץ מתחת על הריבוע ולהקיש את המקש שיחיל את הארוע.

בעמודה השלישית יש להגיד מה השינוי שיחול על האובייקט למשל שינוי מיקום על ציר האיקס y או z או רוטציה.

מצב קישור לוידאו שאפשר לראות דוגמא לצורת עבודה על זה: הקישור לקירבי (תכנית ילדים) http://www.youtube.com/watch?v=4BBEH-eok8s&NR=1 לא לראות הכל זה לא רלבנטי. לראות רק מהדקה השלישית ו 55 שניות.

זה מה שרלבנטי.

מחיקת קישור על ידי עליו עם העכבר ולחיצה על X

עיצוב קפיצה

טוב בעיצוב קפיצה נניח שיש לנו אובייקט כדורי נניח sphere בברירת מחדל שלה. נעשה כדור ונוסיף משטח למטה. מנוע הפיזיקה בולט צריך להיות פועל כי לעיצוב קפיצה של אובייקט בתגובה ללחיצה על מקש נניח SPACE KEY אנחנו נצטרך גרביטציה.

איך עושים בדיקה שבולט פועל:

לוחצים על F8 ורואים שבפאנל של Mist/stars/physics לא כתוב None ולא כתוב משהו אחר ואם כן לבחור את בולט ולראות שהגרביטציה היא באמת 9.8 כמו תאוצת נפילה.

להוסיף משטח וכדור תזכורת טכניקות: מירכוז הסמן להוספת אובייקטים במצב אובייקט לחיצה על shift +c. מבט על: לחיצה בחלק של המספרים המושפעים מנמלוק במקלדת ספרה 7. לחיצה על המספרים הרגילים מעבירים לסקנט אחר…

הוספה של משטח : space >add > mesh> plane לחיצה על TAB כדי לצאת ממצב עריכה הוספת כדור עם הברירת מחדל שלו של 32 טבעות: space add >mese> UVsphere מיקום שלו קצת מעל נגיד שלחיצה על : G > Z > 3 ואז אנטר. ויציאה ממצב עריכה

אפשר ללחוץ על P מידי פעם לראות איך זה עובד במצב משחק ולצאת.

עכשיו הלוגיקה של עיצוב קפיצה: 1. דבר ראשון השאלה היא איך רוצים שהקפיצה תיראה. הקפיצה שאני אעצב כאן בדוגמא תהיה קפיצה רק לימין בתור דוגמא הכדור יקפוץ בתגובה ללחיצה על מקש הרווח. ויקפוץ ימינה בתגובה ללחיצה על “רווח + חץ ימין”. כשהכדור יקפוץ ימינה ויהיה באויר אי אפשר יהיה להפעיל עליו כח בעזרת המקשים עד שהוא ינחת או יגע באדמה. זתומרת שבקפיצה לא יפעל עליו כח כל עוד הוא באויר. ואפשר יהיה לכוון את הקפיצה רק כשהוא על האדמה.

2. עיצוב קפיצה רגילה ללא כיוון: הכדור שלנו נבחר ומסומן. נלך לפאנל הלוגיקה F4 הוספה add add add של סנסור קונטרולר ואקטואטורס ולקשר אותם במחברים שלהם. * בסנסור במקום always נבחר keyboard לוחצים שם על הקוביה ואז בוחרים את המקש space בלחיצה עליו. * בקונטרולר לבחור AND * באקטואטורס לראות שהוא motion ולבחור בעמודה השלישית Z של הגובה ערך של 2.00 נניח. אפשר כבר לבדוק עם P מה קורה בארוע לחיצה ולצאת עם Esc * כדי לסדר שהקפיצה לא תהיה גם מהאויר אלה תתבצע רק כשהעצם נוגע באדמה נוסיף עוד סנסור לא מסוג keyboard אלה מסוג touch שמגיב כל פעם שעצם אחר נוגע בכדור. וגם אותו לחבר לקונטרולר AND שאליו מחובר גם הסנסור של מקש הרווח במקלדת.

3. עכשיו יש לנו קפיצה. באותו אופן נוסיף את האפשרות שהאובייקט יזוז ימינה: add add add סנסור קונטרולר ואקטואטורס. לקשר אותם באקטואטורס הוא מושן בעמודה הראשונה X=0.20 הקונטרולר הוא AND והסנסור הוא keyboard שלוחצים בפנים על הריבוע ועל לחצן חץ ימני במקלדת.

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

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

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

ובבדיקה חוזרת נראה שקפיצה היא דבר נפרד מלחיצה על ימין ועדיין אין שילוב בניהם.

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

אז שלב 4 להוסיף את הסנסור ונעשה לו קונטרולר של AND ונעשה לו אקטואטורס פרטי משלו של מושן שמפעיל באופן קבוע כח ימין על האובייקט זתומרת ש x העמודה הראשונה היא 0.20

בשלב זה האובייקט יזוז כל הזמן ימינה. אנחנו צריכים כל הזמן תזוזה ימינה כשתהיה לחיצה על רווח וימין.

5. ניצור לאובייקט משתנה בוליאני שכשהוא יהיה true ביחד עם התזוזה ימינה זה יקרה. יצירת המשתנה נעשית בעמודה הראשונה משמאל בפאנל הלוגיקה. Add Property נבחר לו ערך בוליאני שיהיה false ושם שאפשר לקרוא לו alwaysright.

6. בסנסור נוסיף סנסור שנבחר אותו property ונבחר equal ב prop נכתוב את השם שלו alwaysright ואת הערך True. זה משהו שקול לביטוי alwaysright==true. ונחבר אותו לקונטרולר and שאליו מחובר גם הסנסור של always שמבצע תזוזת אובייקט תמידית לימין.

עכשיו כל פעם שהפרופרטי הזה יקבל אמת תתבצע תזוזה עקבית לימין.

7. עכשיו נוסיף שני אקטואטורס של פרופרטי בישביל הפרופרטי שלנו ונבחר בשניהם Assign ובשם prop את השם של הפרופרטי שלנו. באחד נשים ערך True ובשני False. וגם נוסיף להם שני קונטרולים עם AND נפרדים ונחבר אותם.

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

9. את שני הסנסורים שאמורים לגרום לקפיצה שזה לחיצה ימינה ורווח נחבר לקונטרולר השני שמחובר לפרופרטי שהופך את alwaysright ל false.

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

קישור אנימציה לאובייקט

אתחול המשחק ויציאה מהמשחק

קודם כל השאלה איך רוצים לאתחל את המשחק? האם בתגובה לזה שהאובייקט יגע באובייקט מסויים? ואז זה שימוש בסנסור של touch על האובייקט שנוגעים בו או על ידי לחיצה על R יעני restart game.

כאן נעשה עם סנסור שלוחצים על R אז להוסיף סנסור של keyboard ולעשות אותו ללחצן R.

עכשיו מוסיפים לו קונטרולר AND ומחברים. ומוסיפים את האקטואטורס שזה הפעולה ומשנים אותה ל Scene ובוחרים שם restart. ולא לשכוח לחבר את הקונטרולר אליו.

באותו אופן אפשר לעשות למשחק quit וכד'..

קישורים רלבנטיים

מדריכים/blender_-_מנוע_משחקים_בבלנדר_-_רמה_3.txt · שונה לאחרונה ב: 2008/11/03 10:03 על ידי carmit_levi
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0