ארכיון הבלוג

טיפים!

טיפ ראשון: ציר זמן

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

טיפ שני: יצוא 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).

הקובץ יוסיף את הקוד שבונה את ה-tlf לתוך ה-swf ובא לציון גואל.

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


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