1.Flash 24h- Action Script

Reviews
Shared by: xuanduoc84
Categories
Tags
Stats
views:
14
rating:
not rated
reviews:
0
posted:
10/23/2009
language:
VIETNAMESE
pages:
0
mercury@Updatesofts.com Ebooks Team Gi th 01: Làm quen v i AS, Your First Look at AS AS là m t ngôn ng l p trình ư c xây d ng trong Flash. AS gi ng như các ngôn ng khác như Javascript, C++ v.v. nhưng b n không c n bi t các ngôn ng khác h c AS (n u có thì càng d hơn). B t âu h c AS, thì chúng ta coi th AS là gì, làm ư c nh ng gì và có quan h gì v i các ch c năng khác c a Flash. Trong bài này, b n s tìm hi u coi AS ra i như th nào, xem cách vi t AS làm sao, tìm hi u AS làm ư c nh ng gì và sau sau cùng là xác nh ư c nơi lưu tr AS trong Flash. i sát nghĩa và ti n cho sau này, mình s không d ch m t s t ng ra ti ng vi t như script, movieclip v.v. Script là gì? AS là ngôn ng l p trình, v i các l nh sai khi n Flash movie làm vi c theo úng nh ng gì mình vi t (ch có mình vi t sai ch computer không làm sai ). Ph n nhi u thì AS ch làm vi c trong môi trư ng c a Flash, tuy nhiên AS cũng có th g i l nh cho browser, h i u hành v.v. Script có th ng n g n vài ch hay cũng có th dài c trăm trang. Script có th vi t g p l i m t ch hay cũng có th vi t rãi rác kh p nơi trong movie. Xu t x c a AS AS rât gi ng ngôn ng C++, Java, javascript .v.v và ư c d a trên tiêu chu n do ECMA (European Computer Manufactuers Association) l p ra g i là ECMAScript. Nhi u ngư i hi u l m r ng AS d a trên Javascript, nhưng th c ch t c 2 u d a trên ECMAScript. Lúc u vi t script trong Flash r t ơn gi n và cho t i Flash 4 m i u c phát tri n nhưng cũng v n còn "thô sơ" v i nh ng vòng l p và các i u ki n "if...else". Cho t i Flash 5 thì dân Flash m i có th l p trình và g n li n script v i các y u t trong movie. . Sang t i Flash MX thì AS ã tr thành ngôn ng l p trình toàn di n v i hơn 300 câu l nh, hàm .v.v Nh n biêt AS AS ơn gi n là nh ng câu l nh ư c vi t b ng ti ng Anh (vì l này mà mình s không d ch các tư ti ng Anh liên quan n AS, và m t ph n thì mình không gi i thu t ng computer hay ti ng vi t cho l m) và các phép tính và d u câu. Ví d sau: ư c ActionScript on (press) { gotoAndPlay ("my frame"); } B n có th gi i nghĩa o n mã trên b ng cách tìm hi u các t chính trong ó. Ch "press" g i ý răng ngư i dùng ang kích chu t vào m t cái gì ó, (và trong trư ng h p này là cái nút) Ch k ti p "gotoAndPlay" do 4 ch "go to and play" g p l i, g i ý r ng AS ra l nh cho Flash t im t i m nào ó trong movie và b t u chơi t i m ó. AS có th làm nh ng gì? Flash movie g m có các scence (c nh), và m i c nh s có 1 timeline (th i gi n bi u???) và timeline s có các frame (khung) b t u t s 1. Thông thư ng thì Flash s chơi t frame 1 cho t i frame cu i c a scence v i t c c nh và d ng l i hay l pl it u tuy theo ngư i làm Flash. M c ích chính c a AS là thay i th t trong cách chơi c a Flash. AS có th dùng b t frame nào, hay ch y ngư c tr l i frame trư c hay nh y vài frame r i chơi ti p. Nhưng ó không ch là nh ng gì AS có th làm ư c. AS có th bi n film ho t hình c a Flash thành m t chương trình ng d ng có s tương tác c a ngư i dùng. Dư i ây là nh ng cơ b n mà AS có th làm: • • • • • • • • Ho t hình: B n không c n AS làm ho t hình, nhưng v i AS thì b n có th t o nh ng ho t hình ph c t p hơn. Ví d , trái banh có th tưng xung quanh mành hình mà không bao gi ng ng, và tuân theo các nh lu t v t lý như l c hút, l c ma sát, l c ph n v.v N u không có AS thì b n c n ph i dùng c hàng ngàn frame làm, còn v i AS thì ch 1 frame cũng Navigation (hông bi t d chlàm sao cho hay ): thay vì movie ch chơi t ng frame 1 theo th t thì b n có th d ng movie b t c frame nào, và cho phép ngư i dùng có th chơi b t c frame nào .v.v Thu nh p thông tin t ngư i dùng (user input): b n có th dùng AS h i ngư i dùng 1 c u h i, r i dùng thông tìn ó trong movie hay có th g i cho server hay làm nh ng gì b n mu n. Thu nh p thông tìn t các ngu n khác: AS có th tương tác v i server và l y các thông tin t server hay text file Tính toán: AS có th làm b t c phép tính nào mà toán h c cho phép Thay i hình nh trong movie: AS có th thay i kích thư c, màu s c, v trí c a b t c movie clip (MC) nào trong movie flash c a b n. B n có th t o thêm phiên b n hay xoá b i phiên b n c a MC v i AS Phân tích môi trư ng c a máy tính: V i AS b n có th l y gi t h i u hành hay a ch ang chơi movie Flash ó. i u khi n âm thanh trong flash movie: AS là cách t t nh t i u khi n âm thanh trong Flash,AS có chơi ch m, chơi nhanh, ng ng, quay vòng .v.v bât kỳ âm thanh nào trong Flash. Phát tri n các kh năng c a AS i u quan tr ng nh t mà AS có th làm cho b n là nh ng gì chưa ai nghĩ t i V i AS và trí tư ng tư ng và óc sáng t o c a b n thì không có gì là không th x y ra v i AS ư c. M c ích c a các sách, và c a VNFX là hư ng d n b n hi u bi t v Flash t ó b n có th t dùng nó Vi t AS âu làm ra nh ng s n ph m tuy t v i mà không ai có. Câu h i u tiên nh ng ai tìm hi u AS thư ng h i là "Vi t AS vào âu?". Flash có m t môi trư ng làm multimedia khá ph c t p. N u b n ã dùng Flash r i hay ã c qua các hư ng d n i kèm v i Flash, thì b n ã bi t các y u t cơ b n như timeline, key frame v.v. nêu b n chưa bi t thì mình khuyên b n nên tìm hi u trư c r i tiêp t c ây. Ơ trong m c Flash T ng Quá, VNFX có post link download 3 cái CD hư ng d n cơ b n cho ngư i chưa bao gi dùng Flash. Vi t AS time line AS có th vi t vào key frame b t c timeline nào. làm như v y, b n ch n key frame trong timeline trư c r i b n m Action Panel ra (có th nh n F9) viêt hay xem AS ã ư c vi t ó. Mình khuyên b n nên dùng Action Panel dư i d ng Expert hơn là Normal, vì như v y b n s h c ư c nhi u và l hơn. Khi vi t AS vào key frame như v y thì AS key frame ó s ho t ng khi mà Flash chơi t i key frame ó. Ví d như l nh AS stop() ư c t key frame 5 thì Flash chơi t i key frame 5 thì s d ng l i cho t i khi có l nh khác. cách vi t này g i là vi t vào time line M t trong nh ng lý do vi t script vào time line là khi b n mu n dùng function (hàm), vì function cho phép chúng ta tái s d ng o n mã ó t nhi u nơi, nhi u level khác. Viêt AS nút Các ph n t c a Flash movie ư c g i là symbol (bi u tư ng). thư ng thì symbol là các hình nh. Và có 3 lo i symbol: button (nút), graphich (hình nh), movie clips( o n phim). 3 lo i trên thì AS không th vi t li n v i graphic, còn button và movie clip thì OK. Nút s không có tác d ng gì c n u như không kèm AS lên trên nó. Mu n kèm AS vào nút thì ch n nút trên stage (sân kh u: di n tích c a flash movie), r i sau ó m Action panel và vi t vào ó như ta vi t vào key frame. AS vi t trên nút ch ho t Vi t AS MC ng khi chu t ho c bàn phím tác ng lên nút mà thôi MC khác v i graphic ch MC ư c t tên khi mang vào stage, MC thư ng là hình ành ng, và có th có AS kèm theo MC. vi t AS vào MC thì cũng tương t như ta làm v i nút. AS kèm theo MC có th i u khi n MC ó hay là các MC trong cùng m t timeline hay các timeline ngoài movie Bài t p 1. T o m t movie m i 2. t o 3 key frames 3. Dung Flash v m i hình khác nhau cho m i frame 4. Ch y th movie (nh n Control + enter) 5. Sau ó tr l i timeline, vi t vào keyframe 2 o n mã : "stop();" 6. Cho ch y th movie l n n a 7. Và kỳ này b n ch th y Flash chơi t i frame th 2 thì ng ng, và b n ã thành công trong vi c vi t AS : Gi th 02: S d ng Action panel, Using the Script Editing Window N u dân ho coi Timeline là nhà thì dân l p trình v i AS coi Action Panel là nơi cư ng c a mình, t i ó dân AS có th thay i, vi t t t c các l nh. Vì v y r t quan tr ng là b n có th s d ng quen thu c Action Panel Flash MX s d ng các panel giúp b n có th l y các thông tin v movie b n ang làm m t cách d dàng. Khi b n cài t và chay Flash l n u tiên, Flash s h i b n mu n s d ng Flash như th nào và Flash s x p t các panel cho h p lý. B n cũng có th thay i cách x p t theo ý c a b n. Nói chung b n nên x p t các panel c a b n làm sao cho thu n ti n cho b n nh t, và cái này cũng c n có kinh nghi m ó Mình dùng dual monitor, mình close h t các panel ch gi l i 2 cái chính trên màn hình, mình kéo cái action panel và property panel qua m t bên monitor, còn cái bên kia cho cái stage, n u c n m panel nào thì mình dùng phím t t m . S d ng Action panel có 2 cách: bình thư ng (normal) và chuyên d ng (expert). Khi m i ch y máy l n u thì Action panel ư c set dư i d ng bình thư ng. d ng bình thư ng thì b n không có th ánh tr c ti p các câu l nh, mà ph i ch n t các menu bên tay trái c a panel. V i setup như v y thì b n không bao gi ph m ph i l i khi vi t AS c . Mình s b ph n hư ng d n dùng normal vì mình th y dùng normal mode s không bao gi ti n ư c, dùng expert mode lúc u hơi m t nhưng b o m là các b n s h c ư c mau và nh lâu hơn S d ng Action panel v i expert mode thì b n có nhi u t do hơn, nhưng t do ng nghĩa v i trách nhi m nên b n ph i c n th t khi vi t code. T normal mode chuy n sang expert mode thì nh n phím t t CONTROL + SHIFT + E, chuy n ngư c l i thì dùng CONTROL + SHIFT + N (nh kích chu t vào action panel trư c khi dùng phím t t). B n có th i t Normal mode sang expert mode b t c lúc nào, nhưng i ngư c l i thì ch ư c khi mà code c a b n không có l i. Action panel có popup menu (mũi tên ch xu ng dư i, n m góc ph i c a action panel) và trong ó có nhi u l nh r t t t cho b n khi b n dùng Action panel, nh t là i v i Expert mode. B n có th tìm và thay th b t c câu nào, ch nào trong script c a b n. Phím t t cho tìm ki m là Control + F và cho thay th là Control + H, nh n F3 thì Flash s ti p t c tìm ch , câu b n mu n tìm. M t l nh n a là "Goto Line" giúp b n tìm ư c câu b n mu n tìm. L nh "Check Syntax" s rà soát script c a b n và tìm nh ng l i cú pháp. Lúc m i t p vi t AS, thì dùng nên thư ng xuyên dùng Chech Syntax check l i trong sctipt. L nh ti p theo là "Auto Format" và "Auto Format Options" giúp cho b n trình bày script c a b n cho d c hơn. B n có th thay i màu s c, font ch v.v. cho script c a b n cho b n d c code hơn b ng cách vào Edit > Preferences > ActionScript Editor. Các ph n còn l i c a pop-up window cho phép b n ư c xu t hay nh p AS dư i d ng text file và in script ra gi y. Tuy g i là expert mode nhưng th c ra dùng còn d hơn là normal mode. B i vì dư i expert mode thi Action panel ch ng khác gì chương trình "note pad" hay "text pad". B n ch vi c vi t nh ng gì b n mu n vào ó. Khi dùng dư i expert mode, b n v n có th tham kh o các câu l nh, các cú pháp c a AS cái khung bên trái c a Action Panel. Và n u b n tôn th m t s quy t t thì b n s s ư c ch c năng "Code Hint" c a Action Panel, ch c năng này t o nên nhưng khung nh nh trong ó có nh ng câu l nh c a AS úng h p quy cho b n l a ch n. tr thành m t "cao th " v AS thì b n không th nào không n m v ng v Action panel ư c. Sau ây là bài th c hành nho nh , giúp b n làm quen v i Action panel dư i expert mode 1. T o m t movie m i 2. Ch n key frame u tiên (frame s 1) c a layer 1 (mình không d ch ch layer = l p vì d trùng v i class= l p) 3. M Action panel (có th dùng phím t t hay vào trong ph n Window > Action panel 4. Chuy n sang expert mode (dùng phím t t hày vào trong pop-up menu c a Action panel i) vi t AS 5. Vào ch 6. Vi t o n code sau: ActionScript trace ("I am expert"); Khi b n th movie thì dòng ch "I am expert" s ư c hi n ra trong Output panel, và mình s c p n l nh trace() vào nh ng gi t i Gi th 03: H c cách l p trình, Learning to program L p trình có th coi là khoa h c và ngh thu t. Vì v y l p trình viên gi i c n có 2 i u ki n ki n th c v ngôn ng mà h dùng và tính sáng t o, ít khi nào có trư ng h p ch có 1 cách l p trình cho m t án l m. Trong quá trình vi t AS, b n s t o ra cho riêng mình m t phong thái vi t code khá c trưng. Có th m i u b n s dùng phong cách vi t code trong nh ng bài vi t này, r i sau ó b n s t t chuy n sang phong cách c a riêng b n Thư ng thì khái ni m v các ngôn ng l p trình u gi ng nhau, và trong bài này s bàn v nh ng khái ni m l p trình và làm sao áp d ng nó trong Flash Cách suy nghĩ c a computer Th t ra computer d t l m ch ng bi t suy nghĩ âu, ch bi t làm vi c theo m nh l nh m t cách không suy nghĩ. Vì v y computer không bao gi l i mà l i ngư i vi t l nh sai khi n nó. Còn AS ch là m t chu i l nh, ch th cho computer, hay úng ra là Flash ph i làm nh ng gì trong môi trư ng runtime (runtime environment). Khi vi t AS thì b n nên t coi mình "ngu" như computer, và c l i nh ng dòng l nh AS và nghĩ t i k t qu c a vi c thi hành l nh ó. Khi t t mình vào v trí c a computer, b n s oán ư c script c a b n s làm nh ng gì trong môi trư ng runtime, và b n có th th y ra nh ng l i mà b n vô ý m c ph i. Khi mà b n tr thành di n viên tuy t v i trong vai computer thì b n cũng tr thành m t l p trình viên tài ba. L nh, hàm, và phép tính L nh (command) là y u t căn b n c a AS ch th Flash làm m t hành ng c th . L nh ư c thi hành tuy t i trong các trư ng h p kh thi. Ví d n u như ta vi t gotoAndPlay(5) cho Flash t i frame 5 và chơi, nhưng n u trong movie không có frame 5 thì l nh không th làm ư c. Hàm (function, mình s dùng t function nhi u hơn là hàm) là ph n tính toán các phép tính và cho ra (return) m t k t qu . Ví d hàm random() s cho ra m t con s ng u nhiên nào ó, hay hàm sqrt() s cho ra giá tr bình phương c a 1 s mà hàm nh n ư c truy n cho. L nh và hàm u có th ư c truy n cho 1 hay nhi u thông s (parameter, mình s dùng t parameter thay vì thông s ), và nh ng thông s ó giúp cho hàm và l nh ư c c th hơn. Ví d gotoAndPlay(5) thì 5 là thông s , n u như không có thông s này thì l nh "gotoAndPlay" s không bi t rõ ph i nói Flash i âu. cũng như hàm sqrt() cũng c n có thông s cho ra giá tr bình phương c a s y. S khác bi t gi a hàm và l nh chính là các phép tính. Phép tính thư ng là nh ng d u +, -, *, / hay là phép so sánh <, ==. >. Hàm có phép tính, l nh thì không Bi n s Bi n s (parameter) c n thi t trong m i ngôn ng l p trình vì nó lưu tr thông tin v m t cái gì ó trong chương trình. Bi n s g m có 2 ph n: tên và giá tr . ôi khi b n ch c n lưu tr thông tin trong bi n s m t th i gian ng n, ví d b n mu n Flash thi hành 1 s l nh 10 l n thì b n c n m s l n mà Flash ã thi hành l nh có th ra l nh cho Flash ngưng ngay sau khi thi hành xong l nh l n th 10. Nhưng cũng có lúc b n c n ph i lưu l i thông tin trong m t th i gian dài hay trong su t quá trình th i gian Flash chơi. Tên c a bi n s thư ng là m t nhóm t , hay cũng có th ch ơn gi n là 1 t , hay 1 ch cái. Thông thư ng tên c a bi n s nên rõ ràng d hi u và nói lên ư c tính ch t c a thông tin mà bi n s ang lưu tr . Ví d n u b n mu n lưu tr tên c a ngư i dùng trong bi n s thì b n nên t tên bi n s ó là userName (mình nghĩ t tên ti ng Anh d hi u hơn, vì ti ng vi t không d u cũng d b hi u l m), b n có th t tên bi n s ó là "n" nhưng quá ng n, ngư i c script c a b n s khó hi u, n u t là name thì d trùng v i các bi n s hay t khoá khác (_name là m t c tính c a i tư ng MovieClip) c. Và các l p trình viên Khi vi t AS, b n c n lưu ý vi t làm sao cho d hi u và d quy ư c tên bi n s theo quy t c sau: tên bi n s luôn vi t thư ng ch u tiên, và vi t hoa ch cái u tiên cho các ch k ti p, ví d userName, userLastName, userMotherMaidenName v.v. Lưu ý r ng ch các ch cái và s m i ư c dùng âu tên b ng ch cái. t tên cho bi n s , và luôn b t lưu tr nhi u lo i thông tin, và ngay m i lo i thông tin cũng Có nhi u lo i bi n s có th có nhi u lo i khác nhau n a. Như s (number) là m t lo i giá tr c a bi n s , và dư i nó còn có các lo i khác như s nguyên (integer), s ... không nguyên (floating, double). B n cũng có th dùng bi n s ch a các chu i (chu i g i t t cho chu i ch cái), chu i có th ch có 1 ch cái, nhi u ch cái hay là không có gì h t, t t c các chu i sau ây u h p l : "ablsdfjksl", "a", " ", "". Khi vi t m t chu i thì c n dùng d u ngo c kép ("") b t u và k t thúc chu i. Trong các ngôn ng l p trình khác như Java, C++, hay ngay c ActionScript 2.0 trong Flash MX 2004 thì b n ph i xac nh trư c lo i thông tin nào b n s lưu trong bi n s . Nhưng v i ActionScript 1 (trong FlashMX) thì b n không c n làm vi c này. Ví d bi n s userName lúc u ch a 1 chu i, nhưng sau ó l i ch a 1 s nguyên thì cũng v nh pl . Ngoài chu i và s , còn có nhi u lo i khác n a nhưng chúng ta s nh ng bài sau. c p t i vào i u ki n Trong nh ng trư ng h p chúng ta không bi t nên ra l nh cho Flash ph i làm gì cho thích h p v i t ng tình hu ng thì ta có th dùng " i u ki n" ra l nh cho Flash. Ví d n u như b n ra l nh cho Flash không cho ngư i dùng coi m t o n phim trong Flash n u như user dư i 18 tu i, n u user trên 18 tu i thì hãy chơi o n phim y. Trư c tiên, Flash s so sánh s tu i c a user v i s 18, n u như s tu i c a user tho mãn i u ki n chúng ta t ra thì Flash s có 1 giá tr true t phép so sánh trên, và ngư c l i s là false i u ki n s luôn luôn là úng (true) hay sai (false). M t giá tr ch có úng hay sai thì ư c g i là boolean. Sau khi th c hi n phép so sánh và có ư c k t qu t phép so sánh trên, Flash s ch n m t trong 2 gi i pháp do chúng ta ưa ra cho t ng trư ng h p. ôi khi chúng ta c n có nhi u i u ki n hơn ch là ơn gi n "true" hay "false", ví d như b n mu n Flash chơi o n phim A cho ng ơi trên 18 tu i, dư i 18 nhưng trên 13 thì chơi o n phim B, và nh ng ai dư i 13 thì chơi o n phim C. Vòng l p Con ngư i làm ra computer vì lư i không mu n làm nhi u, mà bán cái cho computer. Nh t là ph i làm i làm l i 1 vi c nào ó thì càng nhàm chán. Vì v y vòng l p (loop) là m t y u t quan tr ng trong các ngôn ng l p trình. AS cũng v y, b n có th dùng vòng l p trong script. Trong vòng l p, " i u ki n" r t quan tr ng. M i vòng l p c n có i m b t u và i m d ng và m t i u ki n báo hi u i m d ng c a vòng l p. Ví d như b n mu n cho vòng l p ch y 10 l n thì s có 1 bi n s dùng m vòng l p, b t u t 0, M i vòng l p ch y thì bi n s này s tăng thêm 1. Khi t i 9 thì vòng l p s d ng l i. Sau ây minh ho c a vòng l p này: 1. M t s l nh tr ơc vòng l p 2. B t u vòng l p, set bi n s counter = 0 3. Làm m t s l nh trong vòng l p 4. Tăng bi n s counter +=1 5. N u bi n s counter nh hơn 9, tr l i bư c th 3 6. Ra kh i vòng l p, và ti p t c chương trình. ây chúng ta b t d u bi n s counter = 0 vì quy ư c thông thư ng các ngôn ng l p trình u b t u vòng l p 0. M t i m áng lưu ý c a vòng l p là i u ki n ư c xét trư c khi th c hi n các l nh trong vòng l p. Trong vài trư ng h p, i u ki n s ư c xét sau khi th c hi n các l nh trong vòng l p. Chúng ta cũng có th ngưng vòng l p trư c i m d ng c a nó, và i u này s ư c c p t i vào bài k ti p Làm nh ng i u không tư ng L nh, hàm, phép tính, bi n s , thông s , i u ki n, vòng l p là nh ng ph n căn b n trong ngôn ng l p trình, và cái này thì ai cũng bi t nhưng làm sao ph i h p l i thành m t chương trình hoàn h o m i là cái khó. Chương trình ơn gi n ch là m t t p h p l nh cho computer gi i quy t 1 v n nào ó. Vì v y trư c khi vi t 1 chương trình chúng ta c n ph i xác nh "v n " c n ph i gi i quy t. Ví d th c t ngoài i, m b n nh b n ra ch mua gà. Nhưng ch ơn gi n nói ra ch mua gà thì chưa vì bi t mua gà s ng hay gà làm r i. n u mua gà s ng thì mua lo i nào v.v. ó là chưa nói t i mua gà ch nào, giá c ra sao v.v. N u như b n m nói rõ là ra ch b n thành, mua 1 con gà mái d u, n ng kho ng 2 kg, v i giá kho ng 10000 thì th t là d dàng cho b n ph i không? Bi t ư c v n mua gà r i thì tìm cách mua gà. B n ph i "lên k ho ch", nên nh b n ch hay i taxi ra ch b n thành. N u i taxi i hãng nào, tìm s phone g i, v.v. còn nh b n ch i thì nh tên nào. R i nên m c qu n áo nào i ch . Ra n ch thì ph i m c c làm sao, tr ti n m t hay ghi s n . B n th y không, t m t chuy n mua gà ơn gi n v y mà có th t n c ngày tr i lên chương trình Vi t AS, b n c n ph i lưu ý t i t t c m i vi c dù nh cách m y cho Flash có th làm úng theo như ý b n trong m i tình hu ng. Các chương trình có bug không ph i vì ngư i vi t d mà vì chưa nghĩ t i h t m i tình hu ng thôi. Tóm l i, i u quan tr ng trong l p trình là kh n ng phân tích m t v n chính thành nhi u v n nh cho t i khi không còn nh hơn n a, và sau ó xây d ng chương trình t gi i quy y các v n nh lên d n cho t i v n chính. Vi t mã hoàn ch nh B (bug) ơn gi n là l i c a chương trình mà b n t o ra. Bug có th ch là nh ng l i cú pháp ơn gi n, hay là nh ng l i ph c t p do cách b n gi i quy t v n trong môi trư ng runtime. tránh có bug trong script c a b n thì b n nên t n nhi u thì gi vào giai o n phân tích, thi t k chương trình cho script c a b n. Ki m tra các o n code nhi u l n, và óng vai "computer" cho th t gi ng, ng suy nghĩ, mà thi hành các l nh trong script c a b n. Vi t t ng o n code nh r i ráp l i v i nhau (vì v y mà l p trình theo hư ng i tư ng ư c s d ng nhi u nh t) N u script c a b n có bug thì ng th mà n n lòng, vì không có chương trình nào do con ngư i làm ra mà không có bug c . Vì v y b n ng c g ng viêt code sao cho tuy t h o không có l i. N u có bug thì b n di t bug thôi B n có th chu n b "chi n u" v i bug b ng cách vi t code sao cho d hi u và d c, vi t nhi u chú thích cho các o n mã. ôi khi di t bug (debug) r t ơn gi n nhưng có khi cũng r t kho mà bi t bug âu di t. Flash có kèm theo vài công c giúp b n debug d dàng hơn, chúng ta s nói t i các công c này trong bài t i. Gi th 04: Viêt code trong Flash, Writing code in Flash Khi b n vi t script, b n s dùng t t c nh ng t khóa, và ký hi u v.v. V y trư c tiên chúng ta s phân tích m t o n script sau ây. o n script này g n vào 1 button. ActionScript on (press) { var myVariable = 7; var myOtherVariable = "Macromedia"; for (var i=0; i<10; i++) { trace(i); if (myVariable + 3 == 5) { trace(myOtherVariable); } } } Dòng u tiên xác nh nh ng o n code sau ó ư c kích ho t khi mà user nh n vào nút. hàm on(press) ch có th s d ng trong vào trong nút mà thôi. Ngoài ra b n có th dùng on(release) n u như b n mu n kích ho t o n mã trên sau khi user nh n nút, và buông tay. D u ngo c móc {} u và cu i o n code, gói o n code ó vào làm m t, và u ư c kích ho t khi nh n nút. Các b n lưu ý th y o n code ư c vi t vào trong cho d nh n th y c o n code này ph thu c vào on(press). Các b n nên vi t lùi vào trong cho nh ng o n code ph thu c vào 1 l nh hay hàm nào ó. Dòng th hai l p ra bi n s (mình s vi t t t là var nhe) tên myVariable, và t giá tr b ng 7 cho nó. tương t hàng k ti p l p ra var tên là myOtherVariable và cho giá tr c a nó là "Macrmedia". C 2 câu này ư c k t thúc b ng d u ch m ph y ; Dòng th 4 chính là vòng l p (mình s g i là loop cho ti n nhe) for (s nh c t i các lo i loop phía dư i) và các i u ki n c a loop này. Nó s l p 10 l n v i i u ki n b t u là i=0 và nó s tăng thêm 1 cho m i l n l p cho t i khi nó lên t i 9. Tương t như on(press), for loop cũng có o n code cho riêng nó, và ơc b c quanh b ng { } và o n code trong ó ch kích ho t khi mà các i u ki n c a for loop ư c th a mãn. Dòng th 5 là l nh trace(), l nh này ch vi t thông tin ra output window trong lúc b n làm vi c v i Flash, user s không th y ư c. K ti p là i u ki n, if là t khoá trong Flash, và nó s ki m tra k t qu c a phép so sánh myVariable + 3 ==5. N u mà k t qu là úng thì nó s kích ho t l nh trace trong, và s vi t ra output window giá tr c a myOtherVariable V y là b n ã th y m t o n script hoàn ch nh b ng AS r i. Ti p theo chúng ta s nói n vài ph n khác c a AS. Output window trên chúng ta có nh c t i output window, mà không nói rõ là gì. Output window là m t window trong software Flash, và ch xu t hi n khi mà b n ch y th movie. N u Flash compile movie cho b n và phát hi n ra l i thì Flash s vi t ra các output window này. Trong khi ch y th movie, thì l nh trace() m i có th vi t các thông tin ra output window. Output window r t quan tr ng trong vi t "di t b ", dùng nó chung v i trace b n có th quan sát các thông s , bi n s , các i tư ng, thu c tính i tư ng .v.v Trong lúc h c AS, b n có th vi t m t an script ng n không làm gì c nh ng ch vi t thông tin ra output window, như o n code trên. Th c hành: vi t thông tin ra output windown Cách t t nh t hi u rõ ch c năng c a output window là s d ng nó. Bây gi mình s vi t m t o n code ng n g i thôi tin ra output window nhe. 1. T o m t file m i 2. Ch n frame u tiên c a movie, m Action panel. Ch nh kích thư c cho action panel l n vi t, và nh dùng expert mode 3. Kích chu t vào ph n vi t script và vi t câu sau: trace("hello world"); 4. Ch y th movie (Control + Enter) 5. B n th y gì F2) output window? (N u output window c a b n chưa m thì hãy nh n Gi ng như action panel, output window có 1 cái pop-up menu nho nh trên góc ph i. B n có th dùng nó copy, xoá hay save n i dung c a output window hay có th tìm ki m ch , v.v. Ngoài ra, pop-up menu này có ph n cho b n ch nh ch "di t b ", b n có th ch n không c n output window in ra các l i (none), hay ch in l i (error), hay ch in c nh báo (error) và cu i cùng là in ra chi ti t các l i hay c nh báo (verbose) Bi n s c c b và toàn b trong gi th 3, chúng ta có nh c n variable (bi n s ) dùng lưu tr thông tin. Và s d ng variable trong AS r t d dàng. B n ch c n n nh giá tr cho variable. Ví d : myVariable = 7. Chúng ta t o variable có tên là myVariable và n nh 7 là giá tr cho nó. (b n có th t tên cho variable là b t c gì b n muôn) Bây gi b n có th th vi t o n code sau: ActionScript var1= 7; var2= "hello world"; trace ("var1: " + var1+ " /var2: " + var2); Khi b n ch y th movie thì output window s có hàng ch sau: var1: 7 /var2: hello world Vì s 7 và "hello world" ư c ch a trong var1 và var2 s ư c in ra. Variable có 2 lo i, local và global. Global variable (bi n s toàn b ) thì b n có th truy c p giá tr c a nó b t c nơi nào trong movie. T o global variable không òi h i m t b n ph i làm m t cái gì c bi t c , b n có th dùng nó như cách trên, và Flash t ng bi n nó thành global variable. Flash movie dùng h th ng level, và timeline c a movie chính là root leve (g c), còn các movie clip cũng chính là m t Flash movie nh trong Flash movie l n. Các hình nh, script trong m t movie clip là 1 level th p hơn root level. Local variable (bi n s c c b ), khác v i global variable, local variable ch có tr truy c p trong cùng m t o n code, hay trong cùng m t timeline. Khi dùng local variable thì khi ra kh i timeline hay o n code ó thì Flash s xoá local variable ra kh i b nh . Mu n t o local variable thì dùng t khoá var trư c tên c a local variable, ví d : var myLocal = "This is local"; B n ch c n dùng t khoá var 1 l n thôi, nh ng l n dùng sau ó thì ch c n dùng tên c a local variable thôi. Ví d o n code: ActionScript var myLocal = 9; myLocal = 11; trace(myLocal); Phép so sánh và các phép tính So sánh 2 giá tr trong AS r t ơn gi n, dùng các ký hi u toán h c như <, >, = Khi n nh giá tr thì dùng d u =, và cho khác bi t thì khi so sánh dùng ==. o n code sau xét coi giá tr c a a có b ng 7 không, và in k t qu ra output window. Và khi test o n code sau, b n s th y true output window ActionScript var a = 7; trace(a == 7); N u b n dùng l n = v i == thì s b l i l i này cho b n. B n có th dùng == runtime ch Flash s không có th tìm ư c so sánh 2 chu i m u t : ActionScript var myString = "Hello World."; trace(myString == "Hello World."); trace(myString == "hello world."); Khi b n test o n code trên thì b n s có ư c "true" và "false" output window, vì l n so sánh th nh t thì b ng nhau, nhưng l n th hai thì không vì ch H và h khác nhau. N u b n mu n th coi 2 giá tr có khác nhau không thì dùng ky hi u != ActionScript var a = 7; trace(a != 9); trace(a != 7); Hàm trace u tiên s cho ra "true" vì 7 khác 9, và cái th hai thì s cho ra "false" N u b n mu n th giá tr coi l n hơn hay nh hơn thì dùng > và < ActionScript var a = 7; trace(a < 8); trace(a > 6); trace(a < 1); o n code trên s cho ra "true", "true" và "false" trong output window vì "a" qu th t nh hơn 8 và l n 6, nhưng không nh hơn 1. N u b n mu n th giá tr coi l n hơn hay b ng nhau ho c là nh hơn hay b ng nhau thì dùng ký hi u >= và <= ActionScript var a = 7; trace(a <= 9); trace(a >= 5); trace(a >= 7); o n code trên s cho ra 3 k t qu "true" c . B n có th thay i giá tr c a variable v i các phép tính ơn gi n như c ng (+), tr (), nhân (*), chia (/). Ví d mu n thêm 4 vào giá tr c a a thì vi t a = a + 4. AS cũng có cách vi t t t như Java, C++ cho vì d này, a += 4 N u b n mu n thêm 1 vào a thì b n có th vi t như 2 cách trên a = a +1 và a += 1 và còn cách th 3 a++ . D u ++ ch làm tăng thêm 1 cho giá tr ó thôi. Có 2 cách dùng ++, 1 là sau variable như cách trên, và 1 cách thì trư c variable. Bây gi thư o n code sau: ActionScript var a = 7; trace(a++); trace(a); output window b n s th y 7 r i m i t i 8. dòng th 2, hàm trace s cho ra giá tr c a a trư c r i m i tăng giá tr c a a lên thêm 1. Bây gi xem ví d khác: ActionScript var a = 7; trace(++a); trace(a); output window b n s th y 8 và 8. dòng th 2 c a ví d này, hàm trace s tăng giá tr c a a trư c r i m i cho ra giá tr c a a. Tương t như ++, AS cũng có cách vi t t t cho giãm giá tr c a variable là d u -, -=, =- và --. Phép tính nhân và chia thì ch có *, *=, /, /= thôi. i u ki n Trong AS và các ngôn ng khác, if ... else chính là các t khoá c a i u ki n. Ti ng vi t có nghĩa là "n u ... n u không". T khoá if dùng k t qu c a s so sánh nào ó i t i quy t nh kích ho t m t o n code. o n code sau s so sánh giá tr c a variable a v i 7, n u úng thì Flash s chơi frame 10 ActionScript if (a == 7) { gotoAndPlay(10); } T khoá if luôn b t u cho 1 i u ki n và ti p theo s là s so sánh. Luôn t code so sánh gi a ngo c ơn (). T t c các code ư c kích ho t n u i u ki n ư c tho mãn s trong âu ngo c móc {}. T khoá else b sung cho if trong trư ng h p b n mu n th c hi n m t o n code n u i u ki n c a if không ư c th a mãn. Ví d : ActionScript if (a == 7) { gotoAndPlay(10); } else { gotoAndPlay(15); } N u trư ng h p c n th a mãn nhi u i u ki n thì có th dùng cú pháp if .... else if ... else. B n có th có bao nhi u cái else if cũng ư c. Nãy gi ta chi nói t i i u ki n d a trên 1 s so sánh, nh ng AS cũng cho phép dùng so sánh a h p (compound comparision). Trong i u ki n c a Flash ta có th dùng nhi u so sánh i t i m t k t qu chính xác hơn. Ví d n u như a l n 10 và a ph i nh hơn 15 thì ra l nh cho Flash chơi frame 10. ActionScript if ((a > 10) and (a < 15)) { gotoAndPlay(10); } T khoá and (còn có th ư c vi t là &&) yêu c u ph i tho mãn i u ki n c a 2 phép so sánh. B n cũng có th dùng t khoá or (còn có th ư c vi t là ||)n u như ch c n tho mãn 1 i u ki n trong 2 phép so sánh thôi. ActionScript if ((a > 10) or (a < 15)) { gotoAndPlay(10); } Vòng l p Cú pháp c a vòng l p (loop) thì hơi r c r i hơn so v i cú pháp c a i u kiên if. nhưng nó tương t như C, C++, Java. G m có 3 lo i vòng l p chính là for loop, while loop và do-while loop for loop ư c coi là vòng l p chính v i t khoá for và cú pháp c a nó nhìn như sau: ActionScript for(var i=0;i<10;i++) { trace(i); } N u b n cho ch y o n code trên thì b n s có ư c t s 0 t i 9 output window. for loop tăng giá tr c a variable i trong su t quá trình th c hi n loop. i u ki n c a for loop có 3 ph n chính, và ư c cách bi t b i d u ch m ph y ( . u tiên là i u ki n b t u v i vi c t o local variable cho for loop var i=0. ph n này for loop ch th c hi n có 1 l n duy nh t lúc b t âu. Ph n th hai là i u ki n chính c a for loop i<10, s ư c th c hi n m i vòng l p. N u i u ki n này tho mãn thì m i ti p t c vòng l p. Và ph n cu i cùng là phép tính cho s ti p n i c a for loop m i vòng l p, ây là i++ nên giá tr c a i s ư c tăng sau m i vòng l p trư c khi vòng l p m i b t u. 3 ph n này u ư c b vào trong ngo c ơn (). Còn nh ng code th c hi n trong m i vòng l p thì trong ngo c móc {}. Bây gi chúng ta gi làm computer và ch y cái for loop này. 1. T o local variable và n nh giá tr cho nó b ng 0 2. Ki m tra giá tr c a i có nh hơn 10 không, n u nh hơn 10 thì vòng l p th c hi n các code trong {}, còn không thì t i bư c th 5 3. hàm trace vi t giá tr c a i output window 4. c ng 1 vào giá tr c a i, và tr v bư c th 1 5. ra kh i for loop T i bư c th 5 thì giá tr c a i s b ng 10 while loop v i t khoá while có cú pháp nhìn tương t như sau: ActionScript while (a > 0) { // code th c hi n trong while loop } ơn gi n hơn for loop, while loop tương t như i u ki n if ơn gi n, th c hi n các code trong vòng l p n u i u ki n c a while loop ư c thoã mãn, vì v y b n d dàng r i vào trư ng h p vòng l p vô h n, và d n n tình tr ng treo máy. Trong o n code trên, b n ph i làm th nào cho co 1 lúc a s nh hay b ng 0 cho vòng l p ng ng l i. Gi ng như while loop, do-while loop có cú pháp nhìn như sau: ActionScript do { // code th c hi n trong do-while loop } while (a > 0); Ch khác v i while loop là do-while loop th c hi n code trong vòng l p trư c r i m i ki m tra i u ki n. (while loop ki m tra i u ki n r i m i ch y code trong vòng l p) Mu n phá ra kh i quá trình t hành c a 3 lo i loop trên thì dùng l nh break và continue. L nh break s phá ra kh i loop hoàn toàn trong khi l nh continue thì ch phá ra kh i vòng l p hi n t i và b t u vòng l p m i. T o ra m t ví d c th r t ph c t p, nên chúng ta t m khoan bàn t i 2 l nh này cho t i các bài sau. Hàm Cho t i bây gi các script c a chúng ta u ư c vi t vào frame u tiên c a moive, cách này ch t t cho nhưng chương trình ơn gi n, nhưng n u mà chương trình tr nên ph c t p thì ây không ph i là cách. Hàm (function) s cho phép chúng ta c u t o và qu n lý code d dàng hơn trong các chương trình ph c t p. Dư i ây là m t function ơn gi n: ActionScript function myFunction(num) { var newNum = num + 3; return newNum; } Fuction b t u b ng t khoá function, tên c a function có th là b t c ch gì như cách b n t tên cho variable, nhưng lưu ý cách t tên cho fuction làm sao ngư i ta c tên có th bi t ư c ch c năng c a function. Theo sau tên c a function s là thông s (parameter, cho ng n mình s g i thông s là param trong các bài vi t này) ư c trong ngo c ơn (). Function có th co 1 hay nhi u param hay không c n param cũng ư c. Param ch ng qua ch la variable ư c dùng trong function, nhưng variable này ư c truy n t ngoài vào khi function ư c g i. o n code ư c function th c hi n s n m gi a ngo c móc {}. Bây gi chúng ta phân tích o n code trên. Khi function myFunction ư c g i, thì param num ư c truy n vào, sau ó function myFunction t o ra m t local variable tên là newNum, và n nh giá tr c a newNum b ng giá tr c a param num c ng v i 3. Sau ó myFunction dùng l nh return n nh giá tr c a newNum là k t qu c a myFunction. L nh return là l nh c bi t ch ư c dùng trong function mà thôi. L nh này s k t thúc function. s dùng function này, dùng nó như m t l nh hay hàm c a AS, gi ng như là trace() v y ó. ây là ví d : var a= myFunction(7);. Trư c tiên t o m t local var r i sau n nh giá tr c a local var này b ng k t qu c a myFunction v i param là 7, và cu i cùng thi local var này s b ng 10. M t trong ưu i m c a function là b n có th tái s d ng. Dư i ây là hàng code dùng chung 1 fuction và cho 3 k t qu khác nhau ActionScript trace(myFunction(7)); trace(myFunction(13)); trace(myFunction(2)); Khi ch y o n code này thì output windown s là 10, 16 và 5. Ví có th tái s d ng nên chúng ta ch c n thay i code trong myFunction thì t t c các k t q a có ư c t g i function này cũng thay i theo luôn. Dot Syntax M t i u b n s th y r t nhi u trong quá trình h c AS là dot syntax (h ng bi t d ch sao bây gi ) Dot syntax là phương pháp ư c dùng trong l p trình theo hư ng i tư ng (oob: object oriented programming). ây là m t ví d c a dot syntax. N u b n mu n l y căn bình phương c a m t s , và trong Flash ã có s n function làm chuy n này r i, và hàm này thu c v i tư ng toán, tên là Math. V y mu n g i function này thì trư c tiên b n ph i g i tên i tư ng mà fucntion này tr c thu c, ó là Math, theo sau ó là d u ch m (dot), và r i t i tên c a function ó là sqrt. Cách vi t như sau: ActionScript var a = Math.sqrt(4); M t cách dùng dot syntax khác là tư ng, như là movie clip. ActionScript var a = myClip._x; var a = myClip.myVariable; truy c p c tính hay variable c a m t i c p n i tư ng Math và MovieClip trong các bài t i, còn bây gi Chúng ta s thì quan tr ng là b n n m ư c khái ni m v dot syntax. Chú gi i M t trong c tính c n có c a l p trình viên là vi t code làm sao cho d c và d hi u. Nhưng nhi u khi dù khi vi t có c g ng cách m y thì nh ng o n code ó v n khó hi u cho ngư i xem, vì v y m i c n nh ng l i chú gi i. Mu n chú gi i trong AS thì ch c n dùng ký hi u// trư c câu chú gi i ó. N u chú gi i nhi u hơn vài dòng thì có th dùng ki u sau/* ..... chú gi i ....*/. ActionScript /* chú gi i: c ng 2 cho a c ng 2 cho b */ a += 2; // add 2 a // add 2 to b b += 2; Debugging Thư ng thì th i gian di t b t n g n 1/3 th i gian phát tri n chương trình. N u b n n m v ng ư c "nghê thu t" di t b thì b n s rút ng n ư c r t nhi u th i gian. Có 3 cách di t b h u hi n là: phân tích, vi t message ra output window và dùng AS debugger. V i các lo i b ơn gi n thì phân tích các o n code s giúp b n b t trúng con b c n di t. Dùng output window theo dõi các i tư ng, vòng l p, i u ki n, và nh vào ó b n có th bi t ư c ch nào trong code có v n , cu i cùng là dùng AS debugger có s n trong Flash. Debugger window cho phép b n có th coi h t t t c moi thành ph n trong movie c a b n, cho phép b n dùng AS b t ch khi nào và ch nào b n mu n. Tham kh o thêm ph n tr giúp c a Flash bi t cách dùng debugger. Gi th 05: i u khi n lu ng movie, Control the flow of the movie S d ng AScript là cách i u khi n movie ơn g n nh t, nhung l i hi u qu nh t. Chương này b n s h c cách : • • • • • làm sao d ng Movie trên frame Sao nh y t frame này n frame kia t o nút cho phép i u khi n movie t o m t slide show ơn gi n t o m t bi u di n y .. D ng movie ây là câu l nh stop: ActionScript stop(); Khi b n dùng câu l nh này , movie ch t m d ng frame mà b n t câu l nh. Các animation bên trong movieClip và các file h a v n ti p t c ch y trên frame ó. Nhưng animation c a time line s b d ng. cho animation c a timeline ti p t c ch y, ta s d ng m t lênh ơn gi n ó là l nh play.. ta s bàn n nó sau. Ví d T i frame 1, b n hãy th m t text box và vi t vào ó Ch A T i frame 2, b n hãy th m t text box và vi t vào ó Ch B T i frame 3, b n hãy th m t text box và vi t vào ó Ch C Bây gi b n hay t câu l nh stop(); vào Frame 2, b n se th y ch A xu t hi n r t nhanh r i n ch B, nhưng ch C s ko th y xu t hi n,, ơn gi n vì câu l nh stop() ã d ng animation c a timeline t i Frame 2. Nh y t frame này n frame kia M t câu l nh cơ b n c a AS là câu l nh gotoAndPlay. Câu l nh này giúp b n có th nh y t frame này n frame mà b n mu n. B n có th sư d ng s th t c a frame hay là tên c a frame ActionScript gotoAndPlay(7); gotoAndPlay(20); gotoAndPlay("my frame label") b n có th s d ng nhi u movies , hay còn g i là c nh(scene) . N u Câu l nh gotoAndPlay ch có m t tham s , thì tham s ó là frame. Nhưng n u có 2 tham s ,thì tham s u ti n là tên c a scene, còn tham ss th 2 là s th t c a frame hay tên frame. ActionScript gotoAndPlay("My Scene","My Frame"); Khi b n dùng gotoandPlay,movies s nh y n frame mà b n g i , và ti p t c ch y, nhưng n u b n mu n nó nh y n frame và d ng l i, b n co th s d ng gotoAndStop . Câu l nh này dùng y h t như gotoAndPlay, v i l a ch n 1 tham s hay 2 tham s . Ngoài ra có thêm 2 câu l nh cũng h at and prevFrame hi u rõ hơn v các câu l nh này, ta s T o nút (button) Nút là m t trong 3 bi u tư ng (symbol) chính trong Flash, 2 cái kia là movie cilps và hình T o m t button Có nhi u cách t o nút. M t trong nhưng cách ó là ch n Insert, New Symbol t Menu. M t h p tho i s hi n lên và h i b n t tên và l a ch n bi u tư ng c a b n là lo i Movie clip, button, hay h a. B n hãy ch n Button. Bây gi trong c a s chính c a Flash s thay i, timeline c a button s thay th timeline c a movie chính. Có 4 frames trong timeLine c a button. Chúng có tên là Up, Over, Down, HIt. CHúng th hi n 3 tr ng thái c a button, và vùng h at ng c a button. ng gi ng gotoAndStop , ó là nextFrame i ti p ph n sau... N ub n tm t h a, ch ng h n là m t vòng tròn, trong frame u tiên(UP) và ko có gì trong 3 frame sau, tr ng thái Over và Down c a button s gi ng như tr ng thái c a Up. VÙng ho t ng c a button cũng tương t như v y. M t khác , b n có th t o các hi u ng khác nhau cho button c a b n. VÍ d n u b n i m u c a vòng tròn là màu xanh Frame OVER,có nghĩa là khi b n ưa chu t qua button, button s chuy n sang màu xanh. Khi b n t o xong 1 button, b n tr lai movie timeline chính. Và button c a b n ã s n sàng trong thư vi n c a FLash. B n ch viêc b m F11, tìm button c a b n và kéo th nó vào nơi nào b n c n trên c a s thi t k . T o script cho button t script cho button, u tiên hãy ch m m t button. Sau ó vào c a s Action b ng cách b m chu t ph i lên button và ch n Action t menu xu t hi n. Expert. B n có th ki m tra Hãy Ch c ch n r ng c a s Action ã ư c t ch băng m t popup menu góc trên cùng bên ph i c a c a s . ây là m t o n mã thông thư ng cho button. B n có th sau ó ki m tra movie xem nó h at ng th nào. ActionScript on (release) { trace("You clicked the button!") } on : là m t keyword, ư c g i ra x lí m t s ki n Release : Là m t s ki n, khi ngư i s d ng click vào button và nh chu t ra. o n mã trace s ư c th c thi. Ngoài ra Release có th thay th b ng s ki n PRESS, s ki n này ch khác Release ch khi ngư i s d ng b m vào button, o n mã trace s ươc th c thi mà ko c n ph i th chu t ra. Trace : là in ra màn hình dòng ch YOU CLICKED THE BUTTON. Th c Hành: T o m t Slide Show ơn gi n... Có l ko ph i di n t nhi u v Slide Show, các b n hãy tư ng tư ng giông Power Point.. Khi chúng ta b m chu t, các slide s chuy n sang slide khác. 1. M Flash, ch n New 2. Trong Layer 1, t Frame 1 n Frame 4, b n hãy ăt các bi u tư ng hay hình nh, text khác nhau phân bi t ư c các frame 3. Sau ó b n t o m t layer m i, hãy t m t button lên layer này.Ti p theo b n ch n t nó trong c a s mã và Frame 4 c a layer 2, và b m F6. i u này trong t t c các Frame c a Layer 1. m b o cho button c a b n s xu t hi n Bây gi copy o n mã sau vào button c a b n, chú ý nh là copy vào action c a button, ch ko ph i vào b t kì frame nào ActionScript on (release) { nextFrame(); } Cu i cùng ch n Frame 1 Layer 1 action và chèn o n code sau ActionScript stop(); Hãy ch y th slide show c a b n = cách b m Ctrl Enter. 5) Xây d ng m t presentation ơn gi n: Presentation này s d ng nguyên t c giông h t như ví d Slide show hay down load file FLA xem .. easy trên, các b n Gi th 06: i u khi n movie clip, Controlling Movie Clips 6th Hour i u khi n movie clip B ns h c 1- ra l nh cho movie clip 2-T o playback cho animation 3-TÌm hi u ích(target) c a movie clip 4-T p vi t code cho movie clip 5-T o movie clip có th ch y lùi l i. 1) Ra l nh cho movie clip : M t movie chính có th r t ơn gi n. NÓ ch c n 1 frame và m t movie clip. Nhưng b n thân movie clip l i có th là m t animation dài. Vi c này d dàng th c hi n mà ko c n Actioncript. i u khi n ư c movie, b n ph i t tên cho movie clip. Chú ý r ng m t movies clip có 2 tên, m t tên s d ng cho timeline . M t tên s d ng cho actioncript. 2 tên này có th t trùng tên nhau ho c khác tên nhau. Làm sao t tên cho movie clip : Ch n insert -----> New Symbol (ho c b m Ctrl F8), t tên cho movies clip (nh l a ch n option movies clip, ch ko ph i là button hay graphic) Tên này ư c s d ng cho timeline. vd: gear animation Th movie gear animation vào c a s thi t k .. PHía dư i c a s properties, ban s th y box instance name.. t tên cho movie tên này ư c s d ng cho Action script , vd : gears và như v y, khi b n l p trình , tên s d ng là gears , ch ko ph i gear animation. b n có th s d ng d u ch m ưa ra các lênh cho movie c a b n. ví d ActionScript gears.stop(); gears.gotoAndStop(5); Nh r ng movie clip luôn có level. N u o n mã ư c t trên chính movieclip, b n ko c n s d ng tên movies, ch c n gotoAndStop();. N u b n t c tên movie vào, Flash s tìm movie c a b n t timeline chính.. T c là s ph i qua 2 level. ---> ch m hơn chút. 2)Animation Playback Controller Hãy down load source code t trên ph n download và xem. V cơ b n, chúng ta làm các vi c sau: - T o m t Movie , t tên là gear animation - t instance name là gear(hư ng d n trên) - Frame u tiên c a time line chính, chèn code ActionScript gears.stop(); -T o các button Advance, Previous, Play, Stop, and Rewind -Code cho các button l n lư t là Advance ActionScript on (release) { gears.nextFrame(); } Previous ActionScript on (release) { gears.prevFrame(); } Play ActionScript on (release) { gears.play(); } Stop ActionScript on (release) { gears.stop(); } Rewind ActionScript on (release) { gears.gotoAndStop (1); } 3) Target m t movie Level cơ b n u tiên c a Flash là time line chính(Level 0). N u b n mu n ra l nh cho time line này, b n dùng code sau _root.gotoAndStop(); th m chí n u b n t code gotoAndStop(); time line chính, b n ko c n _root. Ch c n Gi s n u b n có m t movie trên time line, t c là b n có m t level sâu hơn(level 1). N u b n t time line chính, mu n goi movie gears , b n ph i dùng câu l nh gears.gotoAndStop(7); _root["gears"].gotoAndStop(7); this["gears"].gotoAndStop(7); C 3 cách trên u gi ng nhau.. Tuy nhiên this có nghĩa là level hi n hành. VÍ d trên, level hi n hành c a this là level 0. Nhưng n u code t trong movie, level hi n hành s là level 1. B n ph i chú ý. Gi s b n có m t movie khác bên trong movie, t c là b n có level 2. N u b n mu n t level 1 g i n level 2, b n ph i dùng _parent. Parent dùng gi ng như root, nhưng khác ch , nó ư c g i t level trên. Còn root ư c g i t level 0 (t c là level g c). Thu n l i t vi c s d ng root, this là b n có th gán bi n cho movie clips ActionScript var whichClipToUse = "gears"; this[whichClipToUse].stop(); Thu n l i c a v c s d ng this nhi u hơn root ch , ko ph i lúc nào m i th cũng x y ra time line chính, ôi khi ta ch mu n nó x y ra m t level nh t nh. B i v y this là cách t t nh t goi level c a m t movie. Tuy nhiên trong nh ng trương h p ơn gi n, hay nh t là c t tên cho movies. 4) Mã cho movie clip Chúng ta ã bàn v button ó là trên, v y v cơ b n movie clip script cũng gi ng button, ActionScript onClipEvent (load) { trace("This clip has been loaded."); } onClipEvent : key word g i s ki n (gi ng on c a button) load : s ki n này x y ra khi movie clip xu t hi n l n u tiên trên màn hình . NÓ ch x y ra m t l n. Nh r ng ngay c khi time line chính b ng, movie clip n m trên time line v n ti p t c ch y. S kiên enterFrame x y ra liên t c bên trong movie clip m i khi n m t frame m i. S ki n này s th c thi o n mã m t cách liên t c cho n khi nó b k t thúc. ActionScript onClipEvent (enterFrame) { trace("This clip has entered a new frame."); } bây gi hãy copy 2 o n code trên vào c a s action c a timeline chính và run .. b n s th y ActionScript This clip has been loaded This clip has entered a new frame This clip has entered a new frame This clip has entered a new frame This clip has entered a new frame dòng ch s ti p t c hi n ra cho n khi b n t t movie. Gi th 07: d ch chuy n và thay i movie, Moving and Changing Movie Clips nh v trí, M t movie clip (MC) bao gi cũng có các thu c tính, cho phép b n xác phóng to thu nh , quay, th m chí làm nó bi n m t. Chương này các b n s bi t cách: -thay i v trí c a mc -xác inh v trí chu t -làm sao quay m t mc -làm sao phóng to mc -làm sao movie invisible 1) V trí c a MC: M i th trong Flash u có v trí. V trí này ư c o b ng PIXEL. Góc trên cùng bên trái c a màn hình là v trí (0,0) .Nó là v trí giao c a hàng ngang và c t d c. N u b n s d ng m t movie m c nh, thì góc dư i bên ph i s là 550,400. Có nghia là 550 pixel t bên trái sang và 400 pixel t bên trên xu ng. nhìn hình sau rõ hơn. 2) V trí c a Mouse: Cũng như movie, mouse cũng có th xác inh ư c t a .. CHú ý thu t ng mouse ây là nói n con tr (cursor), ch không ph i con chu t b n ang c m trên tay.. ^^ Có hai thu c tính cơ b n c a con tr , ó là _xmouse và _ymouse. V y _xmouse và _ymouse là thu c tính c a chính i tư ng mà chúng ư c gán. N u b n s d ng trên time line chính, thì chúng là thu c tính c a time line. N u b n s d ng chúng trên movie clip, thì nó là thu c tính c a movie clip. N u xmous y mouse là thu c tính c a time line chính, nó s m c nh là góc trái trên cùng. N u xmouse ymouse là thu cc tính c a 1 movie clip, nó s m c nh trung tâm c a MC. H u h t các trư ng h p thu c tính liên quan _root._xmouse và _root._ymouse ây là m t o n code ví du CODE onClipEvent (enterFrame) { trace(_root._xmouse); trace(_root._ymouse); trace(""); } Khi b n ch y movie, b n s th y các c p s ư c in ra, ó chính là t a x,y mouse .Hãy d ch chuy n mouse lên góc trái trên, b n s th y ó v trí mouse là 0.0. ho c góc ph i dư i, t a là 550 400. Chú ý: khi b n ưa chu t ra ngoài Flash window, t a chuôt xmouse y mouse không thay i. N u b n di chuy n chu t th t nhanh t trung tâm c a c a s ra ngoài c a s , các giá tr cũ v n ó cho n khi b n quay tr l i c a s . VÌ v y, b n ph i luôn lên k ho c c n th n trư c khi dùng xmouse, y mouse 3) Làm movie quay M t thu c tính khac ó là thu c tính _rotation Thu c tính rotation ch p nh n giá tr là góc . M t vòng tròn chia ra 360 , mi n giá tr c thu c tính rotation là -180 và 180. B n có th s d ng giá tr integer ho c floating point. Giá tr c a _rotation luôn luôn trong vòng -180 và 180, ví d 179, ho c -179. Nhưng n u b n t nó là 181, nó s hi u thành góc -179. v y quay m t movie, ơn gi n là t giá tr cho nó, b n cũng có th s d ng các bi u toán ++, += thay i giá tr . Hãy xem ví d sau CODE myClip._rotation = 90; myClip._rotation++; _root["myClip"]._rotation = 45; this._rotation += 0.5; n movie chính, b n nên dùng cách 4) Co giãn àn h i m t MC: B n có th làm co giãn, thay Scale thu c tính THu c tính i chi u dài chi u r ng c a movie clip làm vi c này là _xscale cho chi u ngang và _yscale cho chi u d c. Các giá tr ư c gán cho x,y scale là ph n trăm. Có nghĩa giá tr 100 là 100 ph n trăm , ây là thu c tính m c inh cho m t movie clip g c. B n có th s d ng các s nh hơn như 50 làm movie co l i. Ho c có th s d ng s to hơn, 200 giãn movie ra. Th m có th dùng các giá tr âm l t movie. ví d 07mousesclae.fla ch a m t o n mã mà chúgn ta s g p r t nhi u sau này. Nó ki m tra t a c a mouse,. Sau ó xác inh t mouse n trung tâm movie xa bao nhiêu. R i nó s d ng kho ng cách ,c chi u cao chi u r ng tính ph n trăm t l cho movie clip. CODE onClipEvent (load) { // get the original width and height of the mc origWidth = this._width; origHeight = this._height; } onClipEvent (enterFrame) { // get the distance from the center of the mc to the mouse dx = _root._xmouse-this._x; dy = _root._ymouse-this._y; // calculate the percentage of scale sx = 100*dx/(origWidth/2); sy = 100*dy/(origHeight/2); // set the scale of the mc this._xscale = sx; this._yscale = sy; } Chú ý ây ta s d ng 2 thu c tính m i, _width và _height tr v chi u cao và chi u r ng c a movie clip b ng Pixel. CHúng ư c lưu giú trong onClipEvent (load) vì khi ta c n l y l i giá tr g c c a movie. Thu c tính _width, _height S khác nhau gi a scale và width,height í scale s d ng giá tr ph n trăm. Còn width height s d ng pixel . Movie có th có giá tr sau: width 75, height 45, nhưng scale cho c xscale and yscale là 100 ph n trăm. Dư i ây là m t ví d s d ng width height th y th cho xscale, yscale. CODE onClipEvent (enterFrame) { // get the distance from the center of the mc to the mouse dx = _root._xmouse-this._x; dy = _root._ymouse-this._y; // set the scale of the mc this._width = dx*2; this._height = dy*2; } b n có th th y code này ng n g n hơn ơ trên. b i vì nó ko s d ng s kiên onClipEvent(load) b i gái tr chi u dài chi u cao c a movie g c ko c n lưu tr . ây là m t ví d cho th y s d ng width và height ti n hơn d ng xscale ,y scale. 5) Visibility M t thu c tính khác c a MC là thu c tính _visible , giá tr c a thu c tính này là giá tr boolean true , false. CODE myClip._visible = false; hãy xem ví d 07visible.fla rõ hơn. Gi s ta không mu n movie bi n m t h n, mà ch b m i, ta s d ng thu c tính _alpha . Thu c tính có giá tr t 0 n 100 CODE myClip._alpha = 50; Thu c tính alpha là kênh màu th 4, tên là alpha channel . 3 kênh u tiên là red ,green, blue t o ra 7 màu c u v ng. Khi b n nghe n h a 32 bit, có nghĩa là nó 4 kênh màu.. Còn 24 bit có nghĩa ch c 3 kênh u tiên. N u giá tr c a _visible là 0 thì movie là trong su t hoàn tòan và có th nhìn th y t t c m i th phía sau movie. Nhìn hình sau xem cùng 1 movieclip nhưng v i 3 giá tr alpha khác nhau, 10, 50 và 100 (t trái sang) Gi th 08: ch n, kéo th movie clip, Moving and Changing Movie Clips 1. Selection B n ã bi t cách h c sao t o m t button và cho phép ngư i s d ng click vào làm s ki n ho t ng. Tuy nhiên ây ta s h c cách click vào ch n l a m t i tư ng trên màn hình. T o m t ch n l a, có nghĩa là user click vào item , nhưng không có gì x y ra. Như v y, ngư i dùng có th l a ch n và thay i l a ch n. Chúng ta s s d ng l a ch n như bư c u tiên h c kéo th movie. Button bên trong m t Movie method. M t movie không th ph n ng v i mouse click. Không th s d ng các s ki n như on (release) hay (Press). vì v y ta ph i tìm cách ánh l a nó. ó là s d ng m t button bên trong movie. Button có th x lý ư c mouse click, và mi n là nó có l n bao trùm m t movie. Hãy xem ví d 08buttoninmc.fla . Ta ch nhìn th y m t movie clip trên màn hình.nhưng th c ch t bên trong c a movie clip là m t button. t o ra kh năng select, ta ph i t o nhi u frame.Frame u tiên ch a m t button tên là offbutton. Button này có mã là CODE on (release) { this.gotoAndStop(2); } b ng this, button s g i n movie clip mà nó n m trên y. Frame th 2 ch a nút tương t nhu frame 1 , tên là onbutton, nút này có m u hơi sáng hơn ngư i dùng nh n ra khi nó ư c ch n. CODE on (release) { this.gotoAndStop(1); } cu i cùng CODE stop(); t vào frame 1 Bây gi hãy ch y xem. Phương th c hitTest Có cách khác làm movie có th s lý mouse click mà không c n button, ó là s d ng s ki n onClipEvent(mouseDown) ho c là onClipEvent(mouseUp)ví d CODE onClipEvent (mouseUp) { this.gotoAndStop(2); } Hãy ch y ví d 08twomcs1.fla xem.B n s th y t i sao onClipEvent(mouseUp) khác v i on (Release) . N u b n click vào movie, c hai u ph n ng.B i vì t t c movie clip nh n s ki n mouse up ư c g i n cho chúng. Quy t inh movie nào ư c click. Có m t cách click vào movie mình mu n. ó là s d ng v trí chu t S a o n mã thành như sau xác nh. CODE onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { this.gotoAndStop(2); } } v y b ng cách ràng bu c movie clip v i mouse location , ta có th click movie ta mu n. VI t mã cho selection: Chúng ta ph i cho phép User click lên movies nhi u l n và thay i tr ng thái c a MC t b t sang t t, hay t t sang b t. o n mã sau có th xác nh movie ang tr ng thái nào và g i nó n frame khác. VI c này th c hi n b ng thu c tính _currentFrame . Thu c tính này s c giá tr 1 kh nó frame th nh t, giá tr 2 khi nó frame th 2. CODE onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { if (this._currentFrame == 1) { this.gotoAndStop(2); } else { this.gotoAndStop(1); } } } Bây gi b n ã th y các cách t o s ch n l a movie. Cách thư nh t ti n l i n u b n mu n dùng c các trang thái khác như Over,up , down.. Cách th hai thì không c n nhi u bi u tư ng trong thư vi n. Enjoy.. 2) Kéo m t movie clip Bây gi ta s h c kéo m t movie. Có 2 cách kéo movie, cách th nh t là s d ng l nh . Cách này r t d s d ng nhưng nó không cho b n nhi u l a ch n trong vi c s a i và giám sát movie. Cách Drag cơ b n: 2 câu l nh drag co b n là :startDrag và stopDrag. b n dùng startDrag khi b n mu n movie c a b n i theo chu t, còn stopDrag khi b n mu n movie c a b n không theo chu t n a. ây là o n code cơ b n : CODE onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse)) { this.startDrag(); } } onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { this.stopDrag(); } } S ki n onClipEvent nhìn tương t như ta ã làm trên. Chúng s d ng hitTest nh n bi t movie nào ang ư c click. Và sau ó câu l nh startDrag và stopDrag ư c s d ng. Khi chu t ư c b m xu ng, câu l nh startDrag th c thi. Và ngư c l i, khi chu t th ra, stopDrag th c thi. Hãy xem movie, b n s th y v i các câu l nh drag, b n có th kéo các movie m t cách c l p. Nhưng chú ý r ng b n không th kéo 2 movie cùng m t lúc. Ch m t movie ư c kéo t i m t th i i m. Vì v y b n nên c n cách drag ph c t p và linh ng hơn làm ng d ng hay game. Note: startDrag có 5 thám s . Tham s th nh t là giá tr True(ho c False) quy t nh vi c trung tâm c a movie clip có khóa v i v trí chu t hay không. Các tham s còn l i là left, top, right, bottom. N u b n t chúng, movie c a b n ch có th ư c kéo theo các ràng bu c ó. Kéo nâng cao Bây gi ta h c cách kéo movie mà ko dùng câu l nh startDrag và stopDrag. V y làm th nào?? B n c n có 4 ph n mã sau trong movie c a b n: Th nh t là s ki n onClipEvent(load), s ki n này s t cho bi n global tên là dragging giá tr false. Khi bi n này true, t c là báo hi u r ng movie có th ư c kéo. Th hai, ngưòi dùng click vào m t movie. Có nghĩa là dragging = true . Th ba, quá trình kéo s ti p t c di n ra b i s ki n onClipEvent(enterFrame). S ki n này ch ơn gi n gán _x và _y (thu c tính c a movie clip) cho _root._xmouse và _root._ymouse(thu c tính c a con tr ). Th 4, n u ngưòi dùng th chu t , thì bi n dragging ư c gán false. Sau ây là o n code y CODE onClipEvent (load) { // start out not dragging dragging = false; } onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse)) { // follow the mouse from now on dragging = true; } } onClipEvent (enterFrame) { if (dragging) { // set to location of the mouse this._x = _root._xmouse; this._y = _root._ymouse; } } onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { // don't follow the mouse any longer dragging = false; } } Trong ví d 08complexdrag.fla ch a 2 MC. Ki m tra movie, nhưng ch s d ng MC bên trái. ây là MC làm theo o n code trên. Chú ý xem trung tâm movie ơc khóa v i v trí chu t như th nào. Nó làm movie nh y ngay l p t c n u b n click vào nó. Thông thư ng, khi b n mu n kéo MC ó lên màn hình, b n không mu n nó nh y t i làm kh p v trí chu t v i trung tâm c a MC. Hãy kéo file xung quanh màn hình.B n s th y khi b n click chu t vào b t kì i m nào trên movie, movie s l p t c làm kh p v trí click chu t v i trung tâm movie. i u này cũng tương t v i câu l nh startDrag . tránh i u này, chúng ta ch c n thêm m t o n code nh . Khi ngưòi s d ng b m chu t, chúng ta s l y offset, ây là kho ng cách t chu t cho n trung tâm c a movie. Sau ó, thay th b ng vi c gán v trí chu t n trung tâm movie, ta se thêm vào offset cho MC luôn luôn xu t hi n offset b i cùng m t giá tr khi ngư i dùng kéo. Tư ng tư ng , ví d ngưòi dùng click vào m t i m cách trung tâm movie 5 pixel. Sau ó ta luôn mu n kho ng cách 5 pixel ó ư c duy trì. i u này làm cho ngư i dùng có th click vào b t c i m nào kéo movie. ây là code cho movie 2(bên ph i) CODE onClipEvent (load) { // start out not dragging dragging = false; } onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse)) { // follow the mouse from now on dragging = true; // get the mouse offset xOffset = this._x - _root._xmouse; yOffset = this._y - _root._ymouse; } } onClipEvent (enterFrame) { if (dragging) { // set to location of the mouse this._x = _root._xmouse + xOffset; this._y = _root._ymouse + yOffset; } } onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { // don't follow the mouse any longer dragging = false; } } Hãy xem movie 3) Kéo và th th y khác bi t gi a 2 o n code. Bây gi ta ã bi t kéo movie, v y ta s th nó âu.? V n là b n mu n theo dõi hành ng c a ngư i s d ng và xác inh ngư i s dung t movie âu. Basic Drop Zone Ch c năng hitTest có th ư c s d ng xác o n mã sau, chúgn ta s d ng l nh startDrag ta có th t p trung vào các ch c năng m i. nh khi MC b è lên nhau. Trong o n mã kéo th ơn gi n i, nh ó Trong o n mã sau, ch c năng hitTest ư c s d ng so sánh MC ư c kéo v i m t movie khác tên là dragZone trên m t lêvl(root level) CODE onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse)) { this.startDrag(); } } onClipEvent (mouseUp) { if (this.hitTest(_root._xmouse, _root._ymouse)) { this.stopDrag(); // see if this mc is inside the dropZone mc if (this.hitTest(_parent.dropZone)) { trace("Dropped in zone"); } else { trace("Dropped outside zone"); } } } Chú ý hitTest không ư c s d ng như các bài trư c, chúng ta thay th v trí _x và _y b i m t movie khác. Lo i hitTest này so sánh v trí và vùng ư c bao ph c a 2 movie clip. Trong trư ng h p này, nó ư c so sánh v i _parent.dropZone. N u có 2 movie è lên nhau, hitTest tr giá tr True. xác inh xem MC nào ang t n t i, hình ch nh t c a c 2 movie u ư c s d ng. i u này có nghĩa là khi b n s d ng 2 hình tròng, như trong ví d , b n thân chính các vòng tròn ó không ư c ch m vào mi n là các hình ch nh t c a 2 movie ư c dùng. Hãy xem hình minh h a. T t c các movie Dragme u n m è trên DropZone. Có 2 cách s d ng hitTest. Th nh t là s d ng t a x,y. Chúng ta có th s d ng movie clip như v trí x,y, r i sau ó s d ng dropzone như m t movie clip th nh t. CODE if (_parent.dropZone.hitTest(this._x,this._y)) { V i o n code này, thay th ví d trên, movie clip s n m bên trong hình ch nh t c a vùng dropzone. Chúng ta có th thêm m t bư c n a v i hittest. B ng cách thêm tham s th 3 cho hitTest, chúng ta có th dùng hitTest xem hình d ng chính xác c a movie clip và xác inh v trí x,y. Bi n th 3 này c n gán true n u b n mu n hành vi này. N u nó false, nó se hành ng gi ng như ch c năng hitTest bình thư ng. ây là o n code CODE if (_parent.dropZone.hitTest(this._x,this._y,true)) { Bây gi movie kéo th c a ta h at ng t t hơn. N u b n s d ng ví d 08drop.fla, movie bên ph i s s d ng o n mã gôc, và nó n m è trên hình ch nh t c a dropzone. Các movie khác s d ng o n code ph c t p hitTest và chúng có trung tâm nàm bên trong hình d ng g c c a dropzone. Gi th 09: L y thông tin t ngư i dùng, Getting input from the user Cho t i bây gi , qua 8 gi làm quen v i AS, t t c các tác ng c a b n lên trên flash u ư c làm qua chu t. Nhưng ngoài chu t, b n có th dùng bàn phím n p thông tin vào Flash. Làm sao phát hi n khi ngư i dùng b m phím Có 3 cách phát hi n khi m t phím tên bàn phím b nh n. 1 là dùng nút, 2 là dùng i tư ng Key, và 3 là dùng "listener" (ch có Flash MX và MX 2004) 1. Phát hi n qua nút: B n có th dùng nút phát hi n khi ngư i dùng s d ng bàn phím. B n chi c n dùng l nh x lý s ki n on cho o n code c a nút . Ví d o n code sau s kích ho t khi mà ngư i dùng nh n phím "a". ActionScript on (keyPress "a"){ trace ("Key 'a' pressed"); } Trong movie m u 09keybutton.fla có m t nút ơn gi n n m trên màn hình và vài ví d trong ó. N u b n cho ch y th movie và nh n phím "a" thì Output window s có vi t ra dòng ch "Key 'a' pressed.". X lý d ki n on(keyPress) nh là ph i phân bi t d ng ch (case-sensitive) nên n u b n ch code cho nó nh n phím "a" thì nó s không th nh n ư c phím "A". May mà chúng ta có th dùng bao nhi u b x lý d ki n cũng ư c. N u b n mu n x lý các phím khác, như các phím mũi tên, enter, thanh dài (space bar) ... thì b n ph i dùng các code dành riêng cho chúng. Vì d b n mu n x lý phím mũi tên trái (left arrow key) thì dùng o n code sau: ActionScript on (keyPress "") { trace("Left pressed."); } Và sau ây là các code dành cho các phím • • • • c bi t: • • • • • • • • • • • B n có th h p nhi u d ki n l i chung v i nhau. Ví d b n có m t nút và nút ó có phím t t là "b". V y khi b n nh n nút ó hay là nh n phím "b" thì code c a nút ó s ư c kích ho t. ActionScript on (keyPress "b", release) { trace("'b' pressed or button clicked."); } Các ví d trên u có trong movie m u 09keybutton.fla i tư ng phím (key object) 2. Phát hi n qua M c dù nút r t h u ích trong vi c phát hi n khi ngư i dùng nh n phím, nhưng nút l i không th phát hi n ư c trư ng h p khi ngư i dùng nh n phím và không nh t tay. Ví d n u b n làm m t game b ng Flash, và trong ó ngư i chơi cho th làm cho các nhân v t trong game di chuy n liên t c n u như h nh n phím mũi tên và không nhât tay lên. i tư ng Key là t p Cho nh ng trư ng h p như v y, b n ph i dùng i tư ng Key. h p c a m t s hàm (function) và h ng s (constant) ư c xây d ng s n trong Flash. B n có th dùng các hàm và h ng s này biêt ư c các phím ang b nh n hay không. Ví d , n u mu n ki m tra coi phím mũi tên trái có b ang nh n hay không thì dùng o n code sau: ActionScript if (Key.isDown(Key.LEFT)) { trace("The left arrow is down"); } Hàm Key.isDown s cho ra k t qu úng hay sai ph thu c vào thông s có ph i là phím ang b nh n hay không. H ng s Key.LEFT tư ng trưng cho phím mũi tên trái. v y khi mũi tên trái b nh n thì output window s cho ra hàng ch "The left arrow is down". Dư i ây là các h ng s tương t như Key.LEFT c p trên • • • Key.BACKSPACE Key.ENTER Key.PGDN • • • • • • • • • • • • • • • Key.CAPSLOCK Key.ESCAPE Key.RIGHT Key.CONTROL Key.HOME K ey.SHIFT Key.DELETEKEY Key.INSERT Key.SPACE Key.DOWN Key.LEFT Key.TAB Key.END Key.PGUP Key.UP N u b n mu n ki m tra xem n u nh ng phím bình thư ng ang b nh n thì b n ph i dùng Key.getCode l y mã s c a phím ó dùng trong hàm Key.isDown. ây là code m u khi b n mu n ki m tra phím "a" ActionScript if (Key.isDown(Key.getCode("a")) { trace("The left arrow is down"); } Cho 2 ví d trên, b n có th coi source Fla 09keyobject.fla 3. Key Listener Key listener ư c dùng nh n. quan sát bàn phím và thông báo cho Flash khi phím ư c cách th 2 chúng ta dùng i tư ng Key ki m tra coi phím có b nh n hay không, nhưng nó không th bi t chính xác lúc nào thì phím b nh n. N u mà ngư i dùng nh n phím quá nhanh, trư c khi onClipEvent(enterFrame) k p kích ho t i tư ng key ki m tra thì Flash s không bao gi bi t ư c ngư i dùng ã nh n phím. M t b t ti n n a khi dùng cách th 2 là n u b n mu n ngư i dùng nh n phím nhi u l n thì i tư ng Key s không phân bi t ư c ó là 1 l n nh n dài hay là nhi u cái nh n th t nhanh. Ví v y Flash MX, MM cho chúng ta thêm m t l a ch n n a là Key listeners. b n có th dùng "listener" (có th hi u nó như m t quan sát viên) theo dõi s ki n c a bàn phím và thông báo cho Flash ngay khi phím ư c nh n. Listener có 2 ph n. Ph n u là ph n t o listener. B n ph i ra l nh cho listener này chú ý vào s ki n c a bàn phím. ây là code cho t o listener ActionScript Key.addListener(_root); L nh Key.addlistner t o listener cho i tư ng trong thông s là _root. Và này s ư c thông báo v s ki n c a bàn phím. i tư ng Trong o n code trên, _root là i tư ng ư c thông báo v s ki n c a bàn phím. Nhưng khi nh n ư c thông báo thì _root ph i làm gì? Vì v y chúng ta c n ph i vi t code x lý s ki n cho _root. Ví d o n code sau s ư c th c hi n khi _root nh n ư c thông báo v s ki n bàn phím. ActionScript _root.onKeyUp = function() { trace(Key.getAscii()); } Khi ngư i dùng nh n phím, r i nh t tay lên thì s t o ra s ki n onKeyUP, và s ki n này ư c thông báo t i _root (b n có th thay th _root b ng b t kỳ i tư ng nào) và sau ó thì hàm Key.getAscii() s cho ra k t qu là mã s ASCII tương ng v i phím v a ư c nh n, ví d A = 65, B = 66 .v.v B n có th xem cái fla m u 09keylistener.fla, trogn ó có o n code trên (lưu ý là trong fla này s không có gì h t ngoài o n code AS frame u tiên) N u b n mu n bi t phím ư c nh t là gì thay vì ASCII code thì b n có th dùng String.fromCharCode() cho ra k t qu b n mu n tìm. Thay dòng trace(Key.getAscii()); băng trace(String.fromCharCode(Key.getAscii())); Th t ra ngoài 3 cách trên, còn m t cách n a là dùng b x lý s ki n onClipEven c a movie clip theo d i s ki n keyDown, keyUp, nhưng cách này không còn ư c dùng trong Flash MX n a, vì v y b n ch có th cách này trong các Flash trư c MX thôi. Bài T p: Dùng phím di chuy n movie clip 1. T o m t file Flash m i 2. T o m t movie clip ơn gi n 3. G n o n code này vào movie clip ó ActionScript onClipEvent(enterFrame) { if (Key.isDown(Key.LEFT)) this._x -= 5; if (Key.isDown(Key.RIGHT)) this._x += 5; if (Key.isDown(Key.UP)) this._y -= 5; if (Key.isDown(Key.DOWN)) this._y += 5; }[/b] o n code trên ki m tra 4 phím mũi tên và di chuy n movie clip theo hư ng c a mũi tên. B n hãy th movie coi sao 4. Thay i o n code trên cho hoàn ch nh hơn: t o 2 bi n [b]x, y[/b] có giá tr tương ương v i v trí ban u c a movie clip, và l p giá tr cho bi n [b]speed[/b] b ng 5. M i frame c a movie, mình s ki m tra 4 phím mũi tên và i u ch nh giá tr c a 2 bi n [b]x,y[/b] ch không i u ch nh v trí c a movie clip, sau ó ph i h p v i bi n [b]speed[/b] tìm v trí m i cho movie clip, r i m i di chuy n movie clip t i ó: [code]onClipEvent(load) { x = this._x; y = this._y; speed = 5; } onClipEvent(enterFrame) { if (Key.isDown(Key.LEFT)) { x -= speed; } if (Key.isDown(Key.RIGHT)) { x += speed; } if (Key.isDown(Key.UP)) { y -= speed; } if (Key.isDown(Key.DOWN)) { y += speed; } this._x = x; this._y = y; } o n code trên có 2 lơi i m. Th nh t, chúng ta tìm v trí m i c a movie clip trư c khi chúng ta di chuy n movie clip t i ó, và như v y chúng ta có th ki m tra v trí m i có h p lý không (áo d ng rât nhi u trong game), và th hai là r t ti n cho chúng ta thay i t c di chuy n c a movie clip, ch c n thay i giá tr c a bi n speed Nh p văn b n Trong Flash, ngư i dùng có th nh p văn b n vào các khung, và b n có th dùng AS l y nh ng văn b n ó. cho ngư i dùng có th nh p văn b n, b n ph i t o khung input text và t o cho 1 varible tương ng v i gía tr trong khung input text ó. (n u b n nào chưa bi t t o input text thì có th download 3 cái CD hư ng d n ơ bên box tài li u tham kh o thêm) Các ch c năng và thao tác làm vi c v i chu i ký t (string Chúng ta có r t nh iu thao tác v i chu i ký t : 1. Ghép 2 chu i l i v i nhau: dùng ký hi u +. Ví d b n có variable tên là myVariable có giá tr là "Hello", và mu n ghép ch "world" vào sau ó thì dùng như sau: myVariable = myVariable + "world" và k t qu có ư c s là "Hello world". B n cũng có th ghép nhi u hơn 2 chu i l i v i nhau b ng cách trên. 2. Substrings. Substring là m t chu i ký t nh trong 1 chu i ký t khác. Ví d "ell" là substring c a "hello world" hay là "hello" hay là "elle" hay "hell". B n có th l y b t c substring nào c a 1 string v i cú pháp sau: String.substring(start, end));. String là i tư ng chu i mà b n mu n trích ra m t ph n, start là s th t c a ký t b t u cho chu i b n mu n lây, và end là s th t b t âu cho ph n b n không mu n l y. Lưu ý r ng ký t u tiê s có s th t là 0. Ví d v i o n code sau, output window s cho ra hàng ch "lo W" ActionScript var myString = "Hello World."; trace(myString.substring(3,7)); Ngoài ra còn 1 cách n a dùng tương t như cách trên nhưng ch khác v thông s và có cú pháp như sau: String.substr(start, length);. thông s 1 cho s th t c a ch cái u tiên và th hai cho chi u dài c a chu i. o n code sau cũng s có k t qu tư ng t như cách 1 ActionScript var myString = "Hello World."; trace(myString.charAt(6)); Các hàm c a i tư ng String i tư ng String. Sau ây là m t s hàm tiêu bi u c a 1. indexOf: dùng tìm s th t c a m t ký t hay m t chu i nh trong i tư ng String. N u hàm indexOf tìm không th y ký t hay chu i nh thì s cho ra k t qu -1. ây là cú pháp:myString.indexOf(substring,start)); substring là ký t hay chu i mình mu n tìm, start là s th t mình b t u tìm trong i tư ng String. Ví d : ActionScript var myString = "Hello World."; //output: 6 trace(myString.indexOf("W",0)); //output: 2 trace(myString.indexOf("llo",0)); 2. lastIndexOf: tương t như indexOf nhưng chúng ta tìm ký t cu i cùng i ngư c lên t iký t u tiên. ActionScript var myString = "Hello World."; //output: 2 trace(myString.indexOf("l",0)); //output: 9 trace(myString.lastIndexOf("l")); 3. toUpperCase/toLowerCase: dùng ngư c l i ActionScript var myString = "Hello World."; //output: HELLO WORLD trace(myString.toUpperCase()); //output: hello world trace(myString.toLowerCase()); i chu i t vi t thư ng sang vi t hoa và 4. length: là c tính c a Sring dùng tính chi u dài c a chu i. ActionScript var myString = "Hello World."; //output: 12 trace(myString.length); Bài t p: 1. m file 09form-noscripts.fla 2. ki m tra tên c a variable c a m i input text field qua property panel 3. Thêm o n mã sau vào nút CLEAR ActionScript on (release) { clearForm(); } 4. thêm o n mã sau vào nút SUBMIT ActionScript on (release) { submitForm(); } 5. Thêm o n code sau vào frame ActionScript function clearForm() { firstName = ""; middleInitial = ""; lastName = ""; address = ""; city = ""; state = ""; zip = ""; phone = ""; comments = ""; u tiên c a movie } function submitForm() { if (middleInitial.length == 1) { trace("Name: "+firstName+" "+middleInitial+". "+lastName); } else { trace("Name: "+firstName+" "+lastName); } } R i b n test movie. Gi th 10: T o Và i u Khi n Văn B n, Creating and Controlling Text Dynamic Text B n cũng có th hi n th văn b n b ng dynamic text field. Khác v i Input field mà b n làm quen trong gi s 9, dynamic text field ch cho phép AS thay i n i dung văn b n ch không ph i là ngư i dùng. Vì n i dung, hình th c c a văn b n có th thay i b t c lúc nào nên m i g i là dynamic text Trư c tiên b n t o dynamic text b ng d ng c text trên thanh toolbar, nhưng thay vì ch n "Input Text" trong property panel, b n ch n "Dynamic Text" Bư c k ti p là n i n i dung c a văn b n trong dynamic text field v i m t variable b ng cách vi t tên c a variable ó vào trong khung Var trong propery panel. Ví d như b n t variable myText vào trong khung Var thì khi b n thay i giá tr c a myText thì văn b n trong dynamic text field cũng thay i gi ng như giá tr c a bi n myText. Ngoài ra b n còn có th thay i m t s l a ch n cho dynamic text field như "Single", "Multiline", or "Multiline No Wrap" x lý trư ng h p n i dung c a văn b n quá dài và cònn nhi u l a ch n khác n a. (N u b n chưa n m v ng ph n này thì có th tham kh o thêm v s d ng Flash trong CD ư c post box tài li u) nh d ng văn b n theo HTML (HTML format) nh d ng văn b n ki u HTML, b n ph i cho phép dynamic text field ch p nh n nh d ng HTML (click vào HTML icon trên property panel) và sau ó b n có th nh d ng văn b n c a b n. Ví d o n code này s t o văn b n dùng th HTML sau: CODE myText = "This text is bold.
"; myText += "This text is italic.
"; myText += "This text is underlined.
"; myText += "This text is red.
"; myText += "This text is Arial Black.
"; myText += "This text is large.
"; myText += "This text is linked.
"; QUOTE This text is bold.
This text is italic.
This text is underlined.
This text is red.
This text is Arial Black.
This text is large.
This text is linked. Siêu liên k t (hyper link) trên có tác d ng gi ng như trong HTML như khác 1 i u là không có g ch dư i Sau ây là nh ng th HTML có th dùng trong Flash MX • • • • • • • • • : vi t m : vi t nghiêng : g ch dư i : ki u ch : c ch : link

: an văn
: Xu ng hàng i Tư ng TextFormat nh d ng cho văn b n là dùng i tư ng TextFormat. làm Còn m t cách khác ư c i u này, b n c n ph i t o ra 1 bi n t i tư ng TextFormat. Sau ó b n có th nh giá tr cho các thu c tính c a nó. Ví d b n mu n ki u ch Arial Black, c 26, và màu thì dùng an code sau: CODE myFormat = new TextFormat(); myFormat.font = "Arial Black"; myFormat.size = 36; myFormat.color = 0xFF0000; textInstance.setTextFormat(myFormat); B n có th dùng i tư ng TextFormat như là stylesheet trong các file HTML, m t khi b n t o nó ra thì b n có th dùng nó b t c ch nào trong movie B n có th coi các an code trên trong file m u: 10formattext.fla Variable ngoài Flash B n có th l y bi n t ngoài trang HTML vào trong Flash thay i n i dung c a Flash hay dùng vào b t c chuy n gì. Ví d b n ph i làm 30 cái banner b ng Flash cho 30 trang web, thì b n có th ch làm 1 cái banner thôi, nhưng thay i n i dung tuỳ theo t ng trang web. Mu n nh p văn b n hay giá tr c a bi n nào t HTML, b n ch c n thêm vài ch vào sau cái tên c a movie trong ph n trong HTML.. o n mã HTML sau ây nh p giá tr c a bi n txtName vào trong Flash HTML và trong th thì b n thêm ph n variable và giá tr vào sau tên file HTML src="10banner.swf?txtName=Dominico Savio!"> Khi movie load thì nó s t t o variable "txtname" và t giá tr cho bi n này b ng "Dominico Savio". B n có th xem trang 10banner.html, 10banner.fla trong cái source file xem chi ti t hơn. B n có th làm nhi u giá tr m t lúc cũng b ng cách này 10banner.swf?txtName=Dominico Savio!&gender=male" Ngoài l y bi n t HTML, b n còn có th l y bi n t các text file. Cách này thích h p khi b n có nhi u bi n nh p vào Flash, hay giá tr c a các bi n quá dài g n vào th HTML. B n ch c n dùng l nh loadVariables() làm ư c i u này. Ví d : CODE loadVariables("10external.txt", _root); B n có th coi thêm v cách dùng loadVariables() bên box ActionScript [Bài T p M t ví d ơn gi n áp d ng các i u mà b n v a h c trong bài này là làm m t cái "news ticker" như dư i ây: Dòng ch s ch y t bên ph i qua bên trái cho su t b n tin. B n có th tham kh o source fla: 10ticker.fla và test nó có khái ni m thêm v "news ticker" 1. T o movie m i 2. T o dynamic text field, v i cao ch v a 1 hàng, và dài b ng chi u ngang c a stage, cho d nh n, b n có th vi t vài chư trong ó, như là "text goes here" 3. T o variable cho text field này là text 4. Ch n font, nên dùng ki u ch tương t như Courier New, sao cho b ngang c a m i chư b ng nhau 5. Con text field r i nh n F8 nào tuỳ b n i thành Movie Clip, và t cho nó 1 cái tên như th 6. Sau ó thì g n o n script sau vào movie CODE onClipEvent(load) { // t b n tin tickerText = "News Alert: "; tickerText += "Stock prices shoot up sharply with good earnings reports. "; tickerText += "The first manned flight to Mars prepares to leave Earth orbit. "; tickerText += "Your favorite sports team wins championship. "; tickerText += "Scientists find cure for major diseases. "; firstChar = 0; // b t u ch cái u tiên lineLength = 50; // s ch cái t i a trên news ticker // thêm các kho ng tr ng vào trư c dòng tin for(var i=0;i tickerText.length) { firstChar = 0; } } Trư c tiên b n t o ra bi n tickerText ch a b n văn news ticker, bi n firstChar ch a giá tr c a ch cái u tiên s th y trong news ticker, và lineLenght là s ch cái có th xu t hi n m t lúc trên news ticker. Và t t c các u ư c cho vào trong b s lý d ki n onLoad Trong onEnterFrame, Flash s l y 50 ch cái u tiên b vào bi n text ( trong dynamic text field) cho nó hi n th lên màn hình. Sau ó di chuy n sang ch cái th 2 b ng câu firstChar++;, và sau cùng là ki m tra, n u b n tin ã ư c phát h t thì u. phát l i t 6. B n có th thay i giá tr c a lineLenght và giá tr c a b n văn trong tickerText hi u hơn v 2 bi n này 7. Bây gi b n hãy th dùng loadVariable() nh p b n tin t text file vào coi có ư c không. N u không thì hãy tr l i ây h i mình nhe Happy flashing Gi th 11: Làm vi c v i các con s , Chương này r t hay và b ích! Chúng ta ã nghiên c u v text và strings trong các chương trư c. Bây gi chúng ta s nghiên c u v nh ng con s . B n s ph i ng v i nh ng con s trong Action Script trong nhi u trư ng h p, vì v y b n c n ph i hi u làm sao s d ng chúng. Nh ng phép toán (operator) và nh ng hàm (function) v s Nh ng phép toán ơn gi n Chúng ta cũng ã h c qua các phép toán ơn gi n r i. Bây gi hãy xem l i nhé. D u + và d u - s th c hi n phép toán c ng và tr , d u * th c hi n phép nhân, d u / th c hi n phép chia. Ngoài ra, b n cũng có th s d ng nh ng phép toán như +=, -=, *=, /= làm ơn gi n cho code c a b n. L y ví d hai câu l nh dư i ây s th c hi n cùng m t công vi c là c ng thêm 7 và bi n a CODE a = a + 7; a += 7; Nh ng phép so sánh Nh ng phép toán so sánh như == so sánh hai s xem có b ng nhau không, > (l n hơn), < (nh hơn), <= (nh hơn ho c b ng), >= (l n hơn ho c b ng). Trong Action Script chúng ta có th so sánh m t s nguyên v i m t s th c. Ví d như 7.2 s l n hơn 7. Math.abs i tư ng Math ch a m t t p h p các hàm x lý các con s . Hàm Math.abs s tr v giá tr tuy t i c a m t s . B n hãy th o n code này xem k t qu th nào nhé: CODE trace(Math.abs(-7)); Math.round N u b n có m t s th c, nhưng b n l i mu n hi n th cho ngư i dùng xem dư i d ng s nguyên thay vì ph i cho h xem các con s ph n th p phân, b n hãy s d ng hàm Math.round. Th nhé: CODE trace(Math.round(7.2)); Math.ceil, Math.floor Hai hàm khác dùng làm tròn s th c thành s nguyên là Math.ceil và Math.floor. Hàm Math.ceil s làm tròn s lên và Math.floor s làm tròn s xu ng. Th nhé: CODE trace(Math.ceil(7.2)); trace(Math.floor(8.3)); Math.min, Math.max Các b n có th s d ng hai hàm này tìm s l n hơn và s nh hơn trong hai s . Ví d hàm Math.min(4, 5); s tr v 4, Min.math(4, 5); s tr v 5 Math.pow ây là hàm l y lũy th a, cũng ơn gi n thôi, tham s th nh t là cơ s , tham s th hai là lũy th a. Ví d b n mu n l y 4 lu th a 3 thì vi t th này CODE Math.pow(4, 3); Math.sqrt ây là hàm tính căn, nhưng mà mình xin nói tr ơc luôn là ngoài hàm Math.sqrt, b n còn có th s d ng hàm Math.pow v i lũy th a nh hơn 1 tính căn. Ví d mu n l y căn 2 c a 4 thì có th s d ng CODE Math.pow(4, .5); ho c Math.sqrt(4); C hai cách trên u ra cùng m t k t qu là 2. Hàm s lư ng giác Nh ng hàm c a object class mà các b n ư c bi t trên có v như r t d h c. Nhưng còn nh ng hàm v lư ng giác như sin, cosin thì “khó nu t” hơn nhi u. M c dù b n có th b qua nh ng hàm này nhưng nh ng hàm lư ng giác này r t h u ích và hay trong vi c t o nh ng ng d ng trong Flash. V y chúng ta hãy cùng tìm hi u cách nó làm vi c nhé! Hàm sin và cosin s d ng qua Math.sin và Math.cosin, bi u di n m i quan h gi a ư ng th ng v i ư ng cong c a m t ư ng tròn. Hình dư i ây bi u di n m t vòng tròn v i m t s i m ư c ánh d u b ng các ch . 0,0; bán kính c a ư ng tròn b ng 1. Vì Hãy tư ng tư ng tâm c a vòng tròn to th , i m trên cùng s có to 0,1 và i m t n cùng bên ph i s có to 1,0 Bây gi b n hãy tư ng tư ng vòng tròn trên là m t ư ng th ng. B t ut i m “a” có to 1,0 n i m 0,-1 qua -1,0 r i qua 0,1 và cu i cùng tr v 1,0. Trong Flash, và cũng như trong các ngôn ng l p trình khác, chúng ta nh v m t v t b t kỳ b ng to x, y c a chúng. Vì th , vi c chuy n m t i m trên ư ng th ng thành m t i m có to x, y trên ư ng tròn r t h u d ng. ó là nh ng gì mà hàm sin và cosin th c hi n. Ví d như chúng ta t i m “a” là i m b t u c a ư ng th ng c a ư ng tròn, b n có s d ng hàm sin và cosin c a 0 tính to x, y c a i m “a” trên ư ng tròn. T t nhiên, Math.cos(0) s tr v giá tr 1, Math.sin(0) s tr v giá tr 0. K t qu s tr v to c a i m “a” 1,0 V y i m “c” s n m âu trên ư ng tròn? N u du i ư ng tròn ra s có dài b ng 6.28 l n bán kính, do bán kính b ng 1 nên dài s b ng 6.28. ây là xu t x c a h ng s pi. Pi b ng 3.14, b ng m t n a dài c a ư ng tròn. dài c a ư ng tròn là 6.28 thì m t ph n tư dài ư ng tròn là 1.57. i m ó tương ng v i i m “c”. Hàm Math.cos(1.57) s tr v m t giá tr r t nh , g n b ng 0. Hàm Math.sin(1.57) s tr v giá tr g n b ng -1. Ch g n b ng ch không b ng vì h ng s pi không chính xác b ng 3.14, ch là g n b ng thôi. B n có th s d ng cách này chuy n các i m trên ư ng tròn thành i m có to x,y V y thì nó có ích như th nào? Gi s như b n mu n t o m t movieclip bay quanh màn hình trong m t vòng tròn. Làm sao làm ư c i u ó? N u làm b ng frame có th ph i t n hàng trăm frame . Ho c cách khác là có th dùng hàm Math.cos và Math.sin tính chuy n sang to x,y quanh vòng tròn. Trong o n code dư i ây, khi c ng thêm n, movie clip s chuy n ng d c theo ư ng tròn. Hàm Math.cos s tính ra giá tr x và hàm Math.sin s tính ra giá tr y, chúng s ư c nhân thêm v i giá tr c a radius tăng kích thư c c a ư ng tròn. Giá tr c a centerX và centerY s ư c c ng thêm cho các to x, y, vì th tâm ư ng tròn bây gi không còn 0,0 n a mà s v trí 150,150 CODE onClipEvent(load) { n = 0; radius = 100; centerX = 150; centerY = 150; } onClipEvent(enterFrame) { n += .1; this._x = Math.cos(n) * radius + centerX; this._y = Math.sin(n) * radius + centerY; } Ch (string) và s (number) Có r t nhi u cách chuy n i t chu i sang s và ngư c l i. Ví d như trư ng h p ngư i dùng nh p m t s vào text field, b n s nh n giá tr ó và c ng thêm m t. Hãy xem o n code sau ây, num là m t bi n giá tr text field CODE b = num + 1; u num = 42, v y thì b s là 43, úng không? Xin tr l i là sai, k t qu b là 421, ơn n b i vì num là m t chu i (string) ch không ph i là m t s , vì th khi chúng ta c hi n phép c ng num v i 1 có nghĩa là c ng ký t “1” vào chu i num ang có giá “42”. làm cho Flash hi u num là m t s , b n có th s d ng m t trong hai hàm sau ây chuy n m t chu i thành s . Hàm parseInt chuy n m t chu i thành ki u s nguyên, hàm parseFloat chuy n m t chu i thành ki u s th c. Ví d hàm parseInt(“42”) s tr v giá tr là 42, n u chúng ta s d ng parseInt(“42.9”) thì cũng s nh n ư c giá tr là 42 b i vì hàm parseInt không làm tròn s , nó ch l y ph n nguyên mà thôi. Còn n u s d ng hàm parseFloat(“42.9”) b n s nh n ư c giá tr là 42.9, mu n làm tròn các b n có th s d ng hàm Math.round(parseFloat(“42.9”)). Hàm parseFloat cũng s tr v m t m t s nguyên n u tham s truy n vào là m t chu i s nguyên. Ví d parseFloat(“42”) s cho ta s 42. Tr trư ng h p b n mu n tr v m t giá tr s nguyên, còn không b n nên s d ng hàm parseFloat. M t nét r t c bi t và r t hay c a hàm parseInt là có th chuy n m t chu i thành m t s nhưng thành nhi u d ng h s khác nhau. Hãy xem m t ví d cho d hi u: CODE parseInt(“FF”, 16); N gi th tr Hàm này s tr v giá tr là 255, ý nghĩa c a nó là chuy n chu i ch a s FF là m t s hexa h s 16 thành m t s h nguyên h s 10. Ngư c l i, chuy n t m t s sang m t chu i, hãy s d ng hàm toString. Hàm này s ho t ng khác v i hàm parse, b i vì nó ho t ng bên trong m i bi n, g i hàm này sau d u ch m (.). Xem ví d nhé: CODE a = 135; trace(a.toString() + 1); K t qu s là 1351. Chúng ta cũng có th s d ng hàm toString chuy n m t s thành m t chu i ch a s dư i m t h s khác. Ví d a.toString(16) s tr v k t qu là chu i “ff” S ng u nhiên T o s ng u nhiên là m t ph n quan tr ng trong công vi c thi t k game và m t s ho t hình. B i vì n u không có sô ng u nhiên thì nh ng o n phim c a b n s ch y gi ng nhau, không còn gì thú v n a! t o s ng u nhiên, b n có th s d ng hàm Math.random(). Hàm này s tr v m t giá tr t 0.0 n 1.0 nhưng thư ng thì không tr v giá tr b ng 1.0 Hãy xem ví d dư i ây, b n s nh n ư c con s ng u nhiên trong c a s OutPut CODE trace(Math.random()); K t qu tr v i lo i gi ng như 0.023268056102097, nhưng m i l n l i khác nhau. M t ví d khác là b n c n t o m t s ng u nhiên t 1 n 10, vi c này r t ơn gi n, ch c n nhân thêm s ng u nhiên cho 10. o n code sau s cho ta con s ng u nhiên t 0.0 n 10.0 CODE trace(Math.random() * 10); Nhưng cái chúng ta c n là con s ng u nhiên t 1.0 n 10.0, vì th , hãy c ng thêm 1 CODE trace(Math.random() * 10 + 1); n 10.0 ch không ph i t 0.0 Bây gi thì k t qu tr v là 1.0 n 11.0 nhưng s không có k t qu 11.0. Hãy s d ng hàm Math.floor làm tròn xu ng. CODE trace(Math.floor(Math.random() * 10 + 1)); Th t ra thì con s ng u nhiên trong máy tính cũng chưa th t s ng u nhiên. B i vì nó không th t s thay i trong b vi x lý. Thay vào ó s có m t con s chu n, m t con s nào ó không bi t trư c ư c như là gi ho c phút… c a h th ng, con s này s ư c ưa và m t bi u th c r t ph c t p, r t r t ph c t p mà chúng ta không th oán ư c. K t qu tr v cho chúng ta k t qu dư ng như là ng u nhiên. K t qu này s ư c ưa và m t hàm tính m t l n n a là lưu l i thành con s chu n tính ng u nhiên cho l n ti p theo. Hãy nghĩ v i u này, s ng u nhiên trong i s ng th t s cũng không th t s ng u nhiên. N u chúng ta gi m t m t c a con xúc x c, th y úng theo m t hư ng th t chính xác, chúng ta s có cùng m t k t qu ư c r i, bây gi hãy th t o m t s ng u nhiên t 3 n 7. Làm th nào ây? Ah, có m t th thu t cho b n ây: CODE trace(Math.floor(Math.random() * 5 + 3); Trong ph m vi t 3 n 7 s có t t c là 5 s nguyên 3, 4, 5, 6, và 7. Th còn trong ph m vi t 50 n 100 thì sao CODE trace(Math.floor(Math.random() * 51 + 50); Là s 51 b i vì trong ph m vi t 50 n 100 có 51 s , còn n u t 51 n 100 s là CODE trace(Math.floor(Math.random() * 50 + 50); M t cách th xem ph m vi c a b n có úng như ý c a mình không, ó là hãy th v i s nh nh t và s l n nh t thay cho Math.random(). Giá tr nh nh t c a hàm Math.random() là 0, hãy th v i s 0 nhé CODE trace(0 * 51 + 50); Giá tr l n nh t c a Math.random() s không chính xác b ng 1.0 mà s là g n b ng, v y chúng ta hãy th v i giá tr là 0.9999 CODE trace(.9999 * 51 + 50); Hãy th xem có úng không nhé! Dư i ây là m t ví d n a r t thú v , movie clip c a b n s nh y kỳ CODE onClipEvent(enterFrame) { this._x = Math.random()*550; this._y = Math.random()*400; } n nh ng v trí b t Luy n t p: T o m t chương trình máy tính ơn gi n Hãy b t tay vào vi c thi t k m t chương trình máy tính ơn gi n nhé. - M m t movie m i trong Flash. Movie c a chúng ta s gi ng như hình dư i ây Chúng ta s có 10 nút nh p 10 s t 0 n 9, các nút các phép toán, phím =, d u ch m th p phân, phím C xóa màn hình. M t text field t trên hi n th nh ng s ngư i dùng b m, text field này s liên k t v i bi n display. - Trong m i movie clip c a m i nút b m, chèn o n code sau CODE on (release) { _parent.keyPressed(this._name); } Khi m t nút b t kỳ ư c nh n thì hàm keyPressed s ư c g i level ngoài mà ây s là level root. Hàm này s truy n tên c a movie clip. - Quay tr l i level root, m i movie clip ph i có m t tên riêng, không ư c trùng. t tên c a movie clip theo s c a nó, ví d nút s 5 s có tên là 5, d u ch m th p phân có tên là “.”. D u c ng, d u tr , d u nhân, d u chia, d u b ng, nút C l n lư t t tên là plus, minus, multiply, divide, equals, clear. - Ok, bây gi b t u vi t code nhé! Code này s n m ngoài movie frame CODE // trư c tiên, xoá màn hình cũ clearAll(); function clearAll() { display = "0"; // giá tr m c nh là 0 memory = 0; // b nh operation = "none"; // chưa có phép toán nào c newNum = true; // ánh d u khi nào ã nh p xong m t s } Bi n display là m t chu i (string), s liên k t v i text field hi n th n i dung ngư i dùng b m. Nó s b t u v i giá tr b ng 0, có nghĩa là khi ngư i dùng m i b t máy lên thì s m c nh là s 0 Bi n memory lưu l i con s trư c ó th c hi n phép tính. i u này r t c n thi t, ví d b n b m s 5, +, 7 thì s 5 nh p vào, khi b n b m d u c ng, màn hình s ư c xóa và s 5 ư c lưu vào memory, s 7 ư c nh p ti p và s th c hi n phép tính 5 và 7. Phép toán ngư i dùng ch n cũng c n ư c lưu vào b nh . Khi ngư i dùng ã nh n 5, +, 7 r i, sau ó b m d u = ho c m t phép toán khác thì chương trình s g i l i phép toán cũ ã ơc lưu trong bi n operation th c hi n phép toán trư c c a 5 v i 7. Bi n newNum như là m t bi n c hi u báo cho chương trình bi t khi nào s k t thúc m t phép toán. Ví d khi ngư i dùng b m 5, +, 7 r i sau ó b m m t phép toán khác thì k t qu s ư c lưu l i tính toán ti p, lúc này phép toán chưa k t thúc, newNum = false. Còn n u ngư i dùng b m d u = thì màn hình s hi n ra k t qu và k t thúc luôn phép toán chuy n sang phép toán m i, newNum = true. - Ph n ti p theo là hàm keyPressed x lý khi m i nút ư c nh n. Hàm keyPressed s s d ng c u trúc switch thay cho c u trúc if, then, else. C hai cách u ho t ng tương t nhưng cách vi t hơi khác, b n hãy xem nhé: CODE // hàm này ư c g i b i nút nh n function keyPressed(keyName) { // do something different for different keys switch (keyName) { case "clear" : // khi nh n nút C clearAll(); break; case "plus" : // các phép toán c ng, tr , nhân, chia operate(keyName); break; case "minus" : operate(keyName); break; case "multiply" : operate(keyName); break; case "divide" : operate(keyName); break; case "equals" : operate(keyName); break; default : // các s if (newNum) { // hi n th s m i trên màn hình display = keyName; newNum = false; if (display == "0") newNum = true; // s không b t } else { display += keyName; // n i thêm s vào màn hình } break; } } Khi ngư i dùng nh n nút C thì hàm clearAll() s ư c g i, tương t khi ngư i dùng nh n các phép toán thì hàm operate s ơc g i - Hàm operate s th c hi n tính toán. Nó s tìm ra phép toán gi a con s trư c ó và con s hi n th i, s d ng hàm parseFloat chuy n chu i thành s .Operation có giá tr b ng none khi nh p m t s m i sau khi th c hi n xong phép toán và màn hình ư c xóa. CODE // th c hi n phép toán trư c function operate(keyName) { switch (operation) { case "none" : // s u tiên memory = parseFloat(display); // lưu l i s trư c break; case "plus" : // th c hi n phép toán memory += parseFloat(display); break; case "minus" : memory -= parseFloat(display); break; case "multiply" : memory *= parseFloat(display); uv is 0 break; case "divide" : memory /= parseFloat(display); break; } // equals operation is like a clear, but results are displayed if (keyName == "equals") { operation = "none"; } else { operation = keyName; // remember this operation for next time } display = memory.toString(); // display result newNum = true; // prepare for next number } Luy n t p: Làm nh ng hành tinh bay quanh qu o Trong ví d v lư ng giác trong ph n trư c, b n ã bi t cách làm m t movie clip quanh quay m t vòng tròn. Bây gi hãy áp d ng nh ng ki n th c ó làm m t movie 4 hành tinh xoay quang m t tr i, hành tinh th 3 s có m t v tinh. - T o m t movie m i trong Flash T o 6 movie clip là các vòng tròn, t tên l n lư t là sun, mercury, venus, earth, mars, and moon, và t instance name c a chúng gi ng v y luôn. Hãy làm cho kích thư c c a chúng ta khác nhau m t chút nhé! - t movie clip sun (m t tr i) vào gi a màn hình. Các hành tinh khác s quay quanh m t tr i. V trí c a các movie clip các hành tinh khác không quan tr ng, vì chúng ta s i u khi n v trí c a chúng b ng Action Script - t o n code sau vào movie clip mercurcy: CODE onClipEvent(load) { speed = .4; radius = 40; orbit = 0; } onClipEvent(enterFrame) { orbit += speed; this._x = Math.cos(orbit) * radius + _root.sun._x; this._y = Math.sin(orbit) * radius + _root.sun._y; } Trong event load s thi t l p t c quay c a hành tinh, kho ng cách gi a hành tinh v i m t tr i. Bi n speed i u khi n t c quay c a hành tinh, có nghĩa là s vòng quay trong m t frame. N u speed = 6.28 thì hành tinh s quay ư c m t vòng trong úng m t frame, và n u speed = .4 như trong o n code sau thì hành tinh s quay m t vòng qu o m t 15.7 frame (6.28/.4). Trong m i l n event enterFrame x y ra thì orbit (qu o) s ư c c ng thêm v i speed hi n th i, và hành tinh di chuy n n v trí m i. To x, y c a các hành tinh s ư c hi u ch nh theo v trí c a m t tr i, vì v y tâm qu o c a các hành tinh chính là m t tr i. - Ch y th movie. Lúc này, các hành tinh v n ng yên, ch có mercurcy là di chuy n. N u qu o b nghiêng thì b n ph i xem l i xem m t tr i có n m úng gi a qu o hay không. - t o n code tương t vào các movie clip venus, earth, and mars movie clips, nhưng mà b n hãy thay i giá tr c a hai bi n speed và radius làm cho hành tinh xa ho c g n m t tr i hơn. G i ý cho các b n nhé, speed c a các hành tinh mercury, venus, earth, and mars là .4, .2, .1, và .05, radius cho các hành tinh là 40, 90, 150, và 210. - Ch y th l i movie. Bây gi thì c b n hành tinh ã chuy n ng, ch còn moon là chưa chuy n ng vì chưa ư c vi t code i u khi n. - Bây gi hãy vi t code cho moon, moon s có speed nhanh hơn và radius nh hơn, và moon s quay quanh earth thay vì quay quanh sun CODE onClipEvent(load) { speed = .5; radius = 15; orbit = 0; } onClipEvent(enterFrame) { orbit += speed; this._x = Math.cos(orbit) * radius + _root.earth._x; this._y = Math.sin(orbit) * radius + _root.earth._y; } - Bây gi hãy ch y th movie c a b n m t l n n a. Bây gi t t c các hành tinh u ã quay r i, nhưng còn m t v n . Earth không chính xác n m gi a qu oc a moon, vì sao th ? B i vì moon s quay trư c earth, vì moon n m m t layer trên layer c a earth. Chúng ta c n ph i làm cho earth quay trư c r i m i n moon. làm như v y, ch n movie clip moon, r i ch n Modify -> Arrange -> Send to Back. Luy n t p: Làm tuy t rơi ây là m t ví d r t h u ích cho vi c t o s ng u nhiên. B n có th không c n ph i dùng Action Script nhưng lúc ó b n ph i làm hàng trăm movie clip bông tuy t, m i cái chuy n ng theo m t ư ng. B ng cách s d ng Action Script và s ng u nhiên, b n có th làm cho các bông tuy t rơi v i t c và hư ng rơi ng u nhiên. B t tay vào làm nhé! - T o m t movie m i trong Flash - T o m t movie clip m i, t tên là Snowflake và t tên instance c a nó là snowflake - t o n code sau vào movie clip Snowflake. o n code này s kh i t o nh ng giá tr ban u như v trí c a các bông tuy t, t c bông tuy t. CODE onClipEvent(load) { this._x = Math.random()*550; // 0 to 550 this._y = Math.random()*400; // 0 to 400 speed = Math.random()*3+3; // 3 to 6 drift = Math.random()*2-1; // -1 to 1 rotate = Math.random()*6-3; // -3 to 3 } onClipEvent(enterFrame) { this._y += speed; this._x += drift; this._rotation += rotate; // ưa nh ng bông tuy t lên u if (this._y > 400) this._y = 0; // ki m tra hai biên if (this._x < 0) this._x = 550; if (this._x > 550) this._x = 0; } rơi, t c b th i ngang, xoay c a Khi event enterFrame x y ra thì bông tuy t s ư c i u khi n rơi xu ng b i speed và b d t theo hư ng ngang b i drift. Bông tuy t cũng s b xoay theo giá tr c a rotate. Ti p theo là s ki m tra xem n u bông tuy t ã rơi xu ng t r i thì s cho nó rơi l i, n u bông tuy t b d t qua bên ph i thì nó s ư c ưa quay l i v bên trái… - Ch y th movie c a b n. Các bông tuy t s rơi t do. Hãy click vào cu i movie xem sao, nh ng bông tuy t dư i s ư c rơi l i. ơc r i, bây gi hãy làm cho bông tuy t nhi u nhi u m t tí b ng o n code sau, t vào timeline chính nhé! CODE // t o 50 bông tuy t for(var i=0;i<50;i++) { snowflake.duplicateMovieClip("snowflake"+i,i); } Hàm duplicateMovieClip ho t ng cũng gi ng như hàm attachMovie ưa movie clip vào trong lúc ang ch y. i m khác bi t là hàm duplicateMovieClip s chèn t m t Movie clip có s n, s d ng l i t t c hình nh và code, nhưng b n ph i ch c ch n r ng m i movie clip ph i có m t tên riêng và m t level riêng Gi th 12: i tư ng và M ng, Objects and Arrays Cho n bây gi , m i bi n u ch a d li u riêng l , m i bi n ch a m t d li u. i v i nh ng chương trình nh và ơn gi n thì không có gì nói, nhưng n khi b n c n s d ng th t nhi u bi n. Cũng có nh ng lúc b n g p khó khăn khi nh n ra r ng b n c n lưu r t r t nhi u d li u, nh ng bi n bình thư ng mu n làm thì không ph i d . ActionScript cung c p cho ta hai th lưu nh ng lo i nhi u d li u. M t là Custom Object ( i tư ng), v i Custom Object b n có th nhóm nh ng d li u riêng l l i v i nhau. Cách khác là Array (M ng), m t trong nh ng ph n cơ b n c a các ngôn ng l p trình cao c p. Trong gi th 12 này, chúng ta s h c: - Cách t o Custom Object - Cách s d ng nh ng i tư ng ActionScript ư c d ng s n - Tìm hi u v Array (M ng) - Làm ch chuy n ng - T o nh ng v t th ch y theo con tr chu t trên màn hình T o Custom Object Ch c h n các b n ã quen thu c v i nh ng tên như x và y i u khi n v trí trên movie clip. Có bao gi b n c m th y nhàm chán v i nh ng ch x, y hay mu n thay th nó b ng nh ng ch khác như positionX, positionY hay b t c gì b n thích không? Vi c ó quá ơn gi n, ch c n t o bi n c a b n r i gán giá tr cho bi n c a b n thôi . Nhưng dù sao thì ó cũng ch là nh ng bi n riêng l thôi, ch v i m t cái tên khác . Trong ph n này, chúng tôi không mu n ch cho các b n làm nh ng i u như v y mà s nói v cách t o m t custom variable Object. Ví d , b n có th lưu bi n x, y như sau: CODE pos = {x:10, y:20}; B ng cách s d ng hai d u ngo c nh n, b n ã t o ra m t object. B n có th truy c p d li u b ng cách: CODE trace(pos.x); B n có th s d ng nó như b t c nh ng bi n nào khác. Hãy tư ng tư ng n m t c u trúc ph c t p hơn nhi u như m t record trong m t cơ s d li u. Ví d như ta có m t custom object tên record, và trong nó s có nh ng property như là name, address, phone… B n có th t o object t ng bư c m t, t o thêm property. Xem ví d này nhé: CODE record = new Object(); record.name = "Gary"; record.age = 32; record.state = "Colorado"; trace(record.name); Cũng v i m c ích làm cho d li u d t ch c hơn, custom object cũng gi ng như nh ng i tư ng d ng s n. Hai ví d v nh ng i tư ng d ng s n là Color và i tư ng Date. i tư ng Color Có th dùng ActionScript i màu c a m t movie clip b ng cách s d ng câu l nh setRGB. ó là cách d nh t nhưng nó s không th c hi n ư c i v i instance c a movie clip. Thay vào ó, chúng ta s chuy n n i tư ng Color c a movie clip. Th c hi n cách ó b ng hàm new Color(), sau ó thì có th s d ng câu l nh setRGB thay i màu. Dư i ây là m t ví d , s d ng setRGB t i tư ng Color c a movie clip tl i màu cho movie clip sang màu 0xFF0000 (màu ) CODE circleColor = new Color("circle"); circleColor.setRGB(0xFF0000); Chúng ta cũng có th l y màu c a m t movie clip. S d ng hàm getRGB() l y màu c a movie, nhưng nh s d ng hàm toString(16) chuy n thành giá tr hexa. CODE circleColor = new Color("circle"); trace(circleColor.getRGB(0xFF0000).toString(16)); M t cách khác t màu cho movie clip b ng cách t o m t transform ng v i 8 m c như trong hình dư i ây i tư ng color u tiên, t o m t i tư ng custom variable. R i t o các property ra, ga, ba, aa, rb, gb, bb, ab. Các ký t u tiên r, g, b, a là i di n cho t red, green, blue và alpha. Còn ký t th hai a và b là i di n cho 2 c t bên trái và bên ph i Thay vì s d ng setRGB thì chúng ta s s d ng setTransform như trong ví d dư i ây: CODE circleColor = new Color("circle"); myObject = new Object(); myObject = {ra:100, rb:255, ga:0, gb:0, ba:0, bb: 0, aa: 100, ab: 0}; circleColor.setTransform(myObject); i tư ng Date M t i tư ng d ng s n khác là i tư ng Date. i tư ng này cũng có th ư c xem như là m t bi n bình thư ng, nó i di n cho m t th i i m c a th i gian. i tư ng Date ư c chia ra 7 ph n: năm (year), tháng (month), ngày (date), gi (hour), phút (minute), giây (second) và ph n trăm giây (milisecond). B n có th t o m t i tư ng Date m i b ng cách cung c p cho nó 7 thông tin trên CODE myDate = new Date(2002,3,29,10,30,15,500); Hãy th s d ng câu l nh trace ki m tra n i dung c a myDate xem nào. Có ph i b n nh n ư c k t qu này không? CODE Mon Apr 29 10:30:15 GMT R t d hi u, úng không nào? Nhưng mà còn m t v n : tháng là Apr trong khi chúng ta truy n tham s vào cho tháng là 3, v y ph i là March ch !? i tư ng Date c a Flash cũng ho t ng tương t như i tư ng Date c a các ngôn ng l p trình khác. Tháng ư c quy nh t 0 n 11, r t c bi t, b i ngày thì ư c quy nh t 1 n 31 . Nhưng dù sao thì b n cũng ph i làm quen i B n cũng có th l y nh ng thành ph n t i tư ng Date. Ví d dư i ây s l y năm. CODE myDate.getYear() B n có th l y gi hi n t i b ng cách ơn gi n là t o m t Gi hi n t i s ư c ưa vào i tư ng. Ví d : CODE myDate = new Date(); trace(myDate); i tư ng Date r ng . Chú ý: Flash s l y gi c a ng h h th ng trong máy b n. Vì th máy tính c a b n ch y sai thì gi l y ra s sai M ng (Array) ng h trong M ng là m t ph n r t quan tr ng trong l p trình. B n s g p m ng trong h u h t các ngôn ng l p trình b i vì nó là m t công c r t c n thi t cho nh ng ngôn ng l p trình ph c t p. M ng (Array) là m t dãy d li u. Trong ó thì các d li u s có cùng m t ki u d li u v i nhau, như là cùng là tên c a movie clip ho c u cùng là v trí c a movie clip T o m ng Dư i ây là m t ví d v m t m ng. S d ng d u ngo c vuông và nh ng d u ph y t o m ng: CODE myArray = [36,23,63,71,25]; M ng myArray có ch a 5 ph n t là s nguyên. Mu n l y giá tr c a m t ph n t trong m ng thì s d ng như sau: CODE trace(myArray[0]); Ph n t u tiên trong m ng luôn luôn ư c ánh s 0. Vì v y, như ví d trên có 5 ph n t thì ph n t th 0 ch a giá tr 36 và ph n t th 4 mang giá tr 25. M t cách khác t o m ng là s d ng new Array() CODE myArray = new Array(); Mu n thêm m t ph n t vào cu i m ng, s d ng câu l nh push. Ví d dư i ây s t o ra m t m ng gi ng m ng ví d trên: CODE myArray = new Array(); myArray.push(36); myArray.push(23); myArray.push(63); myArray.push(71); myArray.push(25); Nh ng thao tác trên m ng ki m tra xem m ng có bao nhiêu ph n t thì b n có th s d ng thu c tính length CODE myArray = [36,23,63,71,25]; trace(myArray.length); Còn n u mu n l y ph n t cu i cùng c a m ng và b ph n t này ra kh i m ng thì s d ng câu l nh pop CODE myArray = [36,23,63,71,25]; trace(myArray); a = myArray.pop(); trace(a); trace(myArray); o n code ví d trên s trace 5 ph n t c a m ng myArray. Sau ó, l y ph n t cu i cùng c a m ng t c là 25 ưa vào bi n a, ng th i b ph n t 25 ra kh i m ng. Cu i cùng trace các ph n t c a m ng myArray, lúc này ch còn 4 ph n t . S d ng k t h p push và pop t o m t h th ng vào sau ra trư c (last in first out), thư ng g i là stack. Hãy tư ng tư ng n m t ch ng sách, chúng ta cu n sách u tiên xu ng, r i ch ng lên cu n sách th 2, cu n th 3, cu n th 4… Khi mu n l y sách ra thì ph i l y cu n trên cùng trư c, t c là ch ng lên cu i cùng. Ngư c l i v i pop là shift. Nó s b ra ph n t u tiên trong m ng. o n code dư i ây s làm gi ng như o n trên nhưng s không b ph n t 25 mà s b ph n t 36: CODE myArray = [36,23,63,71,25]; trace(myArray); a = myArray.shift(); trace(a); trace(myArray); Ngư c l i v i shift là unshift. Nó s chèn thêm m t ph n t vào u m ng. N u b n mu n l y ra ch m t ph n c a m ng thì có th s d ng hàm slice. is truy n vào s là v trí u tiên và v trí cu i cùng c a ph n c n l y ra trong m ng. CODE myArray = [36,23,63,71,25] trace(myArray.slice(1,3)); o n code trên s tr v 23, 63 vì nó không k ph n t th 3. N u không có i s th 2 thì nó s l y n cu i m ng. M t hàm khác n a là hàm splice. Hàm này s thay th m t s ph n t trong m ng b ng nh ng ph n t khác. S d ng hàm này, i s u tiên là v trí c a ph n t trong m ng, i s th hai là s ph n t mu n xóa k t ph n t trong i s u tiên. Truy n i s th 2 là s 0 n u không mu n xóa ph n t nào c . Nh ng ph n t ti p theo là danh sách nh ng ph n t mu n chèn vào m ng. Nói v y cũng hơi khó hi u nh , v y hãy xét ví d này nhé. Ví d này s xóa ph n t 23 và 63 và chèn vào ph n t 17. CODE myArray = [36,23,63,71,25]; myArray.splice(1,2,17); trace(myArray); S p x p trong m ng Chúng ta có th s p x p m t m ng b ng câu l nh sort. Ví d dư i ây s cho ta m t m ng ư c s p x p theo th t s : CODE myArray = [36,23,63,71,25]; myArray.sort(); trace(myArray); Còn ví d này s s p x p theo th t ch : CODE myArray = ["Gary","Will","Jay","Brian"]; myArray.sort(); trace(myArray); Câu l nh reverse o v trí s p x p c a m ng. Ví d : CODE myArray = ["Gary","Will","Jay","Brian"]; myArray.reverse(); trace(myArray); Mu n s p x p m ng theo v trí gi m d n thì s d ng sort r i s d ng reverse. S d ng câu l nh concat n i hai m ng l i v i nhau. Nó s không làm thay m ng cũ, mà nó s t o ra m t m ng m i. i các CODE myArray = [36,23,63,71,25] otherArray = [58,97,16]; newArray = myArray.concat(otherArray); trace(newArray); Chuy n i gi a chu i và m ng Chúng ta có th s d ng câu l nh join i t m t m ng thành chu i. Câu l nh này c n m t i s duy nh t là ký t ngăn cách gi a các ph n t c a m ng trong chu i. N u b n không truy n tham s này vào thì ký t m c nh là d u ph y. Ví d dư i ây tr v 36:23:63:71:25. CODE myArray = [36,23,63,71,25] myString = myArray.join(":"); trace(myString); Câu l nh join ít ư c s d ng vì nó không c n thi t l m, nhưng hàm split l i r t h u d ng. Nó s chuy n i t m t chu i sang m ng. Ví d như nó s chuy n m t chu i “36,23,63,71,25” thành m t m ng trong ví d dư i ây: CODE myString = "36,23,63,71,25"; myArray = myString.split(","); trace(myArray); Hãy nghĩ n chuy n chúng ta có m t câu nói ư c lưu trong m t chu i mu n chuy n sang m ng, m i ph n t trong m ng s ch a m t ch . Xem ví d dư i ây nhé: CODE myString = "This is a test"; myArray = myString.split(" "); trace(myArray); Làm ch chuy n ng Trong ví d này, chúng ta s l y t ng ch trong m t câu dài và hi n th vào textfield. - T o movie Flash m i - T o m t text field dynamic, cho font ch to, kho ng 64. Cho text field n m gi a màn hình và canh gi a cho text field. t variable = text. - V m t shape r i ch n Insert -> Convert to Movie Clip. t tên cho instance này là Actions r i kéo nó ra ngoài vùng hi n th . - Chèn o n code sau vào movie clip ó. u tiên s s d ng hàm split tách t ng ch c a câu vào trong m ng. Sau ó s khai báo thêm 3 bi n n a. Bi n wordNum s lưu m t con s là s th t c a ch s hi n th . Bi n frameDelay s lưu s frame m i ch hi n ra. Bi n frameCount s m s frame mà m t ch ã i qua. CODE onClipEvent(load) { // get the words wordList = ("Imagination is more important than knowledge").split(" "); // set up variables wordNum = 0; frameDelay = 6; frameCount = frameDelay; // prime for first word } onClipEvent(enterFrame) { // time for new word if (frameCount == frameDelay) { _root.text = wordList[wordNum]; // display word wordNum++; // next word if (wordNum >= wordList.length) wordNum = 0; frameCount = 0; } frameCount++; } - Nào, bây gi thì ã xong r i, hãy ch y th xem nào Gi th 13: S d ng Rollovers, Rollovers T o hình dáng con tr theo ý thích Vi c thay con tr m c nh b ng m t con tr theo ý thích c a mình r t ơn gi n, ch c n s d ng hàm Mouse.hide() và t m t movie clip c a mình vào v trí c a con tr là xong. Con tr có th là b t c hình dáng gì cũng ư c, như là hình mũi tên, hình bàn tay hay m t movie clip. Hình dư i ây là m t ví d c a m t movie clip ư c dùng làm con tr . Ch là m t hình mũi tên ơn gi n nhưng b n ph i chú ý r ng d u c ng chính gi a movie clip ph i n m ngay u c a mũi tên. N u b n mu n s d ng l i con tr m c nh thì ch c n g i Mouse.show() M t i u c n lưu ý n a là ph i ch c r ng movie clip làm con tr c a chúng ta ph i trên t t c các movie clip khác. Chúng ta có th ch n Modify -> Arrage ->Bring To Front ưa movie clip lên u nhưng ch là trên các movie clip trong layer ó mà thôi. Cho dù b n có movie clip c a mình lên layer trên cùng thì cũng có th b che khu t b i nh ng movie clip ư c load vào b ng duplicateMovie và attachMovie. Vì v y, chúng ta s s d ng swapDepths() ưa movie clip này lên trên cùng. Câu l nh swapDepths() s ưa movieclip lên m t level m i, level có th là m t s nguyên 0, 1, 2… 9999. Vì th chúng ta s s d ng l nh Cursor.swapDepths(9999); ưa movieclip c a chúng ta lên trên cùng. Luy n t p: T o con tr tĩnh - T o m t movie m i - T o m t movie clip m i thay th cho con tr - Quay tr l i movie u tiên, và chúng ta s thay th con tr b ng cách CODE onClipEvent(load) { // hide the real cursor Mouse.hide(); // bring this movie clip to the front this.swapDepths(99999); } - Ti p theo chúng ta s g n v trí c a movie clip vào v trí c a con tr CODE onClipEvent(enterFrame) { // follow the mouse this._x = _root._xmouse; this._y = _root._ymouse; } - Sau cùng, chúng ta s ph c h i l i con tr cũ khi k t thúc movie CODE onClipEvent(unload) { // show the real cursor again Mouse.show(); } - Cu i cùng là vi c ch y th movie c a mình Luy n t p: T o con tr ng - Chúng ta có th s d ng l i movie trư c - T o m t button m i trong root. Hãy th làm cho button có s thay i trong over và down chúng ta có th th y ư c s khác bi t. - Chúng ta s thay i m t ít trong movie clip làm con tr . T o m t frame th hai, v thêm vài nét như hình v - t tên hai frame là normal và over button t câu l nh stop(); vào frame u tiên c a movie clip - Kéo th m t button vào root - t tên movie clip làm con tr là cursor - Thêm o n code sau vào button CODE on (rollOver) { cursor.gotoAndStop("over button"); } on (rollOut) { cursor.gotoAndStop("normal"); } - Bây gi hãy ch y th xem nào , hãy th click vào button xem sao. Xem k t qu b n làm có gi ng hình này không nhé! Rollovers M t k thu t thông d ng hi n th nh ng thông tin dài là s d ng Rollovers ưa ra nh ng thông tin thay vì s d ng m t button ngư i dùng click vào thì s sang m t trang khác. Ý tư ng c a k thu t này là khi ngư i dùng ưa chu t lư t nh ng vùng nào ó. M i vùng s hi n th cho ngư i dùng xem m t thông tin gì ó trên màn hình. Trong ví d sau, s có 9 vùng như th , m i vùng s là m t tên c a m t hành tinh ( bên trái). Khi chúng ta ưa tr chu t qua nh ng vùng ó thì bên ph i s xu t hi n thông tin v hành tinh ó. Khi ưa tr chu t ra ngoài thì thông tin ó cũng bi n m t. Chúng ta có th s d ng AS Rollovers s d ng button làm Rollovers b ng nhi u cách Chúng ta s s d ng hai event c a button là on(rollOver) và on(rollOut) vi t code x lý vi c hi n th thông tin. Hãy xem ví d dư i ây: CODE on (rollOver) { information.gotoAndStop("information 1"); } on (rollOut) { information.gotoAndStop("none"); } Rollovers s d ng movie clip Flash không có hàm onClipEvent(mouseOver), vì th chúng ta s s d ng m t hàm khác. Hàm hitTest s cho chúng ta bi t r ng con tr chu t có ang trên movie clip hay không. Và chúng ta có th làm như sau CODE onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse, true)) { _root.information.gotoAndStop("information 1"); } else { _root.information.gotoAndStop("none"); } } Nhưng làm như v y v n còn m t v n n a. B i vì movie clip c a chúng ta s v n ti p t c ch y t frame này sang frame khác, chúng ta ã g i hàm gotoAndStop() d ng l i. Hãy tư ng tư ng chúng ta có nhi u rollovers. Cái u tiên s ưa movie clip information v frame none, m t khác thì rollovers khác l i ưa movie clip information v m t nơi khác. i u này s làm x y ra xung t. Vì v y, chúng ta s làm như sau. Chúng ta s ghi nh l i r ng con tr chu t có ang trên movie clip hay không. N u có, nó s thi hành l nh khi con tr chu t ra ngoài movie clip. Còn n u không, nó s thi hành l nh khi con tr chu t i vào movie clip. làm i u này, chúng ta s s d ng bi n over, ph thu c vào v trí c a con tr chu t mà nó s mang giá tr true ho c false. i v i m i frame, chúng ta s s d ng hàm hitTest ki m tra v trí c a con tr chu t. N u v trí con tr i l p v i over thì s x y ra s thay i. Chúng ta hãy xem o n code sau: CODE onClipEvent (load) { over = false; } onClipEvent (enterFrame) { // ki m tra xem li u con tr chu t có ang di chuy n qua movie clip không testOver = (this.hitTest(_root._xmouse,_root._ymouse, true)); if (testOver and !over) { _root.information.gotoAndStop("information 1"); over = true; }else if (!testOver and over) { _root.information.gotoAndStop("none"); over = false; } } Rollovers s d ng frame ây, chúng ta s bàn v m t Như ã nói trên, có r t nhi u cách làm rollovers. cách khác. Thay vì s d ng movie clip cho m i thông tin c n hi n th , chúng ta s s d ng timeline chính lưu thông tin. Frame u tiên s là frame none, và các frame ti p theo s ch a các thông tin. Chúng ta hãy xem hình bên dư i Ví d trên s d ng button cho các hotspot, và chúng ta hãy lưu ý r ng các button s xu t hi n trong t t c các frame, nhưng thông tin c n hi n th thì ch xu t hi n m t vài frame. Bây gi công vi c vi t code c a chúng ta g n gi ng như làm rollovers b ng button. Nhưng chúng ta không c n ph i g i hàm gotoAndStop t movie clip information. CODE on (rollOver) { gotoAndStop("information 1"); } on (rollOut) { gotoAndStop("none"); } L i th c a vi c s d ng cách này là chúng ta có th thay i nh ng thông tin trong các frame r t d dàng, chúng ta không ph i m x vào t ng movie clip. N u b n quen s d ng nhi u frame thì ây là m t cách t t cho b n Lưu ý r ng c ba cách trên u cho m t k t qu như nhau, không có s khác bi t. ây, chúng tôi ch mu n trình bày cho các b n th y nh ng cách làm khác nhau mà thôi! Luy n t p: Hi n th thông tin Nào, bây gi các b n hãy th s d ng nh ng hi u bi t c a mình v cách thay i con tr và rollovers làm m t chương trình xem nào! Chương trình này s hi n th nh ng thông tin v các hành tinh. Chúng ta s có 9 hotspot, m i hotspot là m t hành tinh, m i hotspot s hi n th m t h p thông tin khi ưa tr chu t ngang qua. M i hotspot là m t button, vì th ngư i dùng có th click vào di chuy n n m t frame khác xem nh ng thông tin v hành tinh ó. - u tiên, hãy t o m t movie m i trong Flash. Movie này s có 10 frame, t frame 2 cho n frame 10 s ch a thông tin c a các hành tinh. t tên frame 1 là none và tr ng vùng hi n th thông tin. t 10 button bên trái, m i cái cho m t hành tinh. M t movie clip summary s xu t hi n hi n th thông tin v n t t v các hành tinh khi ưa tr chu t ngang qua. Movie clip này cũng s ch a 10 frame: 1 frame tr ng và 9 frame ch a thông tin c a 9 hành tinh. Chúng ta cũng ph i chú ý vi c s d ng layer cũng r t quan tr ng, trong ví d này thì chúng ta s s d ng 3 layer và movie clip summary s ư c t layer trên cùng - t l nh stop(); vào frame u tiên, và cũng t trong frame u tiên c a movie clip summary - Nào, hãy vi t code nhé! CODE on (rollOver) { summary.gotoAndStop("mercury"); } on (rollOut) { summary.gotoAndStop("none"); } - Nh ng button trên s ưa ngư i dùng n nh ng frame khác nhau tin v hành tinh, chúng ta l i vi t code cho các button CODE on (release) { gotoAndStop("mercury"); } xem thông Lưu ý r ng chúng ta có hai frame tên mercury, m t frame timeline chính và m t trong movie clip summary - T o m t movie clip thay th con tr chu t, và vi t code như sau CODE onClipEvent(load) { Mouse.hide(); this.swapDepths(99999); } onClipEvent(enterFrame) { this._x = _root._xmouse; this._y = _root._ymouse; } onClipEvent(unload) { Mouse.show(); } - Ti p theo chúng ta s làm cho con tr chu t thay i khi ưa con tr ngang qua các button. Hãy thêm o n code sau vào ph n code c a button CODE on (rollOver) { summary.gotoAndStop("mercury"); cursor.gotoAndStop("over button"); } on (rollOut) { summary.gotoAndStop("none"); cursor.gotoAndStop("normal"); } on (release) { gotoAndStop("mercury"); } Bây gi thì movie c a b n ã xong. B n hãy ch y th xem sao Gi th 14: Thành ph n Scroll, Scrolling M c dù scrollbar r t quen thu c trong các ng d ng Mac, Windows, các trình duy t web… nhưng m y ai hi u ư c nó ho t ng như th nào. Lý do ơn gi n là do ây là m t trong nh ng thành ph n tr c quan, r t d xây d ng mà không c n ph i vi t code nhi u. M i ngư i s d ng nó nhưng không suy nghĩ nhi u v nó. K t qu là khi nh ng nhà phát tri n s d ng Flash t o ra nh ng scrollbar c a riêng h thì g p khó khăn. Vì v y, chúng ta hãy cùng nhau tìm hi u 4 thành ph n cơ b n c a m t scrollbar và hãy tìm hi u scrollbar là gì. Hình dư i ây cho chúng ta th y nh ng thành ph n cơ b n c a m t scrollbar là: mũi tên lên, mũi tên xu ng, thanh trư t và khay trư t. Thanh trư t (Slider) Thanh trư t ph c v nhi u m c ích. u tiên, thanh trư t s trư t trên khay trư t cho chúng ta th y v trí c a kh i văn b n chúng ta ang xem. N u thanh trư t trên cùng thì chúng ta ang xem dòng u tiên c a văn b n, còn n u thanh trư t cu i thì chúng ta ang xem dòng cu i cùng. Như ã nói, thanh trư t s ư c k p ch t và trư t trên khay trư t. Khi chúng ta kéo thanh trư t trư t trên khay trư t thì kh i văn b n s ư c c p nh t v trí thích h p. M i ây, scrollbar có thêm m t c tính m i. Thay vì kích thư c c a thanh trư t s b g n s n v i m t giá tr thì kích thư c này s ư c thay i tùy vào dài văn b n. Vì th , v trí u tiên c a thanh trư t s ng v i dòng u tiên c a văn b n và v trí cu i cùng s ng v i dòng cu i cùng. Ví d m t textbox có scrollbar hi n th ư c 10 dòng c a m t văn b n có 100 dòng thì chi u cao thanh trư t s là 10% so v i khay trư t. Nhưng chúng ta s không bàn v n này ây. Khay trư t (Bar) Khay trư t có ch c năng chính là ch a thanh trư t và cho thanh trư t trư t trên nó. Chi u dài c a khay trư t ph thu c vào dài c a văn b n. Khay trư t còn có m t ch c năng n a là khi ta click vào khay trư t thì kh i văn b n s di chuy n m t trang. Khi click vào ph n trên c a thanh trư t thì kh i văn b n s di chuy n n trang trư c, còn n u click vào ph n dư i thanh trư t thì kh i văn b n s di chuy n n trang sau. Các mũi tên Mũi tên lên và xu ng là hai thành ph n ơn gi n nh t c a scrollbar, nó ch có ch c năng cho ngư i dùng di chuy n kh i văn b n t ng dòng m t. Nh ng thu c tính chung Scrollbar có m t s thu c tính chung mà chúng ta c n ph i xem xét. u tiên, các thành ph n c a scrollbar ch ho t ng khi chúng ta click vào, và s ti p t c ho t ng cho n khi chúng ta th nút chu t ra. L y ví d : n u ngư i dùng click vào mũi tên xu ng di chuy n m t kh i văn b n thì kh i văn b n s di chuy n t ng dòng m t cho n khi chúng ta th nút chu t ra. M t v n n a là v trí thanh trư t ph i ư c c p nh t liên t c khi nh ng thành ph n khác ư c kích ho t. Scroll m t văn b n u tiên, chúng ta m khung Properties ra t tên l i cho text field. Như trong hình dư i ây, chúng ta s t tên cho text field là scrollText Sau ó, chúng ta có th vi t code cho nó l y d li u vào. Nhưng trư c h t c n t cho text field c a chúng ta m t scroll. Khi ã ch n vào text field r i thì b n có th thay i kích thư c c a text field b ng cách kéo hình ô vuông góc dư i bên ph i c a text field. Còn n u không t kích thư c thì text field s v a hi u th n i dung bên trong. Thay vì i u ch nh b ng hình vuông màu tr ng thì lúc ó, chi u cao c a text field s ư c t i u ch nh theo kích thư c n i dung bên trong, có nghĩa là n u văn b n bên trong text field ó có nhi u dòng thì chúng ta không th làm cho text field ch hi n m t vài dòng scroll. Mu n là xu t hi n scroll thì chúng ta hãy gi phím Shift và click vào hình vuông tr ng ó tr thành hình vuông en, lúc này chúng ta có th i u ch nh kích thư c text field theo ý mu n. Như v y là chúng ta ã kích ho t scroll cho text field. Còn m t s thu c tính khác lien quan n scroll như Thu c tính scroll s cho chúng ta bi t dòng nào trong văn b n s xu t hi n u tiên. VD như scroll = 1 thì dòng u tiên s ư c hi n th u tiên, n u scroll = 2 thì dòng th hai s hi n th và lúc này thì dòng 1 s không th y ư c. Thu c tính maxscroll cho chúng ta bi t giá tr l n nh t c a scroll Thu c tính scroll và bottomscroll cho chúng ta bi t chính xác dòng văn b n nào trên u và dòng nào cu i scroll văn b n lên hay xu ng b n c n ph i tăng ho c gi m giá tr c a scroll. Th là xong! Luy n t p: Thi t k m t chương trình scroll văn b n ơn gi n Bài t p này th t ra r t d . Trong ví d dư i ây, chúng ta s xây d ng m t chương trình v i m t text field dynamic ch a văn b n và hai button như hình dư i ây - Tìm m t o n văn b n nào ó dán vào text field (tìm o n nào dài dài tí ) - Bây gi hãy t o m t movie m i trong Flash - S d ng công c Text Tool t o m t text field - M ph n Properties ra và t tên cho text field c a chúng ta là scrollText. t thu c tính Mutiline và Show Border Around Text - Dán o n văn b n mà b n ã chu n b vào text field - T o hai button gi ng như hai hình v trên. M t button i u khi n i lên, m t i xu ng. - Nh p o n code sau cho button i lên: CODE on (press) { scrollText.scroll--; } - Và nh p o n code này cho button i xu ng: CODE on (press) { scrollText.scroll++; } - Ok, bây gi b n hãy ch y th movie c a mình xem sao. B n hãy th click vào button scroll văn b n Gi th 15: Các thành ph n nh p li u Các b n có th t o ư c nhi u thành ph n nh p li u b ng Action Script, ch c h n các b n ã g p các thành ph n này trong các th HTML. Trong chương này, các b n s h c cách làm checkbox, radiobutton b ng Action Script. B n cũng s h c ư c cách làm sao chuy n t thành ph n này sang thành ph n khác trong form b ng cách nh n nút TAB, và làm sao h n ch n i dung ngư i dùng nh p vào Các n i dung trong chương này: - Cách t o checkbox - Cách t o radiobutton - S d ng TAB chuy n t thành ph n này sang thành ph n khác - H n ch n i dung nh p li u T o Checkbox Trong Hour 8, các b n ã bi t cách t o m t selectable movie clip. CheckBox cũng là m t Selectable movie clip gi ng v i các checkbox chu n s d ng trong các h i u hành Mac và Windows. t o ra m t Checkbox b n c n 2 button và 1 movie clip. Button u tiên th hi n tr ng thái Off c a Checkbox, có nghĩa là khi checkbox chưa ư c ch n. M t button th hi n tr ng thái On, có nghĩa là cũng checkbox ó nhưng ã ư c ch n. Hình dư i ây là 3 checkbox làm ví d . Check box u tiên ang ư c ch n, cái th 2 chưa ư c ch n, cái th 3 thì ngư i dùng ang chu n b ch n. Các b n có bi t cách nào cho 3 thành ph n c a checkbox ho t ng chung như v y ư c không? R t ơn gi n, button Off s ư c ưa vào m t movie clip riêng t frame u tiên, b m F6 t o frame k ti p và t button On vào frame th 2. t tên frame 1 là Off, frame 2 là On. Ti p theo, cho m t câu l nh stop(); vào frame 1 dùng movie clip l i ngay ó. Trong m i button ó s có m t o n code g i m t hàm ngoài time line c a movie clip có ch a 2 button x lý khi m i nút ư c nh n. CODE on (release) { pressButton(); } Ngoài ra, trong frame Off (frame 1) s còn ch a m t o n code n a ngoài câu l nh stop(); CODE state = false; function pressButton() { state = !state; if (state) { gotoAndStop("on"); } else { gotoAndStop("off"); } } Bi n state ki m tra tr ng thái c a checkbox. Khi click m t button thì hàm i l i tr ng thái c a state, có nghĩa là lúc u pressButton s ư c g i. Trong ó, s là false (chưa ch n), sau khi click s thành true ( ã ch n). Ti p theo, hàm pressButton ưa ngư i dùng n frame thích h p. N u state = s ki m tra giá tr c a bi n state true thì s nh y n frame On, còn n u state = false thì s nh y n frame Off. T o RadioButton Vi c t o m t Radiobutton s ph c t p hơn m t chút so v i checkbox. Các Radiobutton s ư c gom vào m t nhóm có quan h v i nhau. Checkbox ư c s d ng trong nh ng trư ng h p ch n l a không có tính lo i tr , có nghĩa là ngư i dùng có th ch n nhi u checkbox. Ngư c l i, Radiobutton ư c s d ng trong nh ng trư ng h p có tính lo i tr , có nghĩa là trong m t nhóm Radiobutton thì ch có m t checkbox ư c ch n t i m t th i i m, không có chuy n 2 Radiobutton u ư c ch n. N u b n ã ch n m t RadioButton, khi b n ch n qua m t Radiobutton khác thì ch n l a cũ s t ng m t i, chuy n qua Radiobutton m i. Hình dư i ây là m t nhóm Radiobutton RadioButton u tiên ang ư c ch n, nhưng ngư i dùng ang chu n b ch n RadioButton th 2, n u ngư i dùng ch n RadioButton 2 ho c b t kỳ cái nào khác thì RadioButton u tiên s t ng m t ch n l a. M t RadioButton ơn gi n cũng tương t như m t Checkbox, m t movie clip có 2 frame ch a 2 button bi u hi n 2 tr ng thái c a RadioButton. Frame u tiên ch a m t vòng tròn r ng, frame th 2 ch m t vòng tròn v i d u ch m tròn gi a. i m khác nhau gi a Checkbox và RadioButton chính là code c a chúng. Code c a RadioButton s ph c t p hơn code c a CheckBox. Ph n u code c a Radiobutton s ơc vi t frame u tiên. Nó ư c vi t ngoài, không n m trong hàm nào c , i u này có nghĩa là o n code này s ch y khi load movie clip. CODE stop(); // ki m tra có ph i là RadioButton u tiên trong nhóm hay không if (_parent.radioButtons == undefined) { // t o m t array RadioButton _parent.radioButtons = new Array(); // RadioButton u tiên m c nh ư c ch n gotoAndStop("on"); state = true; } else { // các RadioButton khác không ư c ch n state = false; } // chèn array RadioButton ra ngoài level ngoài _parent.radioButtons.push(this); Khi ngư i dùng click vào button, thì hàm turnOn s ư c g i. i u u tiên là hàm turnOn s duy t qua t t c các RadioButton (các movie clip), g i hàm turnOff cho t ng RadioButton. Nói ơn gi n có nghĩa là khi click vào m t RadioButton thì trư c tiên t t c các RadioButton trong nhóm u quay v tr ng thái Off, sau ó s chuy n tr ng thái c a RadioButton ư c ch n thành On. CODE function turnOn() { // chuy n t t c thành OFF for(var i=0;i<_parent.radioButtons.length;i++) { _parent.radioButtons[i].turnOff(); } // chuy n RadioButtond ư c ch n thành ON gotoAndStop("on"); state = true; } Ti p theo là o n code cho hàm turnOff() CODE function turnOff() { gotoAndStop("off"); state = false; } Ti p theo là xây d ng hàm getValue() ki m tra xem RadioButton nào ang ư c ch n. Hàm này s ư c m t movie khác g i. Hàm này r t ơn gi n, nó s duy t qua t t c các RadioButton trong array RadioButton xem cái nào ang ư c ch n. CODE function getValue() { // duy t t t c các RadioButton for(var i=0;i<_parent.radioButtons.length;i++) { // tìm RadioButton nào ang ư c ch n if (_parent.radioButtons[i].state) { return(_parent.radioButtons[i]._name); } } // n u không có cái nào ư c ch n thì tr v m t chu i r ng “” return ""; } Luy n t p: Chương trình tr c nghi m Bây gi hãy cùng nhau áp d ng nh ng th ã h c ư c v CheckBox và RadioButton làm m t chương trình tr c nghi m ơn gi n nhé. M i frame s ch a m t câu h i riêng. Ví d frame u tiên s ch a câu h i như hình dư i ây, và có nh ng câu tr l i dư i B t u nhé - T o m t movie m i trong Flash - T o Checkbox như ã ư c h c r i ó. - R i sau ó kéo t o 5 b n c a movie clip checkbox vào, t tên là: Flash, Director, Fireworks, Freehand, and Dreamweaver. - T o các câu tr l i và m t static text k bên Checkbox như hình trên. - T o m t button Next chuy n n câu h i ti p theo. - Chèn o n code sau vào frame u tiên CODE results = new Array(); stop(); o n code trên có nhi m v t o m t m ng results lưu k t qu c a các câu tr l i, ng th i cũng dùng movie t i ây. - Khi nh n nút Next thì s chuy n sang câu h i ti p theo và lưu câu tr l i hi n th i vào m ng results CODE on (release) { if (Flash.state) results.push("Flash"); if (Director.state) results.push("Director"); if (Fireworks.state) results.push("Fireworks"); if (Freehand.state) results.push("Freehand"); if (Dreamweaver.state) results.push("Dreamweaver"); nextFrame(); } - Ti p theo, trong frame th hai s là câu h i th hai. Vì câu h i th hai ch cho ch n m t l a ch n nên chúng ta s s d ng RadioButton như hình dư i ây - T o RadioButton như ph n trư c r i ưa vào movie 3 cái tên: Windows, Macintosh, and Linux - Chèn n i dung câu tr l i vào luôn như hình trên - Copy nút Next vào frame 2 nhưng chúng ta s thay o n code b ng m t o n code khác. CODE on (release) { results.push(Windows.getValue()); nextFrame(); } o n code trên s d ng hàm getValue ki m tra xem RadioButton nào ang ư c ch n - Ok, n ây thì b n t làm ti p nh ng câu h i ti p theo nhé, tương t như v y thôi. Nhưng mà hãy nh là tên các thành ph n ph i khác nhau nhé. Các b n cũng có th s d ng hàm trace ưa k t qu nh ng câu tr l i ra c a s Output xem. - Trong Hour 18, các b n s h c v cách ưa d li u lên server, khi ó các b n có th c i ti n chương trình này ưa câu tr l i lên server ki m tra. S d ng Tab chuy n t thành ph n này sang thành ph n khác Nh ng ngư i s d ng Flash 5 luôn than phi n v vi c không th s d ng tab chuy n i gi a các thành ph n như v y. Công vi c chuy n i b ng cách nh n phím Tab này ư c g i là Tab Order, chúng ta thư ng th y vi c này trong h u h t các chương trình chuyên nghi p, ví d như trong m t trình duy t web, i u này s mang l i nhi u thu n ti n cho ngư i s d ng, nó s chuy n n thành ph n logic ti p theo trong chương trình. Tuy nhiên, s l a ch n thành ph n logic ti p theo c a Flash không ph i lúc nào cũng úng. Vì th , Flash ch có th ch a v trí c a thành ph n mà thôi. L y ví d như trong hình bên dư i, Flash s hi u r ng thành ph n ti p theo thành ph n u tiên s là cái dư i nó ch không ph i là cái k bên. May m n là chúng ta có th t l i Tab order cho các thành ph n b ng cách t l i thu c tính tabIndex. N u chúng ta có 4 text field như hình trên: text1, text2, text3, text4 thì chúng ta có th s d ng o n code sau: CODE text1.tabIndex = 1; text2.tabIndex = 2; text3.tabIndex = 3; text4.tabIndex = 4; i u chú ý khi s d ng tabIndex là ph i chú ý n label c a các textfield và tránh s d ng l i m t s nhi u l n, i u này s làm cho Flash b l n l n. M t i u n a là cho dù là m c nh c a Flash hay là b n s d ng tabIndex thì Flash ng t focus cho thành ph n u tiên, vì th , b n ph i t làm i u cũng không t này. làm ư c như v y, b n s d ng m t l nh trong i tư ng Selection báo cho Flash bi t thành ph n m c nh ư c t focus CODE Selection.setFocus(text1); B n có th s d ng l nh Selection.setFocus b t c lúc nào cũng ư c chuy n n m t thành ph n mong mu n. Vi c này s r t quan tr ng, b n s t con tr vào textfield thay vì b t ngư i dùng ph i click vào textfield trư c khi gõ. B n có th s d ng Selection.getFocus ki m tra xem thành ph n nào ang ư c focus. o n code dư i ây s là m t ví d . Khi ngư i dùng chuy n focus sang m t thành ph n khác thì b n s bi t ngư i dùng chuy n n âu. CODE Selection.addListener(this); this.onSetFocus = function(oldFocus, newFocus) { trace(oldFocus+","+newFocus); } H n ch nh p li u Khi ngư i dùng nh p d li u vào m t textfield, cũng có lúc b n mu n h n ch vi c nh p li u ó. Ví d trong ô năm sinh, b n ch mu n ngư i dùng nh p s vào, không c n ph i nh p ch . B n có th h n ch nh ng ký t ư c phép nh p vào textfield b ng cách t giá tr c a thu c tính restrict c a textfield ó. N u không t giá tr thì textfield có th nh n t t c các ký t . Nhưng n u thu c tính restrict c a textfield là m t chu i ký t thì ch có nh ng ký t trong chu i ó m i ư c ch p nh n. Dư i ây là m t ví d v h n ch nh p li u, ngư i dùng ch có th nh p s mà thôi CODE text1.restrict = "01234567890"; Còn dư i ây là m t ví d n a n u ô nh p li u là email CODE text2.restrict = "abcdefghijklmnopqrstuvwxyz0123456789@.-_"; M t i u chú ý là c các ký t in hoa và in thư ng u ơc ch p nh n trong text2 B n cũng có th h n ch s ký t ư c phép nh p vào m t textfield. Cái này b n cũng có th không c n ph i dùng AS, có th t thu c tính tr c ti p trong khung Properties CODE text1.restrict = "01234567890"; text1.maxChars = 4; Luy n t p: Ki m tra d li u nh p Bây gi chúng ta s làm m t chương trình g m m t form nh p li u, yêu c u nh p vào tên, năm sinh, email. Và chúng ta s ki m tra các thông tin nh p vào này Tên ngư i dùng ít nh t ph i có 3 ký t . Năm sinh ph i có 4 s và ó là nh ng năm trong kho ng 100 năm trư c n nay. Còn email ít nh t ph i có 7 ký t và có d ng a@b.c, a, b có th là tuỳ ý nhưng c ph i có ít nh t là 3 ký t và b t bu c ph i có ký hi u @. ó là nh ng yêu c u cơ b n. Nào, b t u nhé! - T o m t movie m i - T o 3 textfield cho các n i dung nêu trên, t tên là userName, userYear, và userEmail. t các variable tương ng là userNameText, userYearText, and userEmailText. B n cũng c n ph i t o m t dynamic textfield liên k t v i variable feedback. T o m t nút Submit. Movie c a b n s gi ng như hình dư i này nhé - t o n code sau vào frame ch nh p li u CODE stop(); u tiên d ng l i và thi t l p các thu c tính h n // h n ch chi u dài t i a c a tên là 64 ký t userName.maxChars = 64; // năm sinh ph i có 4 s userYear.restrict = "01234567890"; userYear.maxChars = 4; // h n ch d li u email userEmail.restrict = "abcdefghijklmnopqrstuvwxyz0123456789@.-_"; userEmail.maxChars = 128; - Ti p theo là t con tr vào text field userName lúc movie m i b t u CODE Selection.setFocus(userName); ki m tra khi nào ngư i dùng ã nh p li u xong, chúng ta s thêm m t listener b t event như o n code dư i ây CODE Selection.addListener(this); Nó s báo cho chúng ta bi t khi nào x y ra event onSetFocus - Ti p theo t giá tr c a bi n ignoreSetFocus là False, chúng ta s s d ng này sau CODE ignoreSetFocus = false; n bi n - Ti p theo chúng ta vi t hàm onSetFocus b t event. CODE this.onSetFocus = function(oldFocus, newFocus) { // this is a focus reset, so ignore if (ignoreSetFocus) { ignoreSetFocus = false; return(0); } // use the appropriate check function if (oldFocus == userName) { ret = checkUserName(); } else if (oldFocus == userYear) { ret = checkUserYear(); } else if (oldFocus == userEmail) { ret = checkUserEmail(); } if (!ret) { // ignore this focus change and go back ignoreSetFocus = true; Selection.setFocus(oldFocus); } } Hàm này s nh n hai i s . i s th nh t là textfield tr ơc khi chuy n focus và s th hai là textfield sau khi chuy n focus. Hàm checkUserName s ki m tra tên ngư i dùng CODE // tên ph i có ít nh t 3 ký t function checkUserName() { if (userNameText.length < 3) { feedback = "B n ph i nh p ít nh t 3 ký t " return(false); } // quay tr l i feedback feedback = ""; return(true); } i Hàm checkUserYear s ki m tra năm nh p vào CODE // năm ph i t kho ng 100 năm n nay function checkUserYear() { // l y năm today = new Date(); thisYear = 1900+today.getYear(); // ki m tra ã nh p if (parseInt(userYearText) == Math.NaN) { feedback = "B n ph i nh p năm sinh."; return(false); // n u năm sinh quá s m (không th t) } else if (parseInt(userYearText) < thisYear-100) { feedback = "B n ph i nh p úng năm sinh, t 100 năm trư c return(false); // n u năm sinh là trong tương lai :) } else if (parseInt(userYearText) > thisYear) { feedback = "B n ph i nh p úng năm sinh"; return(false); } n nay"; // quay tr l i feedback = ""; return(true); } Ti p theo là hàm chechUserEmail ki m tra email CODE // ki m tra email function checkUserEmail() { if (userEmailText.length < 7) { feedback = "Email quá ng n"; return(false); } else if (userEmailText.indexOf("@") == -1) { feedback = "Thi u ký t @"; return(false); } else if (userEmailText.indexOf(".") == -1) { feedback = "Thi u d u ch m (.)"; return(false); } else if (userEmailText.indexOf("@") > userEmailText.indexOf(".")) { feedback = "@ và d u ch m không úng"; return(false); } else if (userEmailText.lastIndexOf(".") > userEmailText.length-3) { feedback = "Domain không h p l " return(false); } // quay tr l i feedback = ""; return(true); } - Th là ki m tra d li u ã xong. Bây gi chúng ta s d ng các hàm này ki m tra d li u nh p vào và xu t ra k t qu . Hàm sau s ki m tra t ng ô nh p li u, n u m t trong nh ng ô trên sai thì s tr v k t qu false, còn úng h t s là true CODE function checkAll() { if (!checkUserName()) { return(false); } else if (!checkUserYear()) { return(false); } else if (!checkUserEmail()) { return(false); } return(true); } - Bây gi chúng ta vi t code cho nút Submit. Khi nh n nút Submit thì s g i hàm CheckAll và ưa sang frame ti p theo v i l i cám ơn. CODE on (release) { if (checkAll()) { nextFrame(); } } Gi th 16: Menu và button ng Menu h th ng ã r t quen thu c v i các chương trình máy tính hi n nay. H i u hành c a chúng ta và ngay c Flash u có m t h th ng menu trên u. Menu là ưa ra nhi u l a ch n cho ngư i dùng mà l i ít t n di n tích màn m t cách t t hình. Trong gi th 16 này, chúng ta s h c v : - Cách làm m t menu ơn gi n - S d ng menu trong movie - T o m t menu x xu ng khi chúng ta click vào m t nút - Cách t o button ng - S d ng button ng trong movie Cách làm m t menu ơn gi n Nh ng b n m i làm quen v i AS thư ng mu n bi t cách t o menu. Th t ra t o m t menu r t ơn gi n, chúng ta ã t ng bi t qua r i, ho c có th các b n không ý. Cách th c ho t ng c a nó là có m t button, và khi ngư i dùng ưa con tr qua button ó thì m t lo t nh ng button khác s xu t hi n l n lư t bên dư i button ó t o thành m t dãy menu. Hình dư i ây là m t ví d Khi chúng ta ưa con tr ngang qua nút About Us thì m t lo t nh ng button khác s xu t hi n như hình bên ph i. Như v y, chúng ta c n có 2 frame trong movie clip làm menu. Frame th nh t s ch ch a button About Us, frame th hai s ch a button About Us và 3 button còn l i. frame th nh t, khi ngư i dùng ưa con tr ngang qua button About Us thì s nh y sang frame th 2 và d ng l i frame 2 cho n khi ngư i dùng ưa con tr chu t ra ngoài, khi ó thì s tr v frame 1. N u ý, các b n s th y cách này gi ng như chúng ta ã ư c h c Gi th 13 v RollOver. Chúng ta s dùng hàm hitTest ki m tra xem v trí c a con tr chu t có n m trong button không. Dư i ây là o n code x lý vi c này. Chúng ta cùng xem nhé! CODE onClipEvent(load) { previouslyOver = false; } onClipEvent(enterFrame) { // ki m tra v trí con tr currentlyOver = this.hitTest(_root._xmouse,_root._ymouse,true); // ki m tra s thay i if (!previouslyOver and currentlyOver) { previouslyOver = true; this.gotoAndStop("on"); } else if (previouslyOver and !currentlyOver) { previouslyOver = false; this.gotoAndStop("off"); } } Hãy chú ý, n u b n s d ng AS qu n lý nh ng thành ph n khác ơc t chung trong frame, hãy ch c r ng b n ph i ưa menu lên trên cùng b ng cách s d ng hàm swapDepths Luy n t p: Làm m t menu Nào, chúng ta b t tay vào làm th m t menu ơn gi n nhé! Menu chính c a chúng ta s có 3 ph n: About Us, Products và Store, m i menu l i ch a nhi u menu con. - Vi c u tiên là t o m t movie m i trong Flash - T o m t button ơn gi n thôi, button này không nên có ch , và nh ch a ch tr ng chúng ta ưa ch vào sau - T o movie clip m i, t tên là About Us Menu. T o hai layer, m t là Label và m t là Buttons - Trong layer Buttons, kéo button v a t o vào. t dòng ch About Us lên trên - Layer Label s tr i ra trên 2 frame. Nhưng 2 frame trong layer Buttons s khác nhau, frame u t tên là off, frame 2 t tên là on. - Trong frame th hai c a layer Buttons, kéo thêm 3 button n a vào và t o n i dung cho chúng là History, Clients, và Partners. Nh t câu l nh stop() vào frame u tiên. Movie clip c a chúng ta bây gi s gi ng như hình bên dư i Quay tr l i level root, kéo movie clip About Us Menu t Library vào, aboutUsMenu, và chèn o n code sau: CODE onClipEvent(load) { previouslyOver = FALSE; } onClipEvent(enterFrame) { currentlyOver = this.hitTest(_root._xmouse,_root._ymouse,true); if (!previouslyOver and currentlyOver) { previouslyOver = true; this.gotoAndStop("on"); } else if (previouslyOver and !currentlyOver) { previouslyOver = false; this.gotoAndStop("off"); } } t tên là - Bây gi hãy ch y th movie c a b n xem nào. ưa con tr vào button About Us xem i u gì x y ra! - Ph n vi c còn l i là c a b n ó. Làm tương t cho các menu còn l i! T o m t menu x xu ng khi chúng ta click vào m t nút Có nhi u cách làm menu x xu ng, và cũng có nhi u cách menu ho t ng. Chúng ta ã bi t m t cách trong ví d ph n trư c, khi ngư i dùng ưa con tr ngang qua m t button thì m t lo t button khác s xu t hi n d c bên dư i t o thành m t menu, ơn gi n ch b ng 2 frame. Menu x xu ng s ho t ng theo m t cách khác: khi ngư i dùng click vào m t button, m t lo t menu s xu t hi n nhưng ngư i dùng ph i gi a chu t và kéo con tr ch n các menu con, mu n ch n menu nào thì th chu t t i menu ó. Chúng ta hãy nghiên c u m x menu x xu ng này nhé! Chúng ta cũng s t o 2 frame như bài trư c, frame u ch a button là tiêu c a menu, frame hai ch a các button x p d c xu ng thành m t h th ng menu khi tiêu c a menu ư c click. Tuy nhiên cách vi t code s khác i! ây là code cho button làm tiêu cho menu CODE on (press) { expandMenu(); } on (release, releaseOutside) { collapseMenu(); } Khi ngư i dùng click vào button thì nó s g i hàm expandMenu(), khi ngư i dùng th chu t ra thì nó s g i hàm collapseMenu() Ngoài ra thì chúng ta còn s d ng các event on(dragOver) và on(dragOut), hai event này cũng gi ng v i on(rollOver) và on(rollOut) nhưng mà ph i gi chu t trong khi di chuy n CODE on (dragOver) { rollOverMenu(); } on (dragOut) { rollOutMenu(); } Button tiêu ã g i 4 hàm expandMenu(), collapseMenu(), rollOverMenu(), rollOutMenu(), bây gi chúng ta s vi t các hàm này, t chúng trên frame nhé! Hàm expandMenu() s t giá tr cho bi n expanded là true và nh y sang frame th hai CODE function expandMenu() { expanded = true; gotoAndStop("on"); } Hàm collapseMenu() s làm ngư c l i CODE function collapseMenu() { expanded = false; gotoAndStop("off"); } Hàm rollOverMenu s ki m tra bi n expanded và s di chuy n n frame thích h p n u expanded = true. Có nghĩa là khi ngư i dùng click chu t vào button tiêu thì menu s x xu ng và ngư i dùng ph i gi chu t trong lúc di chuy n ch n, n u th chu t ra thì menu s thu l i. CODE function rollOverMenu() { if (expanded) { gotoAndStop("on"); } } function rollOutMenu() { if (expanded) { gotoAndStop("off"); } } Chúng ta s vi t code ti p cho các menu x xu ng. Chúng u là các button, và chúng ta s vi t event on(release) cho chúng b t s ki n khi ngư i ngư i th chu t trên button ó, có nghĩa là ngư i dùng ch n menu ó. Khi ó, nó g i hàm collapseMenu() r i th c hi n công vi c c a mình, ây ơn gi n ch g i hàm trace. Chúng ta cũng vi t event on(dragOver) và on(dragOut) cho các button này gi menu l i khi ngư i dùng gi chu t và kéo qua các button cũng như s thu menu l i khi ngư i dùng th chu t ra ho c kéo ra ngoài. CODE on (release) { collapseMenu(); trace("History Button Pressed"); } on (dragOut) { rollOutMenu(); } i u cu i cùng c n ph i làm là ph i thay i thu c tính cho các button. Trong ph n khung properties c a button, chuy n Track as Button thành Track as Menu Item. i u này s làm cho button nh n ư c s ki n release thay vì s nh n press trư c. Còn có r t nhi u cách làm menu, nó ph thu c vào m c ích s d ng c a b n và kh năng s d ng AS c a m i ngư i Button ng M t cách khác cũng tương t làm menu x xu ng là s d ng button ng. Chúng ta có th làm m t menu x xu ng mà không c n ph i làm cách button trư c, chúng ta , thú v nh . s ư c t sinh ra b ng AS i u u tiên c n ph i làm là t o m t button m u. Ti p theo, t button vào trong m t movie clip, movie clip này s có hai thành ph n, m t là button và hai là dynamic text trên button, dynamic text s ư c liên k t v i bi n buttonLabel. Trong c a s Library, click chu t ph i lên tên movie clip và ch n Linkage. Nh ch n m c Export for Actionscript và t tên cho nó là buttonMovieClip. ơc r i, bây gi chúng ta ã có m t button m u, ti p theo chúng ta s s d ng AS s d ng button này. Vi c này cũng r t ơn gi n, chúng ta s d ng l nh attachMovie t o m t instance c a movie clip và t l i giá tr cho dynamic text trong movie clip, và t l i v trí c a nó b ng cách t cách thu c tính _x, _y. CODE function createButton(buttonLabel, x, y) { this.attachMovie("buttonMovieClip","button"+buttonLevels,buttonLevels); bmc = this["button"+buttonLevels]; bmc.buttonLabel = buttonLabel; bmc._x = x; bmc._y = y; buttonLevels++; return(bmc); } ơc r i, hãy th movie c a b n xem nào B n có th t o ra hàng lo t button ng b ng cách g i m t lo t hàm createButton, ho c chúng ta s lưu các tên button vào m t m ng r i dùng vòng l p for g i hàm createButton. Nhưng có m t v n c n gi i quy t là làm th nào x lý riêng cho t ng button. N u vi t code ngay trong button thì các button s như nhau. V y làm cách nào làm cho các button có th x lý nh ng công vi c khác nhau? Button s g i nh ng hàm t ngoài root, như v y thì m i button có th g i m t hàm khác nhau, i u này cũng có nghĩa là chúng s th c hi n nh ng vi c khác nhau Luy n t p: S d ng button ng t o menu - T o m t movie m i trong Flash - T o button m u như trong ph n trư c, t o n code sau vào button CODE on (rollOver) { _parent.buttonRolloverAction(thisAction,buttonLabel); } on (release) { _parent.buttonClickAction(thisAction,buttonLabel); } i u này có nghĩa là khi button s g i hàm buttonRollOverAction khi ưa chu t qua, và g i hàm buttonClickAction khi click chu t. Hai i s c a nó s giúp báo button nào ư c click - Dư i ây là hàm createButton t o button ng, nhưng l n này chúng ta s t o m t lo t button t m t m ng lưu s n CODE function createButton(buttonLabel, x, y, buttonAction) { this.attachMovie("buttonMovieClip","button"+buttonLevels,buttonLevels); bmc = this["button"+buttonLevels]; bmc.buttonLabel = buttonLabel; bmc._x = x; bmc._y = y; bmc.thisAction = buttonAction; buttonLevels++; return(bmc); } // T o m t lo t button t m ng function createButtonList(buttonList, x, y, direction) { for (var i=0;i c a HTML. Dư i ây là m t ví d khi nh n m t button thì s load m t trang web m i thay th cho trang hi n t i: CODE on (release) { getURL("anotherpage.html"); } ví d trên thì trang anotherpage.html s ư c load. B n có th thay b ng m t URL hoàn ch nh (như là http://www.yahoo.com) liên k t n m t website khác ho c ư ng d n tương i liên k t n nh ng trang trong cùng m t website. Không c n s d ng AS, chúng ta cũng có th t o ư c liên k t như v y b ng cách t thu c tính hypertext links c a TextField, cái này th t ra gi ng h t như là th c a HTML Cách nâng cao Cách này b n cũng s d ng hàm getURL v i m t cách khác xác nh nơi s load trang web lên là trong frame nào ho c là trong window nào. Như chúng ta ã bi t thì m i frame và m i window u có tên, chúng ta s truy n tên này vào i s th 2 c a hàm getURL. Trong ví d dư i ây, trang web c a b n s có nhi u frame, trong ó có frame tên là Main, trang web m i s ư c load trong frame Main này CODE on (release) { getURL("summary.html","Main"); } B n cũng có th s d ng o n code trên load trang web vào window tên Main. Ngoài ra, b n còn có th s d ng nh ng i s c bi t truy n vào thay cho tên: - _blank : m m t window m i và load trang web vào window ó - _parent : load trang web vào frame cha c a frame hi n t i - _top : load trang web vào window cũ, không k ang frame nào mà s thay th t t c các frame trong window N u b n mu n thay i nh ng thi t l p c a window như kích thư c… thì b n ph i s d ng JavaScript. Chúng ta s nói v v n này sau Luy n t p: Làm thanh liên k t (navigation bar) Bây gi thì b n ã kh năng làm m t thanh liên k t b ng Flash s d ng AS, nhưng b n c n ph i có thêm nh ng ki n th c khác v HTML. Thanh liên k t c a chúng ta s t frame bên trái c a trình duy t, frame bên ph i s ch a n i dung. Movie làm b ng Flash s ch a m t s button liên k t sang các trang web khác. - u tiên chúng ta s t o m t trang HTML ch a 2 frame, trang này tên là navigation.html CODE Flash Navigation Example - Trang HTML trên ch t o ra 2 frame, trong m i frame s ch a m t trang HTML khác. Bây gi chúng ta s t o 2 trang HTML ó. Chúng ta chưa c n ph i làm trang HTML cho frame bên trái, vì nó s ư c t o ra khi chúng ta publish movie thành HTML. Còn trang HTML trong frame bên ph i s có nhi u thay i. Bây gi hãy t o 3 trang HTML ơn gi n tên content1.html, content2.html, content3.html ch a 3 dòng ch ơn gi n. CODE Content 1 Content 1 - Bây gi là công vi c làm v i Flash. T o m t movie m i r ng 100px, cao 400px. T o 3 button và vi t code cho các nút liên k t n 3 trang content1.html, content2.html, content3.html tương t như sau: CODE on (release) { getURL("content1.html","content"); } - Lưu movie l i v i tên navbar.fla - Publish movie ra thành file html - Ti p theo là ưa t t c các file vào m t thư m c. Các file ó s là: navigation.html, content1.html, content2.html, content3.html, navbar.html, and navbar.swf. - Hãy m trang navigation.html th xem nhé ActionScript và JavaScript N u b n ã quen s d ng JavaScript r i thì b n s r t vui khi bi t r ng JavaScript có th liên l c ư c v i ActionScript. Tuy nhiên, cách này không ho t ng t t i v i t t c các lo i trình duy t. Vi c liên l c này ư c xây d ng trên 2 công ngh . M t là công ngh LiveConnect ư c xây d ng trong nh ng phiên b n trình duy t Netscape trư c phiên b n 6.0. Công ngh th hai là ActiveX dùng liên l c gi a Flash và Internet Explorer. Nhưng n u b n ang thi t k cho ngư i dùng s d ng trình duy t c a Windows thì cách này s r t t t. G i thông i p n JavaScript G i thông i p t ActionScript n JavaScript thì ch c n vi t code trong ActionScript nhưng nó cũng s thay i n i dung trang HTML c a b n . N u b n t o file Flash b ng cách ch n FSCommand trong Publish settings, b n s t o ư c m t file HTML ã ư c s a ch a y nh n thông i p. Công vi c c a b n ch là thay th nh ng ch ư c ánh d u Your code here b ng ph n JavaScript c a b n. hi u rõ hơn cách nó làm vi c như th nào thì chúng ta hãy cùng nhau m x file html mà Flash ã t o ra nhé u tiên, hãy chú ý n th OBJECT/EMBED, trong ó s có m t s ph n ch p nh n s liên l c. Tham s ID trong th OBJECT s gi ng v i tham s NAME trong th EMBED. Hai tham s này s t tên cho movie c a chúng ta trong trang web JavaScript có th g i nó. Ngoài ra còn có m t tham s khác trong th EMBED, ó là tham s swLiveConnect cho phép nh ng phiên b n Netscape trư c phiên b n 6.0 có th liên l c v i Flash b ng công ngh LiveConnect. CODE Trư c o n code c a th OBJECT/EMBED s có m t o n script. Ph n u tiên là m t hàm JavaScript v i tên c a movie ID trong th OBJECT và n i ti p v i _DoFSCommand. Như ví d trên thì tên hàm c a chúng ta s là flashmovie_DoFSCommand. Trong hàm này thì chúng ta s truy n d li u l i cho movie. Không may là Netscape . Internet Explorer và Internet Explorer nhìn nh n movie c a chúng ta khác nhau nhìn movie v i tên truy n vào tham s ID (flashmovie), còn Netscape nhìn movie v i tên là document.flashmovie. Hãy xem o n code dư i ây xem nhé: CODE V y còn ph n ActionScript ph i làm sao ây. Xin tr l i là ch c n m t dòng duy nh t mà thôi CODE fscommand ("alert", "This is alert 1."); Nh n thông i p t JavaScript Nh n thông i p t JavaScript thì có v d hơn. Nhưng b n ph i nh r ng ã t tham s ID trong th OBJECT và tham s NAME trong th EMBED, nh t gi ng tên nhé. Và cũng nh t swLiveConnect=true trong th EMBED. Bây gi thì ã s n sàng truy n thông i p t JavaScript cho movie r i. Hãy xem ví d này nhé, trong ví d này thì chúng ta s s d ng hàm gotoFrame di chuy n movie sang frame th hai. CODE Ch c ch c n ây các b n ang t h i t i sao di chuy n sang frame th hai mà l i s d ng gotoFrame(1), úng không nào? B i vì h m c a chúng ta b t u t s 0 (zero-based). Vì v y, frame 1 s là 0, frame 2 s là 1, frame 3 s là 2… Có hơn 24 câu l nh trong Flash movie. Tuy nhiên chúng ta không c n ph i dành nhi u th i gian tìm hi u b i vì như ã nói trên thì cách liên l c này không ph i ho t ng t t i v i t t c các lo i trình duy t. B n có th s d ng hàm GetVariable và SetVariable i u khi n nh ng bi n trong timeline c a movie. Câu l nh Zoom dùng kéo dãn movie. Hai hàm isPlaying và percentLoaded dùng ki m tra movie nào ang ho t ng. Play dùng play m t movie khi nó ang ng ng. Luy n t p: M window m i Có l ây là m t yêu c u r t thư ng g p i v i nh ng ngư i s d ng Flash. B n có th làm ư c i u này b ng cách s d ng hàm getURL ho c JavaScript. Tuy nhiên, s d ng JavaScript s có r t nhi u c i m m i và hay hơn, b n có th t l i nh ng thu c tính c a window. Nào, cùng làm th nhé: - T o m t movie m i. - t vào movie m t button. - Chèn o n code sau cho button v a t o CODE on (release) { fscommand ("newwindow", "content.html"); } - Trong ph n Publish Settings, ch n publish ra file HTML cùng v i Flash movie. Trong ph n HTML, nh ch n vào m c Flash with FSCommand - Publish movie c a b n. - M file HTML mà Flash v a t o b ng m t trình so n th o nào cũng ư c, như NotePad ch ng h n. Hãy tìm ph n chèn JavaScript, và chèn o n code sau vào: CODE if (command == "newwindow") { window.open(args,"","width=320,height=240,location=no,toolbar=no, menubar=no"); } - T o thêm m t file HTML ơn gi n n a và t tên là content.html - M file HTML c a b n ra trong m t trình duy t và nh là trình duy t ó ph i h tr JavaScript ó nha. Khi nh n vào button thì m t c a s m i s xu t hi n, không có toolbar, kích thư c 320x240. - V y còn i v i nh ng trình duy t không h tr JavaScript thì sao? ơn gi n thôi, s d ng getURL . i u quan tr ng là c n ph i cho Flash bi t lúc nào s d ng Flash, lúc nào s d ng JavaScript. Quay tr l i file HTML mà Flash ã t o, chèn o n code JavaScript sau vào cu i o n code ta ã chèn vào lúc trư c CODE function initComm() { window.document.newWindowMovie.SetVariable("jsCommOK","OK"); } o n code trên s th t giá tr cho bi n jsCommOK là OK. N u trình duy t có h tr JavaScript thì jsCommOK s mang giá tr OK còn n u không thì bi n jsCommOK v n là undefined. ch y hàm initComm u tiên thì b n s a l i ph n BODY c a trang HTML như sau: CODE i u này có nghĩa là hàm initComm s ư c g i ngay sau khi trang này load xong. - Bây gi hãy quay tr l i file Flash c a b n, s a o n script c a button thành: CODE on (release) { if (jsCommOK == "OK") { fscommand ("newwindow", "content.html"); } else { getURL ("content.html", "_blank"); } } Luy n t p: T o m t SlideShow ư c i u khi n b i JavaScript Trong ph n này, chúng ta s cùng nhau làm m t file Flash không có ActionScript mà s ư c i u khi n b ng JavaScript. - T o m t movie Flash m i v i 3 frame ho c nhi u hơn. N i dung c a m i frame thì không quan tr ng, b n mu n gì trong ó cũng ơc nhưng m t l i khuyên là m i frame nên khác nhau chúng ta theo dõi s thay i - t câu l nh stop() vào frame u tiên - Publish ra file HTML - M file HTML ó ra trong trình so n th o văn b n - Truy n tham s ID trong th OBJECT và NAME trong th EMBED, c hai s mang giá tr là slideshow - Nh t swLiveConnect=true trong th EMBED - T o 2 button trong file HTML b ng o n code sau: CODE
- M i button s g i m t hàm. C hai hàm s s d ng TcurrentFame(“/”)bi t ang frame th m y, r i s d ng gotoFrame di chuy n t i ho c lui. CODE Công vi c ti p theo b n còn nh không: CH Y TH i nào Gi th 18: G i thông tin cho máy ch , Sending Information to the Server Cho n t n bây gi , nh ng movie chúng ta làm ư c h u h t là ch ch y m t mình (stand alone). Có nghĩa là nó ch ch y m t máy khách (client-side) không có s liên l c v i máy ch (Server). Nên nh r ng Flash cũng có th g i tr thông tin cho Server gi ng như form c a HTML. V y thì trong gi th 18 này, chúng ta s tìm hi u v v n này. Trong gi th 18, chúng ta s h c: - Tìm hi u v i tư ng LoadVars - T o m t chương trình server-side ơn gi n - S d ng Flash g i d li u v cho Server i tư ng LoadVars R t may m n là chúng ta ã có Flash MX, b i vì trong nh ng phiên b n Flash trư c ây, mu n làm i u này thì chúng ta ph i làm nh ng movie clip r t khó khăn. iv i Flash MX, chúng ta có th s d ng i tư ng LoadVars. i tư ng LoadVars bao g m m t t p h p các câu l nh và nh ng bi n c bi t g i d li u cho Server gi ng như post form trong HTML. Chúng ta có th t o i tư ng gi ng như t o nh ng i tư ng khác. Hãy xem gi th 12 nhé! L y d li u Dư i ây là m t ví d . Thay vì s d ng new Object() b ng new LoadVars. Sau ó thì i tư ng LoadVars m i s ư c t o. CODE myVars = new LoadVars(); V i i tư ng LoadVars, chúng ta có th làm ư c 2 vi c, ó là g i và l y d li u. l y d li u, chúng ta s d ng câu l nh load. Cái chúng ta c n ây là m t ư ng d n n nơi ch a d li u: CODE myVars.load("myURL.txt"); Ví d trên ho t ng gi ng như câu l nh LoadVariables trong gi th 10. Tuy nhiên, câu l nh LoadVariables ch l y và thay th d li u trong cùng m t level v i câu l nh này mà thôi. Hãy tư ng tư ng, chúng ta có m t file ch a d li u như sau: CODE name=George&ID=47 G i d li u V i i tư ng LoadVars, chúng ta cũng có th g i d li u i lên Server. Trư c h t, chúng ta ưa d li u vào i tư ng LoadVars, r i sau ó s d ng câu l nh send g i d li u i. CODE myVars = new LoadVars(); myVars.name = "George"; myVars.ID = 47; myVars.send("serverprogram.cgi", "_self"); o n code trên s t o m t i tư ng LoadVars m i tên là myVars, r i ưa hai thu c tính vào i tư ng myVars. Sau ó, g i d li u i lên Server, chính xác là n chương trình CGI tên là echo.cgi. Câu l nh send cũng ho t ng tương t như trong form c a HTML. _self là Target, chúng ta có th thay th b ng các giá tr khác như ã ư c bi t. Nhưng còn m t câu l nh n a là sendAndLoad. Câu l nh này ư c ghép câu l nh send và load. Có nghĩa là i tư ng LoadVars s g i d li u lên Server, sau ó s l y giá tr tr v . CODE mySendVars = new LoadVars(); myLoadVars = new LoadVars(); mySendVars.name = "George"; mySendVars.ID = 47; mySendVars.sendAndLoad("serverprogram.cgi", myLoadVars); Tr ng thái l y d li u Hãy nh là câu l nh send và load s không l y d li u ngay t c thì. Có th ph i i trong m t th i gian ng n ho c dài. Vì v y, chúng ta s có nhu c u theo dõi tr ng thái l y d li u. Chúng ta không th s d ng d li u ngay l p t c sau câu l nh load ho c sendAndLoad, mà c n ph i ki m tra xem ã l y d li u xong chưa. Cách ơn gi n nh t là dùng m t movie clip l p i l p l i ki m tra. Cũng có th s d ng getBytesLoaded và getBytesTotal v i nh ng d li u l n. Dư i ây là ví d ki m tra vi c l y d li u: CODE myLoadVars.onLoad = function(success) { if (success) { gotoAndStop("load done"); } else { gotoAndStop("load problem"); } } Như trong o n code trên thì i s success s nh n m t trong hai giá tr true ho c false cho bi t vi c nh n d li u ã xong hay chưa Gi th 19: Dùng XML v i Flash Càng ngày XML càng tr nên thông d ng trong các ng d ng tin h c, và ngay c trong Flash, v y trong gi này mình s h c các i u sau: • • • XML căn b n i tư ng XML trong Flash Phân tích và x lý XML theo phuơng pháo quy (recursive) XML Căn b n XML ch ơn gi n là m t văn b n ch a d li u. XML tương t như HTML, cũng dùng các th . Tuy nhiên, XML khác HTML là các th HTML ã ư c n nh trư c cho các ch c năng khác nhau, còn XML thì không. V i XML, b n có th t t o cho mình các th theo ý b n riêng c a b n. phù h p cho m c ích Có th t o m t XML file v i 1 trình biên t p văn b n (như Notepad, Textpad ...) ơn gi n hay là các software chuyên vi t v XML (XMLSpy, Epic ...) V i Flash MX, b n có th d dàng truy c p ư c d li u tr trong XML, và tư ng XML c a Flash s t ng phân tích văn b n XML này. i Trong VNFX có r t nhi u bài vi t v XML (ví d như bài gi i thi u XML c a FlashLee) các b n có th tham kh o thêm i tư ng XML i tư ng XML trong Flash g m có nhi u hàm v c tính dùng giúp b n l y và phân tích d ki n trong XML file m t cách d dàng. Bư c u tiên khi dùng i tư ng XML là t o m t phiên b n XML trư c: CODE myXML = new XML() Phân tích và s lý văn b n thành XML Sau khi t o phiên b n XML trên, hi n gi phiên b n này v n chưa có gì c , tuy nhiên b n có th nhanh chóng t o ra m t tài li u XML b ng cách dùng l nh parseXML. L nh này s nh p m t chu i văn b n, và phân tích và x lý nó thành 1 tài li u XML. CODE myXML = new XML(); myXML.parseXML("Gary47"); Hay b n có th vi t tr c ti p như sau CODE myXML = new XML("Gary47"); N u mà chu i ư c nh p vào không th t o thành XML hoàn ch nh thì b n có th dùng c tính status ki m tra. CODE myXML = new XML("Gary47"); trace(myXML.status); Output window s cho ra -9 khi ch y o n code trên. -9 có nghĩa là thi u th óng (end tag), vì mình thi u th . N u output window cho ra -10 thì b n thi u th m (start tag), và 0 có nghĩa là m i vi c hoàn ch nh L y d li u t i tư ng XML l y nút (node) Có nhi u hàm làm vi c này. Ví d , b n có th dùng firstChild u tiên c a i tư ng XML: CODE myXML = new XML("Gary47"); trace(myXML.firstChild); Output window s cho ra Gary47. Vì ây chính là nút u tiên c a i tư ng XML. N u chúng ta i xâu vào 1 l n n a v i firstChild CODE myXML = new XML("Gary47"); trace(myXML.firstChild.firstChild); Kỳ này output window s cho ra Gary, vì ph n t name là nút u tiên c a user Ngoài cách trên ra, còn 1 cách n a là dùng childNodes, là ma tr n c a c a các nút. Cùng m t ví d trên nhưng có th dùng như sau v i chidlNodes CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes[0]); Dư i nút name, chúng ta còn m t nút n a dư i nút name, và có th dùng cách trên l y nút ó: CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes[0].childNodes[0]); và output window s cho ra ch Gary. ây là nút văn b n (text node) c a nút name. Nhìn thì tư ng ây là t n cùng r i, không th xu ng sâu hơn ư c n a, vì ây là nút cu i cùng, nhưng n u b n mu n l y giá tr c a nó như là chu i văn b n thì b n có th i thêm 1 bư c n a như sau: CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue); N u b n mu n l y cái ID trong nút th 2 thì thay i như sau: CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes[1].childNodes[0].nodeValue); * gi i thích thêm v o n code trên, n u b n ch dùng childNodes thì k t qu s là 1 i tư ng, còn n u b n dùng nodeValue thì s ra chu i. B n có th th b ng o n code mình vi t dư i ây CODE myXML = new XML("Gary47"); myVar1 = myXML.childNodes[0].childNodes[0].childNodes[0]; myVar2 = myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue; trace ("myVar1: " +typeof(myVar1)); trace ("myVar2: " +typeof(myVar2)); và output window s cho b n th y rõ, cái nào law i tư ng và cái nào là chu i. T t o XML t "tay tr ng" Không bi t d ch câu này sao cho úng nghĩa v i "Creating XML from Scratch". ành d ch như trên v y. Các cách t o XML trên u t 1 chu i văn b n, nhưng n u như b n không có 1 chu i văn b n nào trư c thì sao? B n có th dùng createElement t o ra các nút m i và dùng createTextNode t o ra các text node. Tuy nhiên 2 l nh trên ch t o ra nút ch không thêm vào trong XML, v y b n ph i thêm nó vào b ng l nh appendChild. minh ho , chúng ta s t o m t XML tương t như trên nhưng v i các l nh v a c p. CODE myXML = new XML(); newElement = myXML.createElement("user"); myXML.appendChild(newElement); newElement = myXML.createElement("name"); myXML.childNodes[0].appendChild(newElement); newText = myXML.createTextNode("Gary"); myXML.childNodes[0].childNodes[0].appendChild(newText); newElement = myXML.createElement("ID"); myXML.childNodes[0].appendChild(newElement); newText = myXML.createTextNode("47"); myXML.childNodes[0].childNodes[1].appendChild(newText); N u b n mu n thay i giá tr c a text node, thì b n ch c n dùng nodeValue CODE myXML.childNodes[0].childNodes[1].childNodes[0].nodeValue = 53; Thu c tính Các thành ph n c a XML có th có thu c tính (attribute). Trong ây mình g p r c r i v cách d ch attribute và property, c 2 ch này ti ng vi t u d ch là thu c tính, c tính ... mà ti ng anh thì khác th t r c r i v y mình xin ư c dùng ti ng Anh nhe. Attribute g m có t khoá và giá tr c a t khoá ó, và dùng nh rõ m t thành ph n hơn. Ví d , o n XML dư i dây v i attribute type làm rõ nghĩa c a thành ph n name hơn, ("alias" là bí danh) CODE Gary 47 N u b n mu n ưa o n code trên vào trong XML object thì ph i kép) thành d u ' (ngo c ơn) CODE trace(myXML.childNodes[0].childNodes[0].attributes.type); Còn m t cách n a cũng cho ra k t qu như trên là dùng [] CODE trace(myXML.childNodes[0].childNodes[0].attributes["type"]); Và b n có th thay i d u " (ngo c i giá tr c a attribute, hay thêm attribute m i như sau: CODE myXML.childNodes[0].childNodes[0].attributes["type"] = "real"; V i câu trên, n u attribute type chưa có thì nó s ư ct o (trong sách các o n code trên tác gi vi t l n gi a type và alias, n u b n so sánh gi a sách và bài này thì s th y s khác bi t, và có th các source file cũng s không chính xác, v y các b n c n ki m tra l i) Khác v i node, attribute không th truy c p b ng ma tr n (array) nên b n không th dùng các l nh như length hay dùng [] v i index number. Nhưng b n có th dùng vòng l p for ... in truy c p t ng attribute c a node. CODE myXML = new XML("Gary 47"); for(attr in myXML.childNodes[0].childNodes[0].attributes) { trace(attr+": "+myXML.childNodes[0].childNodes[0].attributes[attr]); } output window s cho ra: alias và verified Thêm vài AS v XML B n cũng c n bi t thêm m t s i u v i tư ng XML. Nh t là i m sau, b t c m t ph n nào c a i tư ng XML cũng có th là m t i tư ng XML riêng bi t. Ví d b n có th l y cái node u tiên c a i tư ng XML và quy thành m t bi n CODE myXML = new XML("Gary47"); thisUser = myXML.childNodes[0]; thisUserName = thisUser.childNodes[0]; thisUserNameText = thisUserName.childNodes[0].nodeValue; thisUserID = thisUser.childNodes[1]; thisUserIDText = thisUserID.childNodes[0].nodeValue; B n có th bi t ư c s node trong trong m t node khác b ng thu c tính length c a childNodes. Ví d , user node có 2 node trong, v y b n có th bi t ư c b ng v i o n code sau: CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes.length); Ngoài vi c có t h tìm ư c giá tr c a m t node văn b n b ng nodeValue, b n có th bí t ư c tên c a thành ph n (hay th ) v i nodeName. Ví d b n có th l y ư c tên c a thành ph n (th ) u tiên c a user là name như sau: CODE myXML = new XML("Gary47"); trace(myXML.childNodes[0].childNodes[0].nodeName); B n có th bi t ư c m t node là thành ph n c a XML hay là m t node văn b n (text node) b ng v i thu c tính nodeType. N u nodeType là 1 thì có là 1 thành ph n c a XML và có th có nhi u thành ph n trong node ó, n u là 3 thì node ó chính là node văn b n. Gi th 20 : Printing Không ph c t p như trình duy t ho c Server Cominucation, in n là m t cách mà FLash truy n d li u ra ngoài. Kh năng in n c a FLash là r t h u ích vì nó cho phép chúng ta xây d ng nh ng văn b n mà ngư i s d ng có th in ra n i dung t file flash c a b n. ây thư ng là l a ch n t t hơn d a vào hàm in n c a trình duy t . Trong gi th 20 này chúng ta s : - H c cách thi t l p movie c a b n cho vi c in n - H c cách s d ng các l nh in - T o ra m t bi u m u có th in ư c I> Thi t l p cho movie có kh năng in: 1-B n c n làm m t vài vi c v i movie trư c khi có th s d ng ư c các l nh in c a Action Script. Th t không may,nh ng l nh in này không ư c linh ho t l m. N u s d ng chúng mà không có s chu n b , Flash s in ra toàn b n i dung c a movie, t ng frame m t. Và ó thư ng là i u mà b n không mu n. Có khi b n ch mu n in duy nh t frame hi n t i, ho c m t frame b t kỳ trong m t movie riêng, ho c m t o n g m nhi u frame. Nhưng hi m khi b n mu n in h t toàn b . 2 - t tên cho frame B n s ch nh nh ng frame ư c in b ng ký hi u "#p" . N u ký hi u ó không ư c t lên frame nào thì Flash s in ra toàn b movie c a b n. Ngư c l i, n u b n t t hai ký hi u tr lên trong movie c a b n thì flash s in ra t t c nh ng frame ó. Hình 1 cho ta th y timeline v i hai frame ã ư c t ký hi u in. Chú ý r ng, t t c nh ng frame có chưa ký hi u in này s ư c t m t layer riêng. Theo cách ó, b n có th t ư c nhi u ký hi u trên nhi u frame. Và nó cũng thu n ti n hơn khi b n không mu n s d ng ký hi u "#p" như m t label th t cho keyframe. *Chú ý: Khi b n t t hai ký hi u in tr lên, khi test movie, Flash s xu t hi n l i c nh báo : "WARNING : Duplicate layer.." ó là i u r i ro có th x y ra, nhưng cũng s không nh hư ng n movie c a b n tr phi b n s d ng label "#p" trong câu l nh "gotoAndStop" ho c nh ng l nh tương t .... 3- Lên k ho ch in B n c n ph i suy nghĩ và lên k ho ch cho movie c a b n khi mu n movie có kh năng in. Vì không th ch in m t frame hi n t i nên b n c n t o ra nh ng frame có kh năng in. Chú ý r ng m i th t n t i trên movie c a b n s ư c in ra. Nó bao g m c nút Print ( khi nh n vào s th c hi n l nh in), n u trong movie có t n t i. Vì v y chúng ta c n ph i có m t frame ch a nút Print, và m t frame khác tương t nhưng không có nút Print cũng như các y u t khôgn c n thi t khác. Frame th hai này s ư c d t nhãn là "#p" B n có th b trí b ng cách s d ng timeline chính. Ví d b n có m t menu và m t nút Prin trên hai layer riêng bi t, mà c n có trong n i dung c a bi u m u in. Nh ng layer này n u b n không mu n in ra thì không c n kéo chũng sang frame có nhãn "#p" hai hình sau th hi n i u này. Hình th nh t,là frame mà ngư i dùng s th y xu t hi n trên trang web. NÓ ch a n i dung. nút Print và menu Ngư c l i, trong hình hai là n i dung mà ngư i duy t web không th y ư c, ít nh t là trên màn hình. Frame này ư c t tên là "#p" b n có th th y trên timeline.Layer Buttons không s d ng keyframe gi ng như frame 1. Ngoài vi c ch n nút Print không oc in ra, có th thêm vào frame này m t s thông tin s ư c in ra như a ch , ... Bây gi b n ã bi t làm th nào AS c n thi t chu n b cho m t bi u m u in, bây gi cùng h c Có hai l nh in chính ư c s d ng. Chúng có m t khác bi t r t nh , nhưng v căn b n là ho t ng gi ng nhau. 1- Print L nh th nh t là QUOTE Print L nh này bao g m hai tham s . Tham s th nh t là i tư ng in. Thương là timeline chính, ho c "_root". B n cũng có th s d ng "this". Tuy nhiên, n u b n không mu n in nh ng frame trong movie, b n có th s d ng tham chi u t i movie ó. Tham s th hai là m t trong ba tuỳ ch n sau : QUOTE bframe II> Các câu l nh QUOTE bmovie QUOTE bmax Các tham s này giúp FLash có th co dãn văn b n in theo ý c a ngư i s d ng. Flash có th co dãn văn b n in t i kích thư c c a trang gi y mà không bóp méo văn b n. Ví d n u frame ư c in có kích thư c 550x400, thì chi u ngang s ư c phóng to t i kích thư c 550px chi u d c có th s ư c scale theo t l . Khi s d ng tuỳ ch n "bframe", t ng frame s t scale l p y kích thư c c a trang ó. N u frame th nh t có n i dung v i kích thư c là 550x400 nhưng frame th hai ch ch a n i dung có kích thư c 275x200, khi ó frame th hai s t ng scale g p ôi kích thư c ban u. khi s d ng tuỳ ch n "bmax", Flash s ki m tra toàn b các frame ư c in xác nh xem frame nào có kích thư c l n nh t. Các frame còn l i s scale d a trên kích thư c c a frame l n nh t, tính theo t l . i u này ta nên các frame có kích thư c t l v i nhau Ví d , frame l n nh t có kích thư c 550x400, và nó l p y trang in. Frame khác ch có kích thư c 275x200, nó ch chi m m t n a trang in. Tuỳ ch n cu i cùng là "bmovie", trư ng h p này b n c n ph i làm thêmm m t vi c nh n a, ó là t o ra frame m i có chưa m t khung. Khung này s xác nh kích thư c l n nh t ư c in ra i v i văn b n (b ng kích th oc c a khung). B n ph i t tên frame này v i ký hi u "#b". Và flash s s d ng kích thư c c a khung scale toàn b các frame còn l i. N u có m t ph n văn b n này n mg ngoài khung in chúng s không ư c in ra. Sau ây là ví d v l nh "Print" : QUOTE on(release) { print(this,"bframe"); } Như b n ã th y, tuỳ ch n ư c coi như m t chu i và ư c t trong d u "" 2-PrintAsBitmap Câu l nh này làm vi c tương t như l nh Print v i hai tham s tương t . i u khác bi t là l nh Print s g i các i tư ng ho và font ch t i máy in. Sau ó, máy in s xây d ng l i các vector và n i dung in ra. Ngư c l i, PrintAsBitmap s chuy n toàn b n i dung thành m t nh bitmap l n và g i t i máy in. i m thu n l i nh t c a PrintAsBimap là trong su t c a văn b n cũng ư c in ra. N u b n có m t i tư ng ho bán trong su t, ch c có ưu i m ch n b n s c n n ch c năng in này, ng th i nó cũng ho t ng t t v i nhi u lo i máy in hơn. L nh in chính là văn b n ư c in ra có tính th m m cao, ư ng cong smooth hơn và ch rõ ràng hơn khi ư c in ra. Nó cũng nhanh hơn khi in qua m ng. Nguyên tác chung nh t là s d ng l nh PrintAsBitmap khi b n th t s ch c ch n k t qu s gi ng như n i dung hi n th trên màn hình. S dung Print khi văn b n không c n chính xác cao ho c khi b n xây d ng movie i u khi n môi trư ng như m ng n i b . Chú ý: N u b n sưe d ng movie qua internet, l nh in ch làm vi c khi t t c các frame trong movie ư c load xu ng. Thao tác : T o bi u m u in M t i u mà ngư i dùng ghét nh t trên m t website là m t bi u m u mà chúng ta ph i in ra, i n vào, r i g i i . Chúng ta ang s d ng máy tính, t nhiên l i ph i i ki m cái bút trên bàn vi t ? Vì v y t i sao chúng ta không t o ra bi u m u cho phép i n thông tin vào, sau ó ư c in ra v i y n i dung ã ư c nh p vào. Chúng ta s làm ví d ơn gi n này, và s th y chúng thu n ti n hơn r t nhi u so v i m t biêt m u html yêu c u ngư i s d ng in ra toàn b n i dung c a site. B n hoàn toàn có th i khi n nh ng gì s ư c in ra, vì v y nh ng th linh tinh trên trang web có th ư c b qua và nh ng y u t m i như email address có th ư c thêm vào. 1- T o m t movie m i 2- T o ra các trư ng nh p d li u (ví d tên, tu i, hình) sau ó t tên layer này là CONTENT a ch , gi i tính, email...) (xem 3- t tiêu cho trư ng lên phía trên ô nh p li u 4-T o thanh tiêu cho Form. Chú ý,hai lo i tiêu bi t . 5-T o nút Print và t trong layer tên là Buttons 6-CHèn o n mã sau cho button : QUOTE on (release){ print (this, "bmax"); } này s ư c t hai layer riêng 7- Thêm Frame th hai cho movie, kéo Title Bar và Content sang frame 2 T o blank keyframe cho layer Buttons và Titles, vì chúng s có n i dung khác trong frame th hai 8- Trong frame th hai c a layer Title, t m t tiêu khác. Ví d , n u frame th nh t là "Fill out that application" thì frame th hai ch c n là Appilcation 9- Sau ó, bi u m u ã s n sàng th y tiêu m i trong hình.. i n vào. Tiêu cũ s bi n m t, b n có th nhìn 10- Thêm m t layer m i tên là Signature. t m t keyframe frame th hai c a layer này. Thêm ư ng ngăn cách và a ch trong frame này. N u làm úng thì frame 1 c a layer này s không có gì, n i dung ch t n t i frame 2 11- Thêm layers tên Frame Labels . t trong ó hai keyframe. Keyframe th 2, chúng ta t ký hi u "#p" . Keyframe th nh t chèn code QUOTE stop(); Test movie c a b n. B n hãy i n vào bi u m u ó, và n nút Print. Frame th hai s ư c in ra v i tiêu "Application", ch ký, và a ch ... Tóm t t in ư c các frame trong m t movie b n c n ph i t label cho chúng là "#p". B n có th t tên cho m t ho c nhi u frame trong cùng m t movie. M i th trong frame "#p" s ư c in ra. B n có th trang trí tuỳ thích i v i bi u m u ư c in ra, tr nh ng y u t như menu. B n có th s d ng l nh "Print" in các frame s d ng vector shape g i t i máy in. Tuy nhiên, n u c n in nh ng i tư ng ho bán trong su t ho c ch c ch n r ng t t c nh ng bi u m u in ra gi ng nhau, b n có th s d ng l nh PrintAsBitmap Gi th 21: S d ng component, Using component ActionScript cho các Component i kèm Flash Có 7 component g n li n kèm theo chương trình Flash: CheckBox, ComboBox, ListBox, PushButton, RadioButton, ScrollBar, ScrollPane. thêm m t component vào movie c a b n, b n có th click úp lên component trong b ng Component, ho c nh n và kéo m t component vào stage. PushButton Click và kéo component PushButton vào stage s t o m t instance (th hi n) m i c a component PushButton trên màn stage. Khi ó b n ã thêm m t s ph n t Library vào trong movie. R t may là các ph n t này ư c c t trong các folder r t g n trong Library (thư vi n), vì th chúng cũng không nh hư ng m y n công vi c c a b n. Component PushButton trên stage trông r t ơn gi n: ch là m t khung v i t "PushButton" gi a. B n nh b t tính năng Live Preview (xem trư c) c a Flash b ng cách ch n Control-->Enable Live Preview. Sau khi PushButton ã trên stage, b n có th click ch n nó và m b ng Properties i tên. Hai thông s có th thi t t cho component PushButton là Label (nhãn): ta i thành Press Me ! và Click Handler (qu n lý s ki n nh n nút): ây là tên c a hàm ư c g i khi nút ư c click. Hàm này ph i n m trong cùng Timeline v i nút; vì th n u nút t level g c (root level), hàm ph i trên Timeline chính. Ta thi t t Click Handler thành buttonPressed (nút ã ư c nh n). Ngoài ra b n t cho component m t instance name (tên minh h a) là testButton (ki m tra nút). Bây gi t t c công vi c ph i làm là vi t hàm buttonPressed. Dư i ây là m t ví d ơn gi n. Hàm này ch g i m t vài dòng text ra c a s Output: ActionScript function buttonPressed(buttonInstance) { if (buttonInstance == testButton) { trace("Test Button Pushed."); } else { trace(buttonInstance._name); } } M i hàm qu n lý nút s chuy n m t tham s : m t tham chi u n nút g i hàm. Vì th b n có th ki m tra instance này có ph i có tên là testButton hay không. Hàm ví d trên s chuy n thông báo "Test Button Pushed" n u nút ư c nh n là testButton, và in ra tên minh h a c a nút n u nút b nh n không ph i là testButton. B n có th xem ví d m u này trong movie 21pushbutton.fla. CheckBoxes Component CheckBox (h p ki m) tương t như cái mà chúng ta ã t o em d ch sau nhé). gi 15 (anh t o m t CheckBox component, click úp vào nó trong b ng Components, ho c click và kéo nó lên trên stage. t o m t instance th hai, m folder Flash UI Components trong thư vi n Library và kéo component CheckBox lên trên stage. Trong ví d movie 21checkboxes.fla, tôi ã t o 3 h p ki m (CheckBoxes). N u b n ch n m t component trong chúng và m b ng Properties, b n s th y nó có nhi u thông s hơn so v i component PushButton. B sung vào các thông s Label và Change Handler, gi ây b n có c Initial Value (giá tr ban u) và Label Placement (s p x p nhãn). Thông s Initial Value là true ho c false, tùy thu c vào vi c b n mu n h p ki m ban u ư c ánh d u hay không. Thông s Label Placement cho phép b n s p x p các nhãn bên ph i ho c trái (right ho c left) so v i ô ki m. Right là s p x p m c nh. N u b n chuy n thành left, dòng ch ghi nhãn c a h p ki m s xu t hi n bên trái c a ô. Trong movie m u, tôi t tên cho 3 instance CheckBox là option1, option2, và option3. Tôi cũng t nhãn (label: ph n text bên c nh ô ki m) là Option One, Option Two, và Option Three. Thông s Change Handler c a m i instance ư c i thành changeOptions. Tôi t hàm changeOptions trong timeline chính. Hàm này s ư c th c thi khi nào m t trong các h p ki m CheckBox ư c click vào. Nó s g i tên và tr ng thái m i c a CheckBox ra c a s Output. ActionScript function changeOptions(checkBoxInstance) { trace(checkBoxInstance._name+": "+checkBoxInstance.getValue()); } Trong 21checkboxes.fla, tôi cũng thêm vào m t component PushButton. Nút này ư c t tên là doneButton và s g i hàm buttonPressed. Hàm này s l p i l p l i v i t t c các CheckBox và g i tr ng thái c a chúng ( ư c ánh d u hay chưa) ra c a s Output. ActionScript function buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { trace("Option One: "+option1.getValue()); trace("Option Two: "+option2.getValue()); trace("Option Three: "+option3.getValue()); } } Thay vì g i các k t qu ra c a s Output, h u h t b n s mu n s d ng chúng trong các d ng khác. Ví d , b n có th t chúng trong m t i tư ng LoadVars chúng có th g i t i m t server. RadioButtons RadioButtons gi ng như CheckBoxes, ngo i tr vi c chúng ư c s p x p thành các nhóm. T i m t th i i m, b n ch có th ch n m t nút RadioButton trong m t nhóm. File m u 21radiobuttons.fla có ba component RadioButtons. N u b n ch n m t trong nh ng nút ó và m b ng các thu c tính (Properties panel) cho nút, b n s nhìn th y component này có nhi u thông s hơn so v i các component CheckBox hay PushButton. Thêm vào các thông s b n ã th y trong component CheckBox là hai thông s Group Name (tên nhóm) và Data (d li u). Thông s Group Name xác nh xem RadioButton thu c v nhóm nào. Trong movie m u, c ba RadioButtons u thi t t thông s này là firstGroup. N u ã có m t nhóm nút th hai v i m t tên khác, thì hai nhóm này ư c xem là c l p v i nhau khi quy t nh RadioButton nào ư c b t. Thông s Data là tùy ch n và b n có th s d ng trong các o n mã c a mình. B n có th truy c p (access) nó b i hàm getData(). B n có th lưu tr các l nh mà o n mã c a b n th c thi khi nút radio ư c ch n. Trong movie m u, ba RadioButtons ư c t tên là choice1, choice2, và choice3. Nhãn c a ba nút này là Choice One, Choice Two, và Choice Three. Vi c xác nh xem ngư i dùng ã ch n nút radio nào s ư c th c hi n khi PushButton trong movie ư c click. Sau ó PushButton s ch y o n script này quy t nh xem l a ch n nào ã ư c thi t l p. o n script s l p i l p l i v i c ba nút tìm ki m m t nút tr v true t hàm getState(). i u này nghĩa là nút RadioButton ó ã ư c b t. ActionScript function buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { var choice = "none"; for(i=1;i<=3;i++) { if (this["choice"+i].getState()) { choice = this["choice"+i]._name; } } trace("Choice: "+choice); } } ListBox M t ListBox (h p danh sách) là m t phương pháp ơn gi n cho phép ngư i dùng l a ch n m t ho c nhi u tùy ch n. M t ListBox có th t như m t thi t l p c a CheckBoxes ho c RadioButtons. Nó c bi t h u ích khi b n có nhi u l a ch n nhưng kho ng tr ng trên màn hình có h n. M t khung danh sách trong như m t trư ng text cu n--trên th c t là như v y. M i dòng tương ng v i m t l a ch n riêng bi t c a ngư i s d ng. N u có nhi u l a ch n hơn vùng mà khung danh sách có th hi n th thì ngư i dùng có th cu n lên và cu n xu ng xem h t các m c trong danh sách. Khi b n t o m t instance m i c a component ListBox, b n ph i thi t t thông s Select Multiple (l a ch n nhi u dòng) c a nó. N u tham s này là true, ngư i dùng có th dùng các phím Shift, Command, ho c Ctrl l a ch n nhi u hơn m t dòng. N u là false, m i l n b n ch có th ch n ư c m t dòng. Thêm vào ó, b n ph i thi t t thông s Labels (nhãn). Tuy nhiên, ây không ph i là m t giá tr ơn mà là m t m ng các giá tr . Flash có m t giao di n c bi t (special interface) cho vi c nh p các giá tr này. Khi b n click trên tham s Labels trong b ng Properties, b n s b t g p m t h p tho i cho phép b n nh p vào m t m ng các m c (item) cho các thông s khác. B n cũng có m t tham s Data (d li u) t o m t m ng d li u. Thông s Data này, gi ng như thông s data ã dùng v i các nút radio, cho phép o n mã c a b n l y thông tin b sung v các l a ch n mà ngư i dùng ã ch n. Tuy nhiên, thông s này không b t bu c ph i có. Trong movie m u 21listbox.fla, tôi t m t component ListBox v i ba l a ch n trên màn hình. Chúng ư c thi t t là có th ch n nhi u dòng. Khi ngư i dùng click lên trên m t dòng, hàm listBoxChange s ư c g i. i u này ư c xác nh b i thông s Change Handler c a nó. Hàm này cho b n bi t dòng nào (l a ch n nào) v a ư c ch n: ActionScript function listBoxChange(listBoxInstance) { trace(listBoxInstance.getValue()); } Trong movie m u này cũng có m t component PushButton. Khi nó ư c click, nó s th c thi hàm này. Nó s d ng hàm getSelectedItems() l y m t m ng các l a ch n (choices) ã ch n trong list box. M i m c ch n trong m ng là m t i tư ng v i m t thu c tính label và data. Vì chúng ta ã không s d ng các thu c tính data c a h p danh sách (list box), nên thay vào ó chúng ta s l y các nhãn (label). ActionScript function buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { items = myListBox.getSelectedItems(); for(var i=0;i= 100) { _root.play(); } } ây là ph n u cơ b n c a 1 loader script. Tuy nhiên có các cách khác chính xác hơn giám sát vi c loading hơn là tính s frames. B n có th s d ng getBytesLoaded and getBytesTotal tính t ng s file và s file ã load. ây là o n script t vào trong 1 mc frame u tiên c a movie. frame u tiên b n chú ý t thêm l nh stop(); CODE onClipEvent(enterFrame) { if (_root.getBytesLoaded() == _root.getBytesTotal()) { _root.play(); } } m i l n enterFrame i u ki n s ư c ki m tra và khi th a mãn t c movie ư c load hoàn toàn thì movie s ư c play ti p t c Chúng ta ti p t c ti n hành làm 1 loader ơn gi n trư c khi nó vư t qua frame 1 : cho toàn b movie ư c load 1.M 1 file m i. 2. frame u ta t o 1 keyframe 3.T o thêm 1 kf m i frame 2 có th test cái loader 1 cách rõ ràng thì frame 2 nên ch a 1 movie t i thi u là 100 K. Cách t t nh t tăng dung lư ng là ta import 1 video. 4.Tr l i frame 1, chúng ta mu n có 1 movie ch cho n khi toàn b movie ã ư c load trư c khi tiép t c sang frame 2 ---> cho 1 l nh stop(); vào frame 1 này. Ta t o 1 shape ơn gi n và convert nó sang mc và t ng c nó sang 1 góc màn hình mà ngư i xem ko nhìn th y (chu i r ng). Ta cho o n script sau vào: CODE onClipEvent(enterFrame) { bytesLoaded = _root.getBytesLoaded(); bytesTotal = _root.getBytesTotal() percentLoaded = Math.round(100*bytesLoaded/bytesTotal); _root.displayText = "Loading: "+percentLoaded+"%"; if (bytesLoaded == bytesTotal) { _root.play(); } } o n script s ki m tra getBytesLoaded xem li u movie ã k t thúc vi c loading chưa. ây ta tính s ph n trăm ã load (percentLoaded) và cho hi n th con s này qua bi n displayText root level B n ng quên t o 1 dynamic text field và t var cho nó là displayText nhe. S r t khó ki m tra khi b n test cái movie này v i Flash player trên máy vì movie c a b n ch y nhanh quá, ko k p nhìn cái loader. B i v y nên publish nó lên 1 trang web rùi test . Ho c b n có th gi thi t l p 1 cai modem 56 K Nào bây gi goto website và test b n s th y quá trình loading ư c hi n s ph n trăm text field. Khi t n 100% movie s ti p t c play. B n có th ki m tra movie c a b n v i file: 23simpleloader.fla 3. cho cái loader c a chúng ta thêm p, chúng ta ti n hành bư c 3 làm 1 loader ph c t p hơn có thêm 1 cái progess bar n a nhé các bư c làm như sau: 1.B t u 1 movie m i : 2.V 1 hình ch nh t r ng v i border 3.Ch n toàn b cái hình ch nh t này và convert to mc. 4.Click 2 cái vào mc m i này edit nó t chúng vào 1 mc b ng cách ch n insert và 5.Tách riêng ph n fill và border c a cái hình ch nh t ra làm 2 layer 6.Copy cái fill c a hình ch nh t và t o 1 layer m i paste nó vào. Layer này nên n m trư c và layer có ch a hình ch nh t cũ thì n m sau nó. 7.Ch n hình ch nh t m i này(cai fill) và ch n cho nó màu t i hơn. ăt v trí kh p v i cái border, phía trên hình ch nhât cũ 8.Bây gi ta convert nó sang mc và t instance name là barFill Double click vào mc m i này và ta ch nh reg. point cho nó là góc t n cùng bên trái. Tr l i movie chính, ta t o thêm 1 layer m i. Và t 1 dynamic text ó. t var cho nó là displaytext, b n nh ch n font ch p d p và màu cũng p p 1 chút nhé movie c a timeline chính ta t o n code sau vào mc chính c a chúng ta: CODE onClipEvent(load) { // initialize variables bytesLoaded = 0; bytesTotal = _root.getBytesTotal(); } o n code enterFrame ph i làm nhi u vi c nh t. Nó có nhi m v theo dõi s bytesLoaded và bytesTotal liên t c m i Frame. Bi n percentLoaded có giá tr t 0 n 100. Và nó ư c s d ng chính thay i _xscale c a thanh Bar. B n còn nh là ta ã m c nh i m reg. point c a thanh Bar này góc bên trái ko? Chính vì v y mà thanh bar s dài ra theo giá tr c a bi n percentLoaded sang phía bên ph i Khi mà s bytesLoaded = s bytesTotal thì display text s hi n thông báo: "Loading Complete" và chuy n movie sang frame ti p theo. CODE onClipEvent(enterFrame) { // if there is more to load if (bytesLoaded < bytesTotal) { // get current amount loaded bytesLoaded = _root.getBytesLoaded(); // calculate percentage percentLoaded = Math.round(100*bytesLoaded/bytesTotal); // if there is still more if (bytesLoaded < bytesTotal) { // display text displayText = "Loading: "+percentLoaded+"%"; // set scale of bar barFill._xscale = percentLoaded; // no more left } else { // display complete displayText = "Loading Complete."; // fill out bar barFill._xscale = 100; // go to next frame _root.nextFrame(); } } } Ko bi t hư ng d n như trên các b n ã hình dung ra cách làm chưa nh . N u các b n chưa hi u thì cbt s post thêm hình minh h a vào Timeline c a chúng ta tôt nh t nên phân ra như sau nha: -Timeline chính s g m có 3 layer. Layer th nh t s ch a cái loader bar mc mà chúng ta ã t o. Nó s kéo dài trong 2 frames. -Layer th 2 s g m có 2 keyframes fr1 và fr2. kf 1 là l nh stop(); Layer th 2 ta s cho 1 button. Ngư i s d ng s click vào button xem ti p ph n còn l i c a movie. Trong btn cho o n code sau: CODE on (release) { play(); } -Layer th 3 b t u t frame th 3 s ch a cái movie c n load c a b n Các b n có th xem thêm file : 23complexLoader.fla Có nh ng lúc b n c n t o các movie l n có các media thì ta ko c n ph i t o 1 movie y nh ng file media trong ó mà có th load các file media có s n này t bên ngoài. Nh v y b n có th xây d ng 1 trình di n l n b ng cách s d ng nh ng file bên ngoài. làm ư c i u này chúng ta s tìm hi u các bư c sau: Th ch movie hi n th i Cách ơn gi n làm i u này là b n chia c t movie này ra thành các ph n riêng. Khi 1 movie k t thúc ta có th chuy n n 1 movie khác. T t c nh ng gì b n c n là dùng l nh loadMovie Ví d , b n có 1 frame cu i 1 movie dài. Khi ngư i xem n ó, h có th click vào 1 button và xem 1 movie khác. o n code ơn gi n như sau: CODE on (release) { loadMovie("animation2.swf"); } Ho c là b n có th cho ngư i s d ng l a ch n animation mà h mu n xem ti p. cu i movie s có 2 buttons ch a các movie khác nhau. Vi c t o liên k t gi a các movie là r t quan tr ng sao cho khi user có th tr l i movie cũ ban u. B n có th xem ví d file 23movie1.fla bi t thêm làm th nào trình bày tác ph m c a b n v i các files có s n. Loading a Movie Clip V i l nh loadMovie b n có th thay th ch c a 1 mc b ng 1 mc khác. Ví d th ch c a myMovieClip b ng file otherMovie.swf b n ch c n làm: CODE myMovieClip.loadMovie("otherMovie.swf); thay Khi s d ng loadMovie b n có th dùng getBytesTotal and getBytesLoaded functions thông báo cho ngư i dùng b ng text ho c b ng progess bar mà chúng ta ã làm trên quá trình load. N u mu n preload m t movie clip s n sàng lúc c n hi n th , chúng ta s t o m t movie tr ng, không có gì trong ngo i tr m t câu l nh stop(). Sau ó chúng ta load mc vào mc tr ng này (ko hi n th trên stage). Khi load hoàn toàn thì movie c a chúng ta ã s n sàng frame u tiên. Movie file này s n m s n sàng trong browser cache c a user. Bây gi khi n o n có s d ng mc này thì l nh loadMovie s làm vi c. Lúc ó s nhanh hơn vì file ã ư c download hoàn toàn v r i. Sau ó s d ng l nh gotoAndPlay(2) qua frame 1. Loading a JPEG myMovieClip.loadMovie("picture.jpg"); Flash MX cũng cho phép ta kh năng load 1 file JPEG ngoài vào. Cách làm tương t như cách chúng ta load movie trên, ch c n thay movie b ng a ch c a file JPEG là ok: CODE myMovieClip.loadMovie("picture.jpg"); i a ch mc myMovieClip bây gi ư c thay th ch b ng 1 mc có ch a bitmap image này. B n có th ki m tra và xem ví d file 23loadipeg.fla Loading a Sound Có 2 cách play 1 sound t 1 file bên ngoài. C 2 u s d ng sound object và l nh loadSound. Các sound file này c n d ng ph bi n là mp3. Sau ây là 1 ví d cho cách th 1, chơi 1 event sound. ây toàn b sound s ư c load vào b nh trư c và sau ó ư c chơi n u như có l nh start(); CODE on (release) { mySound = new sound(); mySound.loadSound("mysound.mp3",false); mySound.start(); } Flash s ghi nh là l nh start ã ư c ưa ra th m chí khi sound m i ch b t download. Khi sound ư c load xong thì nó s ư c play ngay l p t c CODE on (release) { mySound = new sound(); mySound.loadSound("mysound.mp3",true); } Cách th 2 là ta s d ng true param th 2. Giá tr true này s b o v i flash ó là 1 stream sound. Ngay khi sound ư c load ph n nào thì s b t u chơi ngay trong lúc ph n còn l i v n ti p t c ư c load. N u ngư i dùng có k t n i m ng t t thì s nghe ư c toàn b sound khi load. Ghi chú là b n ko c n ph i s d ng l nh start v i 1 streaming sound. Tuy nhiên b n u c n ph i chú ý khi s lí file MP3. Ví d n u b n s d ng file nh c mp3 v i 128 Kbps hay 160 Kbps thư ng dùng nghe thì nó s là 1 file quá l n có th stream vói internet, c bi t n u ngư i sư d ng dùng modem. 32 Kpsb hay ít hơn s thích h p hơn khi ta s d ng stream. Chúng ta t ng k t l i nhe: Streaming là 1 cách r t t t giúp chúng ta s d ng d dàng hơn v i 1 movie l n. Ta có th sư d ng AS ki m tra 1 quá trình loading. B n có th gi movie frame th nh t và ch nó ti p t c khi toàn b movie ã ư c load. B n cũng có th thông báo cho ngư i dùng quá trình loading b ng text thông báo s % ho c 1 b ng 1 progess bar ch ng h n. B n có th chia movie ra thành cách file riêng và s d ng loadMovie này t i file khác như ngư i s d ng mu n. nh y t file Các file bên ngoài có th ư c load vào b ng các cách khác nhau. Ngoài movie b n có th load 1 file nh, file nh c n a. M t s câu h i và tr l i sau có th giúp b n n m rõ bài hơn: Câu 1: ta có th load 1 mc, v y có th unload chúng ko?? -Tr l i: có, b ng l nh unloadMovie Câu 2: bình thư ng thì flash c n bao lâu load trư c khi nó start?? -Tr l i: ngay frame u tiên. B i v y b n c n s d ng l nh stop n u như mu n nó i trư c khi ti p t c. Câu 3: 2 cách xác nh khi 1 movie ư c load hoàn toàn?? -Tr l i: cách 1 dùng getBytesLoaded == getBytesTotal function cách 2 dùng _frameLoaded property và _totalFrames property. Ngoài ra b n có th xem thêm các bài vi t sau: Cách t o 1 preloader ơn gi n http://www.vnfx.com/ipb/index.php?showtopic=2325 Cách t ng quát t o 1 loader p: http://www.vnfx.com/ipb/index.php?showtopic=2921 Ngoài ra v loadMovie, loadSound cũng có r t nhi u bài. B n ch u khó search ha Gi th 24: V v i AS, Hour 24. Drawing with ActionScript ây là h cu i cùng, cũng là gi r t thú v , hy v ng các b n c m th y dzui dz khi v b ng AS . CBT ko có kinh nghi m d ch bài, v i l i nhìn vào m y bài text dày c ch là t i m t t i mũi nên nhi u ch d ch lung tung, theo ý thích b i v y có ch nào di n t t i nghĩa, ko úng thì các b n c th ng th n góp ý, ng thương ti c . Trong gi này chúng ta s h c cách: • • • • • V ư ng th ng và ư ng cong Tô màu 1 vùng ngư i s d ng v v i chu t t các hình ã v trong 1 movie clip m i T o các text fields 1a.Drawing lines - v 1 ư ng th ng, vi c u tiên c n làm là dày như th nào nè, rùi có màu gì và alpha. CODE lineStyle(thickness, color, alpha); Màu (color): giá tr ư c ưa ra dư i d ng s th p l c phân hexa, ví d : 0x000000 là màu en, 0xffffff: tr ng , chúng ta có th nhìn vào b ng color mixer bi t thêm trong su t(alpha): min = 0; max=100; dày (thickness): dày nh nh t là 0, còn l n nh t là bao nhiu thì cbt ko bi t . V i dày 1 cái line có dày là 1 pixel, còn n u ta cho giá tr là 0 (hairline) thì nó v n có dày là 1 pixel . Tuy nhiên chúng khác nhau ch : v i hairline n u như dày c a nó v n ko thay i. Các b n th o n chúng ta thay i scale c a nó thì code sau, và thay i giá tr dày nhé: CODE lineStyle(0,0x000000,100); moveTo(20,50); lineTo(200,200); _xscale=300; _yscale=300; nh nghĩa các giá tr c a lineStyle, nó Nhìn o n code trên ta th y xu t hi n l nh: CODE moveTo(20,50) v 1 ư ng th ng ta c n xác v i 2 giá tr x và y ---> moveTo là i m u, i m nh 2 i m: u và cu i. M i i m l i ư c xác inh câu trên ta t bút t i x=20; y=50. ư c t bút. Như v y ----> lineTo là i m ti p n. Ta có x= 200; y=200. Như v y chúng ta ã v ư ng th ng n i t i m (20,50) n (200,200). Chú ý: 1. n u như các b n ko nêu i m moveTo thì nó t m c nh là i m (0,0) 2. n u như các b n v thêm các line ti p theo v i lineTo thì i m t bút ư c m c nh là i m cu i cùng c a line trư c. v 500 ư ng lung tung trên màn hình ta có o n code ơn gi n sau: Ví d CODE // set line style lineStyle(2,0x000000,100); // draw 500 lines for(var i=0;i<500;i++) { // pick random start point x1 = Math.random()*550; y1 = Math.random()*400; // pick random end point x2 = Math.random()*550; y2 = Math.random()*400; // move to start point moveTo(x1,y1); // draw to end point lineTo(x2,y2); } Bây gi các b n th play trò này xem sao, th thay c a nó i alpha, color or thickness M i ngư i th copy and paste o n code sau xem hi n ra gì nào : CODE // set line style lineStyle(2,0x999999,100); for(var x=-400;x<550;x+=10) { // draw diagonal strip from left to right moveTo(x,0); lineTo(x+400,400); // draw opposite strip moveTo(550-x,0); lineTo(550-x-400,400); } 1b.Drawing Curves Tương t khi b n ã bi t cách v line r i thì v curveTo ko có gì là khó. Nó ch có thêm 1 chút giá tr thôi. Ta có o n code: CODE lineStyle(3,0x000000,100); moveTo(150,200); curveTo(275,275,400,200); Như ã bi t moveTo là i m b t u, anker1 ha. curveTo(control_x, control_y, anker2_x, anker2_y); Control_point là ti p tuy n c a 2 i m anker v i ư ng cong anker2 là i m cu i cùng c a curve. Các b n có th c thêm 1 s bài vi t trong di n àn v ư ng cong bezier thêm . Chúng ta play ti p v i o n code sau: hi u rõ CODE lineStyle( 1, 0x0000FF, 100 ); moveTo(200,200); curveTo(250,200,300,200); curveTo(300,250,300,300); curveTo(250,300,200,300); curveTo(200,250,200,200); Olala, t i sao chúng ko hi n ra các curve mà l i là 1 hình vuông. Nguyên nhân là do chúng ta cho các giá tr control point gi a 2 i m kia Hãy th thay i 1 chút xem chúng ta có gì nào: CODE var bend = 42; moveTo(200,200); curveTo(250,200-bend,300,200); curveTo(300+bend,250,300,300); curveTo(250,300+bend,200,300); curveTo(200-bend,250,200,200); s d ng bi n bend thay i control point ta ư c 1 hình trong hơi méo rùi ph n này plz c thêm các topic trong box AS .V 2. Drawing Filled Areas Trư c h t có th tô màu cho 1 vùng ta c n ph i v 1 hình khép kín ha. Sau ó dùng l nh beginFill v : CODE beginFill(color of fill, alpha of fill) Ví d o n code sau: CODE lineStyle( 3, 0x000000, 100 ); beginFill( 0xFF0000 ); moveTo(175,100); lineTo(375,100); lineTo(375,300); lineTo(175,300); lineTo(175,100); endFill(); N u như 1 vùng ư c c t b i line l n th 2 thì ch ó nó s ko có màu n a. D a vào ó ta có th t o nên 1 s hình thú v . B n th copy o n code sau xem nó hi n ra cái gì nào và ch nào ư c tô màu, ch nào ko : CODE lineStyle(3,0x000000,100 ); beginFill(0xFF0000); moveTo(250,50); lineTo(308,230); lineTo(155,120); lineTo(345,120); lineTo(192,230); lineTo(250,50); endFill(); Có cách khác t t hơn v 1 star, nó cho phép chúng ta qui B n th xem file fla 24betterstar.fla xem sao Pause nh các giá tr ban u. 3.V v i chu t Ph n ti p theo trong sách này có o n code user v v i chu t, thành th t mà nói, n u b n ã c o n code c a DS post bên ph n Flash hack thì b n s th y nó khác nhau 1 tr i 1 v c như th nào http://www.vnfx.com/ipb/index.php?showtopic=3007 N u b n ã c o n code c a DS thì ng nên c ti p o n code hư ng d n trong cu n sách này làm gì. CBt th y là ko c n thi t ph i d ch ch này nhưng trót rùi nên tôn tr ng quy n sách, cbt d ch cho y v y 1.T o 1 shape ơn gi n, convert to mc. 2.Copy o n code sau vào mc (cbt ã phân tích kèm) CODE onClipEvent (load) { // cho các giá tr cho ki u line _root.lineStyle(0, 0x000000, 100); } //khi chu t ư c dzí xu ng thì b t onClipEvent(mouseDown) { // ok to draw draw = true; // xác nh i m start v startX = _root._xmouse; startY = _root._ymouse; _root.moveTo(startX,startY); } //khi th chu t ra thì ko v n a onClipEvent(mouseUp) { // don't draw anymore draw = false; } //b t u onClipEvent (enterFrame) { if (draw) { //l y v trí hi n t i c a chu t newX = _root._xmouse; newY = _root._ymouse; //n u như v trí khác v i v trí ban u if ((newX != startX) or (newY != startY)) { //v 1 line t i v trí m i _root.lineTo(newX,newY); // reset location for new time startX = newX; startY = newY; } } } uv Ph n này ch có v y 4.T o 1 movie clip riêng cho các hình ã v Nh ng gì chúng ta ã làm trên ch là v 1 cách ơn gi n trên stage, nó có b t l i là có th b b t kì mc nào che khu t. ko th di chuy n. Khi chúng ta t nh ng cái này vào trong 1 mc thì thu n ti n hơn r t nhi u. ta có th thay i _x, _y, rotation, alpha, scale .... t o 1 new mc ta dùng l nh : CODE my_mc.createEmptyMovieClip("tên c a new mc", level c a nó) Ví d : CODE this.createEmptyMovieClip("myMovieClip",1); myMoveClip.lineStyle(0,0x000000,100); myMoveClip.moveTo(100,100); myMovieClip.lineTo(200,200); Như v y b n ã có 1 mc m i tên là myMovieClip, level 1, có ch a các hình v trên. N u b n mu n vi t nhanh hơn thì có th vi t l i như sau: CODE this.createEmptyMovieClip("myMovieClip",1); with(mymovieClip){ lineStyle(0,0x000000,100); moveTo(100,100); lineTo(200,200); } L nh createEmptyMovieClip này còn có r t nhi u tác d ng khác như ta có th attach thêm movie vào ó hay là sao chép (duplicateMovieClip) Rùi bi gi b n hãy th t o 1 mc m i i nào Có 1 bài hư ng d n v bông tuy t khá p trong cu n sách, tuy nhiên code ư c chia nh thành các function khá dài dòng và m t công. trong khi trong di n àn c a chúng ta có nhi u o n code v làm tuy t hay hơn r t nhi u: bài th tr i làm tuy t c a DS trong box hư ng d n th c hành. c b êt h p v i ch này là bài dùng 100% b ng AS c a Raider (tìm trong m c l c), trong ó có o n code r t hay. B i v y cbt s ko d ch v o n code trong sách này n a. bi t thêm chi ti t xin xem file fla 24snowflakes.fla 5.Textfield ây là ph n cu i cùng, chúng ta s h c cách t o 1 text field và sau ó là làm 1 effect flying words. T o Text t o 1 text chúng ta c n t o 1 ô text (text field) v i l nh : CODE createTextField("text_name", level , v trí _x, vi trí _y, chi u r ng,chi u dài); Sau ó là text hi n lên trong text field ó: CODE text_name.text = "N i dung text"; Ví d o n code sau, mình phân tích trong ó luon cho nhanh: CODE //t o 1 ô ch tên my..., level 0, _x=0, _y=170, width=550, height=60 createTextField("myTextField",0,0,170,550,60); //text myTextField.text = "Welcome to VNFX"; // giá tr true là s d ng font chúng ta add trong thư vi n, false là ta s d ng font m c nh myTextField.embedFonts = true; //m c nh các tính ch t c a text myTextFormat = new TextFormat(); //lo i ch , c , màu, v trí myTextFormat.font = "Arial"; myTextFormat.size = 48; myTextFormat.color = 0x330000; myTextFormat.align = "center"; //liên k t nh ng tính ch t này v i ô text c a chúng ta myTextField.setTextFormat(myTextFormat); Chú ý khi s d ng embedFont ta c n ph i ch n 1 font trong thư vi n click vào góc ph i trên cùng c a thư vi n, ch n font mà b n mu n, sau ó click chu t ph i, linkage, export, IDname N u b n mu n t o 1 Input text thì c n ph i cho type c a textField là input, sau ó có th set thêm các variable máy có th nh n info t user Còn r t nhi u các tính ch t trong textField và textFormat class, các b n nên help trang trí cho textField c a mình c thêm Lý thuy t ch có v y, nào bây gi chúng ta s làm effect flying words CBT ko dám nh n xét nhi u v o n code và cách làm trong cu n sách này, tuy nhiên nó ư c chia nh thành các function gây r c r i, dài dòng cho ngư i c, l i còn ph i t o thêm mc trên stage, có ch h n ch n a... Thôi thì c ưa ra v y CODE function createText(n,text) { // create a new movie clip this.createEmptyMovieClip("text"+n,n); mc = this["text"+n]; // set the text format myFormat = new TextFormat(); myFormat.font = "Arial"; myFormat.color = 0x000000; myFormat.size = 24; myFormat.align = "center"; // create a new text field mc.createTextField("myTextField",1,-100,-20,200,40); mc.myTextField.text = text.toUpperCase(); mc.myTextField.embedFonts = true; mc.myTextField.setTextFormat(myFormat); // return reference to this movie clip return(mc); } function createAllText(textList) { // loop through array of text for(var i=0;i 300) { mc._visible = false; // set scale of movie clip to scale when it is a positive number } else if (mc.scale > 0) { mc._xscale = mc.scale; mc._yscale = mc.scale; } } } init(); stop(); Sau ó b n t o 1 mc trên stage và nhét o n code sau vào: CODE onClipEvent(enterFrame) { _parent.moveText(); } Cu i cùng vào thư vi n, trong menu c a thư vi n ta ch n font ruì linkage, rùi export v i tên Arial. effect này ko có gì khác là ta t o 1 array ch a các ô text, sau ó các text hi n ra t t và d n d n phóng to lên, n 1 kích thư c nào ó thì bi n m t. các text hi n ra t t ta ch c n m c nh scale ban u c a text là ko, sau ó dùng thêm 1 var n a. D n d n phóng to lên thì ta thay i scale thôi. Th y o n code trên dài dòng quá nên cbt vi t l i cho nó ơn gi n b t như sau CODE function a(){ wordArr=new Array("vnfx","flash","actionscript"); //ta t o 3 mc ch a 3 text field for(var n=0;n 300) { removeMovieClip(this); } else if (this.scale > 0) { this._xscale=this._yscale = this.scale; } } } } a(); //cho l p l i sau 5 s setInterval(a, 5000); K t thúc r i có th c m c ki n cáo gì các b n c góp ý ha
Related docs
21163753-2006.11.08.10.59.40.01
Views: 0  |  Downloads: 0
21165035-multimedia_3
Views: 2  |  Downloads: 0
EF-530 SUPER NA-iTTL
Views: 0  |  Downloads: 0
premium docs
Other docs by xuanduoc84
2.Learning[1].Macromedia.Flashmx.2004
Views: 0  |  Downloads: 0