ארכיון הבלוג

פרוייקט הדגל! לחברת 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

שימוש ב-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);


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