למומחי הACTION SCRIPT

al19

New member
למומחי הACTION SCRIPT

שאלה, איך אני קובע שקוד מסויים יהיה תקף רק לFRAME מסויים לדוגמא משחק טריוויה, אני עושה לו מתג SWICH שכאשר המשתמש לוחץ על A, או B וכו' ..הוא רושם אם התשובה נכונה או לא.. וקופץ לפריים עם השאלה הבאה אבל הבעיה מתחילה בזה שבפריים עם השאלה הבאה המשתמש צריךל לחוץ שוב על אותו הA או B ועכשיו התשובות לא נכונות הם שונות כבר ושרשמתי את אותו הקוד פשוט בפריים אחר ותשובות אחרות הוא רושם לי שיש קוד כפול ושזה לא חוקי איך פותרים את הבעיה הזאתי ? המון המון תודה ! הקוד לדוגמא > import flash.events.KeyboardEvent; import flash.events.Event; function answerFN (keyEVT:KeyboardEvent):void { switch (keyEVT.keyCode) { case 65: trace ("think again buddy"); gotoAndStop(10); break; case 66: trace ("think again buddy"); gotoAndStop(10); break; case 67: trace ("think again buddy"); gotoAndStop(10); break; case 68: trace ("GOOD THINKINK BUDDY"); gotoAndStop(10); break; } } symbal1.addEventListener (KeyboardEvent.KEY_DOWN, answerFN);
 

yoe66

New member
דרך פשוטה לעקוף את הבעיה

היא להביא כל פעם את הסוויץ מהספריה כל פעם עם שם אחר
 

al19

New member
ווואו זה היה מהיר ..

שנייה, רגע, מה ? לא הבנתי ...(אני בשיעורים הראשונים של AS .. ) לא הבנתי
 

yoe66

New member
הסברתי פה רק עקרון

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

al19

New member
אני לא מנסה לתת לאותו כפתור אותו הקוד...

אני מוסיף EVENT LISTENER לסטייג' עצמו ועושה בעצם מבחן אמריקאי עם כמה שאלות, אז בעצם אני צריך ללחוץ על אותו הA B C D ואני מוסיף את הEVENT LISTENER לבמה אני לא יכול להוסיף את הEVENT LISTENER של לחיצת כפתור על עצם מסויים (זה לא יפעל ניסיתי .. או בטח יש דרך שאני לא מכיר) אז... אממ.. איך עוקפים את זה ? נסיון להסבר > ככה נראה הקוד של השאלה > stage.addEventListener (keyboardEvent_KeyDown, answer) ; function answer (key:keyboardEvent):void { if (key:keyCode==keyboard.D) { trace ("answer currect"( ; } } המון המון תודה שוב !!!
 
עדיף לבנות את זה אחרת לגמרי

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

al19

New member
זה בסדר אבל לא פותר את הבעיה

יש לכם קוד לדוגמא שאני יבין איך זה פותר את הבעיה ?
 

al19

New member
טקסט דינאמי אחד ?

לדוגמא: אם לטקסט הדינאמי שלי נקרא: Dynamic_Text (מקורי אני יודע) והתשובות לשאלות 1 , 2 ו3 יהיו נגיד, A, B, C אז הקוד יהיה ? Dynamic_Text.TEXT= ואז את האלה עצמה עם התשובות והכל stage.addEventListener (keyboardEvent.KEY_DOWN, answer); function answer (e.Event);void } if e.keyCode= keyboard.A { Dynamic_Text.TEXT= ואז את השאלה הבאה } { אבל אז כאילו איך ממשיכים את זה ? זה מעביר פעם אחת את השאלה איך ממשיכים את הקוד ?
 
מערך

אתה בונה מערך אחד, שמכיל את כל השאלות והתשובות. בכל פעם שמישהו בוחר תשובה, אתה קורא לפונקציה שמעבירה למקום הבא במערך (קרי, השאלה הבאה + התשובות הבאות). לדוגמה: var questionsArray:Array = new Array(); var currentQuestion:Number = 0; questionsArray.push({answer1: "Yosi",answer2:"Ran",answer3:"I don't know", question: "What is your name?", correctAnswer:2}); questionsArray.push({answer1: "To seek for the holy grail",answer2:"Don't know",answer3:"Hmmmm", question: "What is your quest?", correctAnswer:3}); questionsArray.push({answer1: "Yes",answer2:"No",answer3:"Black",answer4:"White", question: "What is your favorive color?", correctAnswer:2}); function changeAnswers(e:Event) { questionMC.text = questionsArray[currentQuestion].question; answer1.text = questionsArray[currentQuestion].answer1; answer2.text = questionsArray[currentQuestion].answer2; answer3.text = questionsArray[currentQuestion].answer3; } כאן למשל יש אובייקט בתוך המערך שקובע מה התשובה הנכונה. אתה יכול לבדוק לפי משתנים על מה לחצו, למשל var chosenAnswer:Number = e.target.name.split("button")[1]; if (questionsArray[currentQuestion].correctAnswer == chosenAnswer) { doSomething() } else { doSomethingElse() } מקווה שההודעה לא תתחרבש. בהצלחה.
 
למעלה