ארכיון הבלוג
משחקים ולומדות לשנת שמיטה
פרויקט גדול שעליו עבדנו בשנה הקודמת בשביל להספיק לשנת תשס"ה – שנת שמיטה.
סדרה של משחקים ולומדות לשנת השמיטה שנבנו עבור מכון התורה והארץ,
הפרויקט התחיל כ-"עדכון" לדיסק ישן שהיה שמיש בשנת השמיטה הקודמת, והמרה של כל המשחקים והלומדות שבדיסק לפלאש.
בנוסף הוספת משחקים חדשים ושדרוג של המשחקיות והכיף במשחקים הקיימים.
הלומדות והמשחקים בנויים בצורה כזו שתאפשר לתלמידים ללמוד את הנושא בחלק הלומדות, ואח"כ לתרגל את הלימוד ולשחק בו בחלק המשחקים.
חייב לציין שגם אני למדתי את הלכות השמיטה טוב יותר מהלומדות והמשחקים.
הלומדות:
http://shmita.toraland.org.il/%D7%9E%D7%A9%D7%97%D7%A7%D7%99%D7%9D/
המשחקים:
http://shmita.toraland.org.il/%D7%9C%D7%95%D7%9E%D7%93%D7%99%D7%9D-%D7%91%D7%9B%D7%99%D7%A3/
שנת שמיטה טובה לכולם.
בשביל לדעת האם יוצא מהקובץ שלנו איזה צליל ניתן להפעיל את הפונקציה הבאה soundPlay:
function soundPlay() { var mp3ba:ByteArray = new ByteArray(); SoundMixer.computeSpectrum( mp3ba ); var soundOut = mp3ba.readFloat(); if (soundOut != 0) { return true; } else { return false; } }
כשעובדים עם תיבות טקסט מסוג tlf (התיבת טקסט שעובדת עם עברית), קובץ ה-swf טוען לפני ההרצה של ה-swf את המאפיינים של ה-tlf, מה שגורם לכל המאפיינים שאמורים להטען מיד עם טעינת ה-swf להטען רק אחרי שהנגן מסיים לטעון את ה-tlf.
הטעינה המוקדמת הזו גורמת לבעיות, אם למשל יש משתנים שאנחנו מצפים לקבל (flashvars לדוגמא), או משתנים מהקובץ שנטען לתוך קונטינר, הם יגיעו רק אחרי זמן ולא מידכשהקובץ נטען.
בשביל לפתור את הבעיה הזו, צריך לגרום לקוד ה-tlf לשבת בתוך הקובץ swf עצמו, זה גורם להעלאת המשקל של הקובץ, אבל מונע בעיות (לשיקולכם).
בשביל להטמיע את הקוד בפלאש עצמו נלך ל-
publish settings –> Flash –> Seetings –> Libraty path
נבחר את: textLayout ונשנה את: Default likage ל-Merged into code במקום Runtime shared library (RSL).
שימוש ב-bitmapdata מתקדמים
מחלקה bitmapdata מאפשרת לנו "לזכור" מבנה של displayObject, להעתיק אותו, לשנות אותו ולעשות עליו מניפולציות שונות.
לדוגמא, ניתן לחתוך תמונות, לעוות תמונות, לשנות פיקסלים ספציפיים ועוד.
תיעוד המחלקה נמצא כאן: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html
בשביל להבין את העבודה על המחלקה נתחיל מדוגמא פשוטה, נניח שעל הבמה יש לנו movieClip שמצוייר בו ציור כל שהוא ושמו mc, בדוגמא הראשונה נשכפל את מראה המוביקליפ:
import flash.display.BitmapData; //איתחול המחלקה ביטמפדטא המחלקה מקבלת את הפרמטרים הבאים //BitmapData(צבע האטימות,האם השכפול יתחשב באטימות,גובה המקור או גובה היעד,רוחב המקור או רוחב היעד); var bmd:BitmapData = new BitmapData(mc.width,mc.height); //הוראה לביטמפדטא לצייר את המוביקליפ bmd.draw(mc);
כרגע בעצם שמרנו את המוביקליפ כציור בזכרון כמשתנה שנקרא bmd, במידה ונרצה לראות את תוצאת הציור שלנו, נשתמש במחלקה bitmap בדרך הבאה:
//איתחול המחלקה ביטמפ ויציקת הביטמפדטא לתוכה var bm:Bitmap = new Bitmap(bmd); //יצירת ילד אל הבמה addChild(bm);
עד כאן בעצם יצרנו שכפול של המוביקליפ אל הבמה, מכאן מתחיל הכיף, לפני שאנחנו יוצקים את הביטמפדטא אל הביטמפ אנחנו יכולים לבצע עליו מניפולציות, את המניפולציות אפשר לבצע בכמה דרכים, אני אראה כאן דוגמא המבוססת על הדוקומנטציה של פלאש, בשביל לבצע את המניפולציה הזו, נשתמש במחלקה מטריקס(כן כמו הסרט), שמאפשרת לשחק עם הביטמפדטא ולבצע עליו פעולות כמו חיתוך,עיוות,הקטנה והגדלה, ניתן לקרוא כאן את התיעוד המלא: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/geom/Matrix.html
בדוגמא שלי אני אבצע על התמונה שינוי צורה להקטנה פשוטה ע"י מטריקס:
import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Matrix; //הגדרת הרוחב והגובה חלקי 2 כיוון שאנחנו מעוניינים לצייר את הביטמפדטא בצורה המוטקנת בחצי var bmd:BitmapData = new BitmapData(mc.width/2,mc.height/2); //איתחול מטריקס var mat:Matrix = new Matrix(); //שימוש בפעולה scale mat.scale(0.5,0.5); //הוראה לביטמפדטא לצייר את המוביקליפ //ולהכיל עליו גם את ההוראות של המטריקס bmd.draw(mc,mat); //איתחול המחלקה ביטמפ ויציקת הביטמפדטא לתוכה var bm:Bitmap = new Bitmap(bmd); //יצירת ילד אל הבמה addChild(bm);
דוגמא נוספת, אני בוחר את כל הפיקסלים האדומים במקור שלי, והופך אותם לשקופים, בשביל לבצע את השינוי הזה, נרוץ בלולאה על הביטמפדטא נבדוק את צבע הפיקסל ואם הוא שווה לצבע אדום(ff0000), נהפוך אותו לשקוף:
//הגדרנו את האטימות כאמת כיוון שאנחנו רוצים לשקף חלק מהביטמפדטא var bmd:BitmapData = new BitmapData(mc.width,mc.height,true); bmd.draw(mc); //מעבר על כל הפיקסלים במפת הסביות שלנו //i רוחב //j גובה for(var i:uint=0;i<bmd.width;i++) { for(var j:uint=0;j<bmd.height;j++) { //בדיקה של צבע הפיקסל הספציפי if(bmd.getPixel(i,j)==0xff0000) { //השמת צבע "שקוף" על הפיקסל הנוכחי //המספר המועבר הוא בעצם מספר רגיל+שני ספרות בסוף המציינות את רמת השקיפות bmd.setPixel32(i,j,0x00000000); } } } //איתחול המחלקה ביטמפ ויציקת הביטמפדטא לתוכה var bm:Bitmap = new Bitmap(bmd); //יצירת ילד אל הבמה addChild(bm);
ישנן עוד המון אפשרויות והדוגמאות כאן הן רק ההתחלה, וכמו שנאמר ואידך זיל גמור (ומכאן – השלם את הלימוד בעצמך).