ארכיון הבלוג

משחקים ולומדות לשנת שמיטה

פרויקט גדול שעליו עבדנו בשנה הקודמת בשביל להספיק לשנת תשס"ה – שנת שמיטה.

סדרה של משחקים ולומדות לשנת השמיטה שנבנו עבור מכון התורה והארץ,

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

בנוסף הוספת משחקים חדשים ושדרוג של המשחקיות והכיף במשחקים הקיימים.

הלומדות והמשחקים בנויים בצורה כזו שתאפשר לתלמידים ללמוד את הנושא בחלק הלומדות, ואח"כ לתרגל את הלימוד ולשחק בו בחלק המשחקים.

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

הלומדות:

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/

שנת שמיטה טובה לכולם.

.משחקי-שמיטה

פרוייקט הדגל! לחברת Xtreamer

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

הם ביקשו אפליקציה שפותחת אפליקציות שונות, מהר מאוד התברר שהם התכוונו שאני אתכנת להם לאונצ'ר – לאונצ'ר (Launcher) זו אפליקציה שמשנה את הUI המקורי של גוגל ובעצם הופכת להיות התצוגה של מערכת ההפעלה.

את האפליקציה בניתי בסטרלינג (Starling) ל-ADOBE AIR, והיא כללה הרבה מאוד בדיקות ומיטוב ביצועים בשביל להגיע לתוצאה הטובה והמהירה ביותר (במערכת הפעלה זה משהו קריטי), בנוסף השתמשתי בהרבה extensions שהם הרחבות שמאפשרות גישה למקומות שב-AIR הרגיל לא ניתן להגיע אליהם (את ההרחבות כתבו עבורי החבר'ה מ-maorbar – מומלצים ביותר)

העבודה הייתה רבה ומתישה, למדתי המון, ישנתי מעט.

ב"ה בסוף השבוע האחרון הדפיסו את האפליקציה על מאה אלף מכשירים!!!

המוצר הסופי נמכר ונשלח לאנשים, איזה התרגשות 🙂

העמוד של המוצר: http://www.xtreamer.net/MultiConsole/index.html

דמו של המוצר (קצת סבלנות עד שיטען – שווה את זה): http://www.xtreamer.net/MultiConsole/demo.html

jpeg

טיפ שלישי: לדעת שיש סאונד ברקע
יש פעמים שבהם נבנה holder שיטען קבצים חיצוניים, או איזה קובץ שמריץ כל מיני ילדים, ומראש אין לנו אפשרות לדעת האם מתנגן סאונד במה שנטען לתוך הקובץ שלנו.
בשביל לדעת האם יוצא מהקובץ שלנו איזה צליל ניתן להפעיל את הפונקציה הבאה soundPlay:
function soundPlay()
 {
 var mp3ba:ByteArray = new ByteArray();
 SoundMixer.computeSpectrum( mp3ba );
 var soundOut = mp3ba.readFloat();
 if (soundOut != 0)
 {
 return true;
 }
 else
 {
 return false;
 }
 }

אם יתנגן סאונד נקבל חזרה true אם לא נקבל false
טיפ שני: יצוא swf עם תיבת טקסט מסוג tlf

כשעובדים עם תיבות טקסט מסוג 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);


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