11-06-2006, 18:49
|
|
|
|
חבר מתאריך: 14.01.06
הודעות: 7,485
|
|
"הכנס את הקוד של היריה" שם אתה מכניס את הקוד שאתה רוצה שזה ירה.
בעיקרון הקוד הולך ככה:
קודם כל, אתה צריך להדביק את המוביקליפ של כדור מהספריה, עושים את זה בעזרת attachMovie:
קוד:
_root.attachMovie("shotMC","shot"+count,_root.getNextHighestDepth());
מה שהלך כאן זה בעצם זה:
אתה מדביק את היריה לבמה. הלינקאג' של היריה בספריה הוא shotMC.
*לינקאג' הוא בעצם כמו שם מזהה למוביקליפ בשביל לזמן אותו מהסיפריה. בשביל לקבוע לינקאג' למוביקליפ, אתה פותח את הספריה: window>library, מקליק עם מקש ימיני על המוביקליפ של הכדור, בוחר בlinkage לוחץ על הcheckbox שכתוב ליד: export for action script only, ואז בתיבת הטקסט העליונה אתה רושם shotMC. כך נתת למוביקליפ שלך לינקאג'.
אחרי הפסיק, אתה נותן למוביקליפ החדש שהדבקת על הבמה שם חדש: המילה shot בחיבור משתנה מיוחד שתצטרך לאתחל ולהגדיל כל פעם שאתה יורה, בגלל שאנחנו רוצים שלכל יריה יהיה שם משלה.
*בשביל לעשות זאת, לפני שורת הקוד הזאת:
קוד:
onClipEvent(enterFrame){
אתה כותב את זה:
קוד:
onClipEvent(load){
var count:Number=0;
}
מה שזה עושה, זה בעצם כשהמוביקליפ שלך נטען, זה מאתחל משתנה count מהערך אפס.
בשביל להשתמש במשתנה זה, עליך להגדיל אותו כל פעם באחד כשאתה יורה, אז המשפט הבא יבוא לפני שורת הקוד הראשונה שאני כתבתי:
החלק הבא של השורה הראשונה שאני כתבתי: root.getNextHighestDepth_, בעצם מחפש את העומק הבא הריק על הבמה בשביל שהמוביקליפ יתפוס אותו.
*עומק: תאר לעצמך שלכל מוביקליפ הנוצר בסרטון יש שכבה מיוחדת, והשכבה הזאת בעצם יכולה להחזיק מוביקליפ אחד. זאת אומרת שאם לאותה הכבה תדביק כמה מוביקליפים, אז כולם חוץ מהאחרון ימחקו.
אם בתוך מוביקליפ יש לך עוד מוביקלים, אז למוביקליפ החיצוני יש שכבות משל עצמו, והוא לא קשור לבמה הראשית, זאת אומרת שנגיד בבמה הראשית יש לך 5 מוביקליפים, אז העומק הריק הבא הוא 6. אבל אם במוביקליפ אחד מהם יש לך נגיד 2 מוביקליפים אז השכבה הריקה הבאה היא 3, משמע המוביקליפים על הבמה לא משפיעים על מוביקליפים בתוך מוביקליפים.
מסיבה זו אני מציע לך לעשות מוביקליפ מיוחד בשביל יריות. בצורה הבאה:
קוד:
_root.createEmptyMovieClip("shots",_root.getNextHighestDepth());
מה שאתה עושה זה בעצם ליצור מוביקליפ חדש על הבמה בשם shots, ולתפוס איתו את הערך הריק הבא שיש.
*את הקוד הזה אתה רושם מתחת לשורה שנתתי לך שמאתחלת לך את את המונה של היריות.
בשביל להדביק את היריות למוביקליפ החדש שיצרת, ולא לבמה, אתה משנה את השורה הראשונה שנתתי לך כך:
קוד:
_root.shots.attachMovie("shotMC","shot"+count,_root.shots.getNextHighestDepth);
עכשיו יש לך את הכדור מודבק. אני מניח שתרצה שהקורדינטות שלו יהיו לפי הקורדינטות של השחקן:
קוד:
_root.shots["shot"+count]._x=_root.char._x;
_root.shots["shot"+count]._y=_root.char._y;
בהנחה שהinstance name של השחקן הוא char.
*את הקוד הזה אתה שם מתחת לשורה הראשונה שכתבתי לך(שמדביקה את המוביקליפ מהספריה).
אני מניח שתרצה שהמוביקליפ יהיה בזוית של השחקן:
קוד:
_root.shots["shot"+count]._rotation=_root.char._rotation;
*את השורה הזאת אתה שם אחרי 2 השורות האחרונות.
בשביל לקדם את הכדור בכל פריים, אתה כותב את זה:
קוד:
for(var i:Number=0;i<=count;i++){
_root.shots["shot"+i]._y -= Math.cos(_root.shots["shot"+i]._rotation*(Math.PI/180));
_root.shots["shot"+i]._x += Math.sin(_root.shots["shot"+i]._rotation*(Math.PI/180));
}
את הקוד הזה אתה שם אחרי השורה האחרונה שנתתי לך.
מה שהקוד עושה זה עובר בלולאה דרך כל המוביקליפ בכל פריים, ומקדם אותם לפי כיוון הטיסה שלהם. כפי שאתה רואה יש פה טיפה טריגונומטריה.
הקוד הסופי אמור להראות כך:
קוד:
onClipEvent(load){
_root.createEmptyMovieClip("shots",_root.getNextHighestDepth());
var count:Number=0;
}
onClipEvent(enterFrame){
count++;
_root.shots.attachMovie("shotMC","shot"+count,_root.shots.getNextHighestDepth());
root.shots["shot"+count]._x=_root.char._x;
_root.shots["shot"+count]._y=_root.char._y;
_root.shots["shot"+count]._rotation=_root.char._rotation;
for(var i:Number=0;i<=count;i++){
_root.shots["shot"+i]._y -= Math.cos(_root.shots["shot"+i]._rotation*(Math.PI/180));
_root.shots["shot"+i]._x += Math.sin(_root.shots["shot"+i]._rotation*(Math.PI/180));
}
}
*שים לב שאתה הקוד הזה אתה צריך לתת למוביקליפ char(השחקן)
_____________________________________
נערך לאחרונה ע"י dragoon בתאריך 11-06-2006 בשעה 18:52.
|