• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
24 gio hoc_flash_2267_89039819_7063-1330520798
 

24 gio hoc_flash_2267_89039819_7063-1330520798

on

  • 384 views

 

Statistics

Views

Total Views
384
Views on SlideShare
384
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    24 gio hoc_flash_2267_89039819_7063-1330520798 24 gio hoc_flash_2267_89039819_7063-1330520798 Document Transcript

    • Gi th 01: Làm quen v i AS, Your First Look at ASAS 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 ngkhác như Javascript, C++ v.v. nhưng b n không c n bi t các ngôn ng khác h cAS (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 icá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ư thnà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 tnhư 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 úngnh ng gì mình vi t (ch có mình vi t sai ch computer không làm sai ). Ph n nhi uthì 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 nhcho 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 ư cvi 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 ASAS rât gi ng ngôn ng C++, Java, javascript .v.v và ư c d a trên tiêu chu n doECMA (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ênECMAScript.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 nnhư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 iFlash 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 trongmovie. . Sang t i Flash MX thì AS ã tr thành ngôn ng l p trình toàn di n v i hơn300 câu l nh, hàm .v.vNh n biêt ASAS ơ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ôngd 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 ngcomputer hay ti ng vi t cho l m) và các phép tính và d u câu. Ví d sau:ActionScripton (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ư ngh 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 nbi u???) và timeline s có các frame (khung) b t u t s 1. Thông thư ng thì Flashs 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 hayl 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ùngb 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ìnhc 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 iAS 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 iAS ư 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ó làm ra nh ng s n ph m tuy t v i mà không ai có.Vi t AS âuCâ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 ã cqua 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ư ngd n cơ b n cho ngư i chưa bao gi dùng Flash.Vi t AS time lineAS có th vi t vào key frame b t c timeline nào. làm như v y, b n ch n keyframe trong timeline trư c r i b n m Action Panel ra (có th nh n F9) viêt hayxem AS ã ư c vi t ó. Mình khuyên b n nên dùng Action Panel dư i d ngExpert 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à Flashchơi t i key frame ó. Ví d như l nh AS stop() ư c t key frame 5 thì Flashchơ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 tvào time lineM 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útCá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), movieclips( 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 ASvà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 ó mAction panel và vi t vào ó như ta vi t vào key frame.AS vi t trên nút ch ho t ng khi chu t ho c bàn phím tác ng lên nút mà thôiVi t AS MCMC 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 timelinehay các timeline ngoài movieBài t p
    • 1. T o m t movie m i2. t o 3 key frames3. Dung Flash v m i hình khác nhau cho m i frame4. 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 a7. 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ôngtrong vi c vi t AS : Gi th 02: S d ng Action panel, Using the Script Editing WindowN u dân ho coi Timeline là nhà thì dân l p trình v i AS coi Action Panel là nơicư 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 quantr ng là b n có th s d ng quen thu c Action PanelFlash MX s d ng các panel giúp b n có th l y các thông tin v movie b n anglà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 nmu 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ũngcó 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ácpanel ch gi l i 2 cái chính trên màn hình, mình kéo cái action panel và propertypanel qua m t bên monitor, còn cái bên kia cho cái stage, n u c n m panel nàothì 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). Khim i ch y máy l n u thì Action panel ư c set dư i d ng bình thư ng. d ng bìnhthư 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 menubê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 tAS 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ôngbao 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 sh c ư c mau và nh lâu hơnS d ng Action panel v i expert mode thì b n có nhi u t do hơn, nhưng t do ngnghĩ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 nsang 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ímt t). B n có th i t Normal mode sang expert mode b t c lúc nào, nhưng ingư 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 actionpanel) và trong ó có nhi u l nh r t t t cho b n khi b n dùng Action panel, nh t là iv 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 ab 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 "CheckSyntax" 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 theolà "Auto Format" và "Auto Format Options" giúp cho b n trình bày script c a b n chod 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 nd c code hơn b ng cách vào Edit > Preferences > ActionScript Editor. Các ph ncò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 filevà 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ư iexpert 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 ActionPanel. 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âul 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 Actionpanel ư 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 expertmode1. T o m t movie m i2. Ch n key frame u tiên (frame s 1) c a layer 1 (mình không d ch ch layer = l pvì 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 panel4. Chuy n sang expert mode (dùng phím t t hày vào trong pop-up menu c a Actionpanel i)5. Vào ch vi t AS6. Vi t o n code sau:ActionScripttrace ("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 programL 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 uki 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 chcó 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 nThư 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 sbàn v nh ng khái ni m l p trình và làm sao áp d ng nó trong FlashCách suy nghĩ c a computerTh 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 nhm 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 nhsai 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àmnh 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 nhAS 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 acomputer, 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êntuy 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ínhL 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 tgotoAndPlay(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ácphép tính và cho ra (return) m t k t qu . Ví d hàm random() s cho ra m t con sng u nhiên nào ó, hay hàm sqrt() s cho ra giá tr bình phương c a 1 s mà hàmnh 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 sdùng t parameter thay vì thông s ), và nh ng thông s ó giúp cho hàm và l nh ư cc th hơn. Ví d gotoAndPlay(5) thì 5 là thông s , n u như không có thông s nàythì 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 sBi 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 vm 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 nch 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 thihà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 ral nh cho Flash ngưng ngay sau khi thi hành xong l nh l n th 10. Nhưng cũng có lúcb 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 igian 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 1ch 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 tc 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ùngtrong bi n s thì b n nên t tên bi n s ó là userName (mình nghĩ t tên ti ng Anhd 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ư ngMovieClip)Khi vi t AS, b n c n lưu ý vi t làm sao cho d hi u và d c. Và các l p trình viênquy ư 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 t tên cho bi n s , và luôn b t âu tên b ng ch cái.Có nhi u lo i bi n s lưu tr nhi u lo i thông tin, và ngay m i lo i thông tin cũngcó 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 chochu 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 tc các chu i sau ây u h p l : "ablsdfjksl", "a", " ", "". Khi vi t m t chu i thì c ndù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 trongFlash 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 ns . Nhưng v i ActionScript 1 (trong FlashMX) thì b n không c n làm vi c này. Ví dbi n s userName lúc u ch a 1 chu i, nhưng sau ó l i ch a 1 s nguyên thì cũngv 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 c p t i vàonh ng bài sau. i u ki nTrong 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ì chothí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 trongFlash 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 thomã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á trch 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í dnhư 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 13thì chơi o n phim B, và nh ng ai dư i 13 thì chơi o n phim C.Vòng l pCon ngư i làm ra computer vì lư i không mu n làm nhi u, mà bán cái chocomputer. 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òngl 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 nmu 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 t0, 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 ngl i. Sau ây minh ho c a vòng l p này:1. M t s l nh tr ơc vòng l p2. B t u vòng l p, set bi n s counter = 03. Làm m t s l nh trong vòng l p4. Tăng bi n s counter +=15. N u bi n s counter nh hơn 9, tr l i bư c th 36. 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 ptrì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 nhtrong 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ácl 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 pLàm nh ng i u không tư ngL 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 ntrong 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ànhm 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 nnà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 nph 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 muagà 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 nhb 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 chthì 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 nmua gà ơn gi n v y mà có th t n c ngày tr i lên chương trìnhVi 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ó thlàm úng theo như ý b n trong m i tình hu ng. Các chương trình có bug không ph ivì 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ànhnhi u v n nh cho t i khi không còn nh hơn n a, và sau ó xây d ng chươngtrì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 nhB (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 icú 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ôitrư 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ântí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 scriptc 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 docon ngư i làm ra mà không có bug c . Vì v y b n ng c g ng viêt code sao chotuy 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 tkho mà bi t bug âu di t. Flash có kèm theo vài công c giúp b n debug d dànghơ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 FlashKhi 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ênchú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.ActionScripton (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àonú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 chod 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àotrong 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á trb ng 7 cho nó. tương t hàng k ti p l p ra var tên là myOtherVariable và cho giá trc 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áclo 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 nb 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 tnhư 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úcb 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 myOtherVariableV 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 uFlash compile movie cho b n và phát hi n ra l i thì Flash s vi t ra các outputwindow này. Trong khi ch y th movie, thì l nh trace() m i có th vi t các thông tinra output window. Output window r t quan tr ng trong vi t "di t b ", dùng nó chungv 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 itư ng .v.vTrong 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 chvi t thông tin ra output window, như o n code trên.
    • Th c hành: vi t thông tin ra output windownCá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 svi t m t o n code ng n g i thôi tin ra output window nhe.1. T o m t file m i2. Ch n frame u tiên c a movie, m Action panel. Ch nh kích thư c cho actionpanel l n vi t, và nh dùng expert mode3. 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ì output window? (N u output window c a b n chưa m thì hãy nh nF2)Gi ng như action panel, output window có 1 cái pop-up menu nho nh trên gócph 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 tb ", 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á trcho 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:ActionScriptvar1= 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: helloworld 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ó thtruy c p giá tr c a nó b t c nơi nào trong movie. T o global variable không òih 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 tFlash movie nh trong Flash movie l n. Các hình nh, script trong m t movie cliplà 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ó trtruy c p trong cùng m t o n code, hay trong cùng m t timeline. Khi dùng localvariable thì khi ra kh i timeline hay o n code ó thì Flash s xoá local variable rakh i b nh . Mu n t o local variable thì dùng t khoá var trư c tên c a localvariable, ví d : var myLocal = "This is local"; B n ch c n dùng t khoá var 1 l nthô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 ncode:ActionScriptvar myLocal = 9;myLocal = 11;trace(myLocal);Phép so sánh và các phép tínhSo 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 ncode sau xét coi giá tr c a a có b ng 7 không, và in k t qu ra output window. Và khitest o n code sau, b n s th y true output windowActionScriptvar a = 7;trace(a == 7);N u b n dùng l n = v i == thì s b l i runtime ch Flash s không có th tìm ư cl i này cho b n.B n có th dùng == so sánh 2 chu i m u t :ActionScriptvar 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ácnhau.N u b n mu n th coi 2 giá tr có khác nhau không thì dùng ky hi u !=ActionScriptvar 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à <ActionScriptvar 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 tnh 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 nhauthì dùng ký hi u >= và <=ActionScriptvar 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 ncó 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àmtă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:ActionScriptvar 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á trc 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:ActionScriptvar 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ănggiá 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 tt 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 nTrong 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 avariable a v i 7, n u úng thì Flash s chơi frame 10ActionScriptif (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 sosánh gi a ngo c ơn (). T t c các code ư c kích ho t n u i u ki n ư c thomã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 :ActionScriptif (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ùngso sánh a h p (compound comparision). Trong i u ki n c a Flash ta có th dùngnhi 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 inh hơn 15 thì ra l nh cho Flash chơi frame 10.ActionScriptif ((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 2phé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ư chc n tho mãn 1 i u ki n trong 2 phép so sánh thôi.ActionScriptif ((a > 10) or (a < 15)) { gotoAndPlay(10);}Vòng l pCú 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 loopvà do-while loopfor 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:ActionScriptfor(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 afor 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 uki n b t u v i vi c t o local variable cho for loop var i=0. ph n này for loop chth 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 loopi<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 cvò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 ib t u. 3 ph n này u ư c b vào trong ngo c ơn (). Còn nh ng code th c hi ntrong 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 loopT i bư c th 5 thì giá tr c a i s b ng 10while loop v i t khoá while có cú pháp nhìn tương t như sau:ActionScriptwhile (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áccode 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àngr 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 codetrê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 ngl 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 iki 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ì chphá 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 tph 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àmCho 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 trnê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 ovà 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 tfunction ơn gi n:ActionScriptfunction 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ư ita 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 1hay 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 gichú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 amyFunction. 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 icù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 codedùng chung 1 fuction và cho 3 k t qu khác nhauActionScript
    • 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 ngnên chúng ta ch c n thay i code trong myFunction thì t t c các k t q a có ư ct g i function này cũng thay i theo luôn.Dot SyntaxM 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 chsao bây gi ) Dot syntax là phương pháp ư c dùng trong l p trình theo hư ng itư 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ư ngtoá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ư ngmà fucntion này tr c thu c, ó là Math, theo sau ó là d u ch m (dot), và r i t i tênc a function ó là sqrt. Cách vi t như sau:ActionScriptvar a = Math.sqrt(4);M t cách dùng dot syntax khác là truy c p c tính hay variable c a m t itư ng, như là movie clip.ActionScriptvar a = myClip._x;var a = myClip.myVariable;Chúng ta s c p n i tư ng Math và MovieClip trong các bài t i, còn bây githì quan tr ng là b n n m ư c khái ni m v dot syntax.Chú gi iM 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à dhi 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 nkhó 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 ASthì 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 bb += 2;DebuggingThư 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 nn 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ó 3cách di t b h u hi n là: phân tích, vi t message ra output window và dùng ASdebugger.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 ndi 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 debuggercó s n trong Flash. Debugger window cho phép b n có th coi h t t t c moi thànhph 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 nmu 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 movieS 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:ActionScriptstop();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ácanimation 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 nhplay.. ta s bàn n nó sau.Ví dT i frame 1, b n hãy th m t text box và vi t vào ó Ch AT i frame 2, b n hãy th m t text box và vi t vào ó Ch BT i frame 3, b n hãy th m t text box và vi t vào ó Ch CBâ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 kiaM 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ó thnh y t frame này n frame mà b n mu n. B n có th sư d ng s th t c a framehay là tên c a frameActionScriptgotoAndPlay(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 nhgotoAndPlay 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ênframe.ActionScriptgotoAndPlay("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 ng gi ng gotoAndStop , ó là nextFrameand prevFrame hi u rõ hơn v các câu l nh này, ta s i ti p ph n sau...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ìnhT o m t buttonCó nhi u cách t o nút. M t trong nhưng cách ó là ch n Insert, New Symbol tMenu. 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 thtimeline 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 abutton.
    • 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à kocó gì trong 3 frame sau, tr ng thái Over và Down c a button s gi ng như tr ng tháic 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 quabutton, 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 nsà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 thnó 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 Actionb ng cách b m chu t ph i lên button và ch n Action t menu xu t hi n.Hãy Ch c ch n r ng c a s Action ã ư c t ch Expert. B n có th ki m trabă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 t nó trong c a s mã vàsau ó ki m tra movie xem nó h at ng th nào.ActionScripton (release) { trace("You clicked the button!")}on : là m t keyword, ư c g i ra x lí m t s ki nRelease : Là m t s ki n, khi ngư i s d ng click vào button và nh chu t ra. o nmã 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 Releasech 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 ith 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 PowerPoint.. Khi chúng ta b m chu t, các slide s chuy n sang slide khác.1. M Flash, ch n New2. 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 frame3. 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
    • Frame 4 c a layer 2, và b m F6. i u này m b o cho button c a b n s xu t hi ntrong t t c các Frame c a Layer 1.Bây gi copy o n mã sau vào button c a b n, chú ý nh là copy vào action c abutton, ch ko ph i vào b t kì frame nàoActionScripton (release) { nextFrame();}Cu i cùng ch n Frame 1 Layer 1 action và chèn o n code sauActionScriptstop();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 trên, các b nhay down load file FLA xem .. easy Gi th 06: i u khi n movie clip, Controlling Movie Clips6th Hour i u khi n movie clipB ns h c1- ra l nh cho movie clip2-T o playback cho animation3-TÌm hi u ích(target) c a movie clip4-T p vi t code cho movie clip5-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ưngb 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à koc n Actioncript. i u khi n ư c movie, b n ph i t tên cho movie clip. Chú ý r ng m t moviesclip có 2 tên, m t tên s d ng cho timeline . M t tên s d ng cho actioncript. 2 tênnà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 animationTh 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 movietên này ư c s d ng cho Action script , vd : gearsvà 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í dActionScriptgears.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 nko 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 mhơn chút.2)Animation Playback ControllerHãy down load source code t trên ph n download và xem. V cơ b n, chúng ta làmcá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 codeActionScriptgears.stop();-T o các button Advance, Previous, Play, Stop, and Rewind-Code cho các button l n lư t làAdvanceActionScripton (release) { gears.nextFrame();}PreviousActionScripton (release) { gears.prevFrame();}PlayActionScripton (release) { gears.play();}StopActionScripton (release) {
    • gears.stop();}RewindActionScripton (release) { gears.gotoAndStop (1);}3) Target m t movieLevel cơ b n u tiên c a Flash là time line chính(Level 0). N u b n mu n ra l nhcho time line này, b n dùng code sau_root.gotoAndStop();th m chí n u b n t code time line chính, b n ko c n _root. Ch c ngotoAndStop();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 nhgears.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ànhs 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 nt 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 clipsActionScriptvar 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ũngx 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 ythis 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 trên, v y v cơ b n movie clip script cũng gi ng button, ó làActionScriptonClipEvent (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Ó chx 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 pt c ch y. S kiên enterFrame x y ra liên t c bên trong movie clip m i khi n m tframe 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 tthúc.ActionScriptonClipEvent (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 ns th yActionScriptThis 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 framedò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 ClipsM t movie clip (MC) bao gi cũng có các thu c tính, cho phép b n xác nh v trí,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êntrá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ó nghialà 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 ub 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 sd ng chúng trên movie clip, thì nó là thu c tính c a movie clip. N u xmous y mouselà 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 xmouseymouse 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 n movie chính, b n nên dùng cách_root._xmouse và _root._ymouse ây là m t o n code ví duCODEonClipEvent (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 cgó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 mousekhô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àic 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 iluôn lên k ho c c n th n trư c khi dùng xmouse, y mouse3) Làm movie quayM t thu c tính khac ó là thu c tính _rotationThu c tính rotation ch p nh n giá tr là góc . M t vòng tròn chia ra 360 , mi ngiá tr c thu c tính rotation là -180 và 180. B n có th s d ng giá tr integer ho cfloating point.Giá tr c a _rotation luôn luôn trong vòng -180 và 180, ví d 179, ho c -179. Nhưngn 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ácbi u toán ++, += thay i giá tr . Hãy xem ví d sauCODEmyClip._rotation = 90;myClip._rotation++;_root["myClip"]._rotation = 45;this._rotation += 0.5;
    • 4) Co giãn àn h i m t MC:B n có th làm co giãn, thay i chi u dài chi u r ng c a movie clipScale thu c tínhTHu c tính 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 nhhơ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 baonhiê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 lcho movie clip.CODEonClipEvent (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 ur 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, _heightS khác nhau gi a scale và width,height í scale s d ng giá tr ph n trăm. Còn widthheight s d ng pixel . Movie có th có giá tr sau: width 75, height 45, nhưng scalecho 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ênonClipEvent(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) VisibilityM 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á trboolean true , false.CODEmyClip._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 100CODEmyClip._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 tc 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, 50và 100 (t trái sang) Gi th 08: ch n, kéo th movie clip, Moving and Changing Movie Clips1. 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àms ki n ho t ng. Tuy nhiên ây ta s h c cách click vào ch n l a m t itư 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 tbutton 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ànhì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ênlà offbutton. Button này có mã làCODEon (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úttươ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ùngnh n ra khi nó ư c ch n.CODEon (release) { this.gotoAndStop(1);}cu i cùng t vào frame 1CODEstop();Bây gi hãy ch y xem.Phương th c hitTestCó cách khác làm movie có th s lý mouse click mà không c n button, ó là sd ng s ki n onClipEvent(mouseDown) ho c là onClipEvent(mouseUp)ví dCODEonClipEvent (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 cmovie 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 xác nh.S a o n mã thành như sauCODEonClipEvent (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 tamu 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 MCt 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 1kh nó frame th nh t, giá tr 2 khi nó frame th 2.CODEonClipEvent (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 nmu n dùng c các trang thái khác như Over,up , down.. Cách th hai thì không c nnhi u bi u tư ng trong thư vi n.Enjoy..2) Kéo m t movie clipBâ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 ngnhư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 nmovie c a b n i theo chu t, còn stopDrag khi b n mu n movie c a b n không theochu t n a. ây là o n code cơ b n :CODEonClipEvent (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 hitTestnh n bi t movie nào ang ư c click. Và sau ó câu l nh startDrag và stopDrag ư cs d ng. Khi chu t ư c b m xu ng, câu l nh startDrag th c thi. Và ngư c l i, khichu 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 tcá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 tmovie ư 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 scòn l i là left, top, right, bottom. N u b n t chúng, movie c a b n ch có th ư ckéo theo các ràng bu c ó.Kéo nâng caoBây gi ta h c cách kéo movie mà ko dùng câu l nh startDrag và stopDrag. V y làmth 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). Ski 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 yCODEonClipEvent (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)) { // dont 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 MCbên trái. ây là MC làm theo o n code trên. Chú ý xem trung tâm movie ơc khóav 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ànhì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 clà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 nhstartDrag . 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 mchu t, chúng ta s l y offset, ây là kho ng cách t chu t cho n trung tâm c amovie. Sau ó, thay th b ng vi c gán v trí chu t n trung tâm movie, ta se thêmvà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ùngké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ư idù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)CODEonClipEvent (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)) { // dont follow the mouse any longer dragging = false; }}Hãy xem movie th y khác bi t gi a 2 o n code.3) Kéo và thBâ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 ZoneCh c năng hitTest có th ư c s d ng xác nh khi MC b è lên nhau. Trong o n mã sau, chúgn ta s d ng l nh startDrag o n mã kéo th ơn gi n i, nh óta có th t p trung vào các ch c năng m i.Trong o n mã sau, ch c năng hitTest ư c s d ng so sánh MC ư c kéo v i m tmovie khác tên là dragZone trên m t lêvl(root level)CODEonClipEvent (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à _yb 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ư ngh p này, nó ư c so sánh v i _parent.dropZone. N u có 2 movie è lên nhau, hitTesttr 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 tc 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 ngmovie clip như v trí x,y, r i sau ó s d ng dropzone như m t movie clip th nh t.CODEif (_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 tc 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 chohitTest, 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 codeCODEif (_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 adropzone. Các movie khác s d ng o n code ph c t p hitTest và chúng có trung tâmnà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 userCho 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ôngtin vào Flash.Làm sao phát hi n khi ngư i dùng b m phímCó 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ùngl 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 khimà ngư i dùng nh n phím "a".ActionScripton (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ânbi t d ng ch (case-sensitive) nên n u b n ch code cho nó nh n phím "a" thì nó skhông th nh n ư c phím "A". May mà chúng ta có th dùng bao nhi u b x lý dki 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 (spacebar) ... 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ímmũi tên trái (left arrow key) thì dùng o n code sau:ActionScripton (keyPress "<Left>") { trace("Left pressed.");}Và sau ây là các code dành cho các phím c bi t: • <Right> • <Left> • <End> • <PageUp>
    • • <Insert> • <PageDown> • <Down> • <Up> • <Delete> • <Tab> • <Backspace> • <Escape> • <Home> • <Enter> • <Space>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.ActionScripton (keyPress "b", release) { trace("b pressed or button clicked.");}Các ví d trên u có trong movie m u 09keybutton.fla2. Phát hi n qua i tư ng phím (key object)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 ikhô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ácnhâ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âttay lên.Cho nh ng trư ng h p như v y, b n ph i dùng i tư ng Key. i tư ng Key là t ph 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 haykhô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:ActionScriptif (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êntrái. v y khi mũi tên trái b nh n thì output window s cho ra hàng ch "The left arrowis 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.UPN 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 idù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"ActionScriptif (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.fla3. Key ListenerKey listener ư c dùng quan sát bàn phím và thông báo cho Flash khi phím ư cnh n. cách th 2 chúng ta dùng i tư ng Key ki m tra coi phím có b nh n haykhô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ư idùng nh n phím quá nhanh, trư c khi onClipEvent(enterFrame) k p kích ho t itư 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 ul 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áinh 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ànphí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àychú ý vào s ki n c a bàn phím. ây là code cho t o listenerActionScriptKey.addListener(_root);
    • L nh Key.addlistner t o listener cho i tư ng trong thông s là _root. Và i tư ngnày s ư c thông báo v s ki n c a bàn phím.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 tcode 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 nnà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ímv a ư c nh n, ví d A = 65, B = 66 .v.vB 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ùngString.fromCharCode() cho ra k t qu b n mu n tìm. Thay dòngtrace(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 amovie clip theo d i s ki n keyDown, keyUp, nhưng cách này không còn ư cdùng trong Flash MX n a, vì v y b n ch có th cách này trong các Flash trư c MXthôi.Bài T p: Dùng phím di chuy n movie clip1. T o m t file Flash m i2. T o m t movie clip ơn gi n3. G n o n code này vào movie clip óActionScriptonClipEvent(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ũitên. B n hãy th movie coi sao4. 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ư ckhi 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úngta thay i t c di chuy n c a movie clip, ch c n thay i giá tr c a bi n speedNh p văn b nTrong 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 khunginput 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ênbox 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 (stringChú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à myVariablecó 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 ncũ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 tph 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 tb 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"ActionScriptvar 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 chcá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 qutư ng t như cách 1ActionScriptvar myString = "Hello World.";trace(myString.charAt(6));Các hàm c a i tư ng StringSau ây là m t s hàm tiêu bi u c a i tư ng String.1. indexOf: dùng tìm s th t c a m t ký t hay m t chu i nh trong i tư ngString. 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 imình mu n tìm, start là s th t mình b t u tìm trong i tư ng String. Ví d :ActionScriptvar myString = "Hello World.";//output: 6trace(myString.indexOf("W",0));//output: 2trace(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ư clên t iký t u tiên.ActionScriptvar myString = "Hello World.";//output: 2trace(myString.indexOf("l",0));//output: 9trace(myString.lastIndexOf("l"));
    • 3. toUpperCase/toLowerCase: dùng i chu i t vi t thư ng sang vi t hoa vàngư c l iActionScriptvar myString = "Hello World.";//output: HELLO WORLDtrace(myString.toUpperCase());//output: hello worldtrace(myString.toLowerCase());4. length: là c tính c a Sring dùng tính chi u dài c a chu i.ActionScriptvar myString = "Hello World.";//output: 12trace(myString.length);Bài t p:1. m file 09form-noscripts.fla2. ki m tra tên c a variable c a m i input text field qua property panel3. Thêm o n mã sau vào nút CLEARActionScripton (release) { clearForm();}4. thêm o n mã sau vào nút SUBMITActionScripton (release) { submitForm();}5. Thêm o n code sau vào frame u tiên c a movieActionScriptfunction clearForm() { firstName = ""; middleInitial = ""; lastName = ""; address = ""; city = ""; state = ""; zip = ""; phone = ""; comments = "";
    • }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 TextDynamic TextB 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 dungvă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ó ththay i b t c lúc nào nên m i g i là dynamic textTrư 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 variableb ng cách vi t tên c a variable ó vào trong khung Var trong propery panel. Ví dnhư b n t variable myText vào trong khung Var thì khi b n thay i giá tr c amyText thì văn b n trong dynamic text field cũng thay i gi ng như giá tr c a bi nmyText. 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ănb 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ó thdùng th HTML nh d ng văn b n c a b n. Ví d o n code này s t o văn b nsau:CODEmyText = "This text is <B>bold</B>.<BR>";myText += "This text is <I>italic</I>.<BR>";myText += "This text is <U>underlined</U>.<BR>";myText += "This text is <FONT COLOR=#FF0000>red</FONT>.<BR>";myText += "This text is <FONT FACE=Arial Black>Arial Black</FONT>.<BR>";
    • myText += "This text is <FONT SIZE=24>large</FONT>.<BR>";myText += "This text is <A HREF=link.html>linked</A>.<BR>";QUOTEThis text is <B>bold</B>.<br>This text is <I>italic</I>.<br>This text is <U>underlined</U>.<br>This text is <FONT COLOR=#FF0000>red</FONT>.<br>This text is <FONT FACE=Arial Black>Arial Black</FONT>.<br>This text is <FONT SIZE=24>large</FONT>.<br>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ư iSau ây là nh ng th HTML có th dùng trong Flash MX • <B></B>: vi t m • <I></I>: vi t nghiêng • <U></U>: g ch dư i • <FONT FACE=Arial Black></FONT>: ki u ch • <FONT SIZE=24></FONT>: c ch • <FONT COLOR=#XXXXXX></FONT>: màu ch • <A HREF=></A>: link • <P></P>: an văn • <BR>: Xu ng hàng i Tư ng TextFormatCòn m t cách khác nh d ng cho văn b n là dùng i tư ng TextFormat. làm ư 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:CODEmyFormat = 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 tkhi b n t o nó ra thì b n có th dùng nó b t c ch nào trong movieB n có th coi các an code trên trong file m u: 10formattext.flaVariable ngoài FlashB n có th l y bi n t ngoài trang HTML vào trong Flash thay i n i dung c aFlash 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 Flashcho 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 nch c n thêm vài ch vào sau cái tên c a movie trong ph n <object> và <embed>trong HTML.. o n mã HTML sau ây nh p giá tr c a bi n txtName vào trong FlashHTML<PARAM NAME=movie VALUE="10banner.swf?txtName=Dominico Savio!">và trong th <embed> thì b n thêm ph n variable và giá tr vào sau tên fileHTMLsrc="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áisource 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ày10banner.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 pkhi 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àoth HTML. B n ch c n dùng l nh loadVariables() làm ư c i u này. Ví d :CODEloadVariables("10external.txt", _root);B n có th coi thêm v cách dùng loadVariables() bên box ActionScript[Bài T pM 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 osource fla: 10ticker.fla và test nó có khái ni m thêm v "news ticker"1. T o movie m i2. T o dynamic text field, v i cao ch v a 1 hàng, và dài b ng chi u ngang c astage, 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à text4. Ch n font, nên dùng ki u ch tương t như Courier New, sao cho b ngang c am i chư b ng nhau5. Con text field r i nh n F8 i thành Movie Clip, và t cho nó 1 cái tên như thnào tuỳ b n6. Sau ó thì g n o n script sau vào movieCODEonClipEvent(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<lineLength;i++) { tickerText = " " + tickerText; }}onClipEvent(enterFrame) { // phát b n tin text = tickerText.substr(firstChar,lineLength); // thêm ch cái kê ti p firstChar++; // phát l i b n tin sau m i l n k t thúc if (firstChar > 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 firstCharch a giá tr c a ch cái u tiên s th y trong news ticker, và lineLenght là s ch cáicó 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 slý d ki n onLoadTrong onEnterFrame, Flash s l y 50 ch cái u tiên b vào bi n text ( trongdynamic text field) cho nó hi n th lên màn hình. Sau ó di chuy n sang ch cáith 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ìphát l i t u.6. B n có th thay i giá tr c a lineLenght và giá tr c a b n văn trong tickerTexthi u hơn v 2 bi n này7. 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 nheHappy 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 snghiên c u v nh ng con s . B n s ph i ng v i nh ng con s trong ActionScript 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 sNh ng phép toán ơn gi nChú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 chi 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 ơngi 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 aCODEa = a + 7;a += 7;Nh ng phép so sánhNh ng phép toán so sánh như == so sánh hai s xem có b ng nhau không, > (l nhơn), < (nh hơn), <= (nh hơn ho c b ng), >= (l n hơn ho c b ng). Trong ActionScript 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 nhơ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 vgiá 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é:CODEtrace(Math.abs(-7));Math.roundN 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 ngs 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àmMath.round. Th nhé:CODEtrace(Math.round(7.2));Math.ceil, Math.floorHai 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é:CODEtrace(Math.ceil(7.2));trace(Math.floor(8.3));Math.min, Math.maxCá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 5Math.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 thhai là lũy th a. Ví d b n mu n l y 4 lu th a 3 thì vi t th này
    • CODEMath.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àmMath.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 ngCODEMath.pow(4, .5);ho cMath.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ácNh 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ưngcò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 trongvi 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àmvi 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 .Hãy tư ng tư ng tâm c a vòng tròn to 0,0; bán kính c a ư ng tròn b ng 1. Vì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,0Bâ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 tb 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 ngthà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àmsin và cosin th c hi n. Ví d như chúng ta t i m “a” là i m b t u c a ư ngth 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 trv giá tr 0. K t qu s tr v to c a i m “a” 1,0V y i m “c” s n m âu trên ư ng tròn? N u du i ư ng tròn ra s có dàib 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 xc 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,yV y thì nó có ích như th nào? Gi s như b n mu n t o m t movieclip bay quanhmà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,150CODEonClipEvent(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 pngư 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ãyxem o n code sau ây, num là m t bi n giá tr text fieldCODE
    • b = num + 1;N 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, ơngi 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 tath 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átr “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 trv 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 us 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ácb n có th s d ng hàm Math.round(parseFloat(“42.9”)). Hàm parseFloat cũng s trv m t m t s nguyên n u tham s truy n vào là m t chu i s nguyên. Ví dparseFloat(“42”) s cho ta s 42. Tr trư ng h p b n mu n tr v m t giá tr snguyê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 ts nhưng thành nhi u d ng h s khác nhau. Hãy xem m t ví d cho d hi u:CODEparseInt(“FF”, 16);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 shexa 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àys 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àmnày sau d u ch m (.). Xem ví d nhé:CODEa = 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 as 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ênT 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 sho 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 ygi 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 tgiá tr t 0.0 n 1.0 nhưng thư ng thì không tr v giá tr b ng 1.0Hãy xem ví d dư i ây, b n s nh n ư c con s ng u nhiên trong c a s OutPutCODE
    • 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ênt 0.0 n 10.0CODEtrace(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 ch không ph i t 0.0 n 10.0, vì th , hãy c ng thêm 1CODEtrace(Math.random() * 10 + 1);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 sd ng hàm Math.floor làm tròn xu ng.CODEtrace(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 tcon 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àys ư 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àys ư 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 unhiê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 unhiê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 tchí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:CODEtrace(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 trongph m vi t 50 n 100 thì saoCODEtrace(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àCODEtrace(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 thv i s nh nh t và s l n nh t thay cho Math.random(). Giá tr nh nh t c a hàmMath.random() là 0, hãy th v i s 0 nhéCODEtrace(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.9999CODEtrace(.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 n nh ng v trí b tkỳCODEonClipEvent(enterFrame) { this._x = Math.random()*550; this._y = Math.random()*400;}Luy n t p: T o m t chương trình máy tính ơn gi nHã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 âyChú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 uch 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 ngs 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 sauCODEon (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à âys 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. ttê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 frameCODE// 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ư idù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áylên thì s m c nh là s 0Bi 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óavà 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 n5, +, 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éptoá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 tthú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ánkhá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 keyPresseds s d ng c u trúc switch thay cho c u trúc if, then, else. C hai cách u ho t ngtươ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 nfunction 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 uv is 0 } 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ùngnh 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ư cfunction 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);
    • 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 oTrong ví d v lư ng giác trong ph n trư c, b n ã bi t cách làm m t movie clipquanh quay m t vòng tròn. Bây gi hãy áp d ng nh ng ki n th c ó làm m tmovie 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 FlashT 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ư cc 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 quanhm 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:CODEonClipEvent(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 tinhv 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òngquay 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 tvò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 ispeed 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 tinhs ư 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ínhlà 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 tinhxa 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 sunCODEonClipEvent(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 amoon, vì sao th ? B i vì moon s quay trư c earth, vì moon n m m t layer trênlayer 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 idùng Action Script nhưng lúc ó b n ph i làm hàng trăm movie clip bông tuy t, m icá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 trơ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 rơi, t c b th i ngang, xoay c abông tuy t.CODEonClipEvent(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;}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 xemsao, 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 tfor(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 movieclip vào trong lúc ang ch y. i m khác bi t là hàm duplicateMovieClip s chèn tm 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 nr 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 ArraysCho 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. iv i nh ng chương trình nh và ơn gi n thì không có gì nói, nhưng n khi b nc 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 ngb 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 id .ActionScript cung c p cho ta hai th lưu nh ng lo i nhi u d li u. M t là CustomObject ( i tư ng), v i Custom Object b n có th nhóm nh ng d li u riêng l l i v inhau. 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 ptrì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ìnhT o Custom ObjectCh 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ênmovie clip. Có bao gi b n c m th y nhàm chán v i nh ng ch x, y hay mu n thayth 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:CODEpos = {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 pd li u b ng cách:CODEtrace(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 ngproperty 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é:CODErecord = 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à itư ng Date. i tư ng ColorCó th dùng ActionScript i màu c a m t movie clip b ng cách s d ng câu l nhsetRGB. ó là cách d nh t nhưng nó s không th c hi n ư c i v i instance c amovie 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 imàu cho movie clip sang màu 0xFF0000 (màu )CODEcircleColor = 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àuc a movie, nhưng nh s d ng hàm toString(16) chuy n thành giá tr hexa.
    • CODEcircleColor = 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 i tư ng colortransform ng v i 8 m c như trong hình dư i ây 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 iThay vì s d ng setRGB thì chúng ta s s d ng setTransform như trong ví d dư i ây:CODEcircleColor = 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 DateM 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 xemnhư 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 om t i tư ng Date m i b ng cách cung c p cho nó 7 thông tin trênCODEmyDate = 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 ib n nh n ư c k t qu này không?CODEMon Apr 29 10:30:15 GMTR t d hi u, úng không nào? Nhưng mà còn m t v n : tháng là Apr trong khichú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ônng 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ì ư cquy nh t 1 n 31 . Nhưng dù sao thì b n cũng ph i làm quen iB 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.CODEmyDate.getYear()B n có th l y gi hi n t i b ng cách ơn gi n là t o m t i tư ng Date r ng .Gi hi n t i s ư c ưa vào i tư ng. Ví d :CODEmyDate = new Date();trace(myDate);Chú ý: Flash s l y gi c a ng h h th ng trong máy b n. Vì th ng h trongmáy tính c a b n ch y sai thì gi l y ra s saiM ng (Array)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ácngô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ìnhph 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 uv i nhau, như là cùng là tên c a movie clip ho c u cùng là v trí c a movie clipT o m ngDư 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:CODEmyArray = [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 ttrong m ng thì s d ng như sau:CODEtrace(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ó 5ph 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()CODEmyArray = 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 ora m t m ng gi ng m ng ví d trên:CODEmyArray = 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 lengthCODEmyArray = [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ì sd ng câu l nh popCODEmyArray = [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 icù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 icù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 utiê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 ysá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:CODEmyArray = [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. istruy 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.CODEmyArray = [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 th2 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 ngb 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 ptheo 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 unh , 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 t17.CODEmyArray = [36,23,63,71,25];myArray.splice(1,2,17);trace(myArray);S p x p trong m ngChú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 tm ng ư c s p x p theo th t s :CODEmyArray = [36,23,63,71,25];myArray.sort();trace(myArray);Còn ví d này s s p x p theo th t ch :CODEmyArray = ["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 :CODEmyArray = ["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 i cácm ng cũ, mà nó s t o ra m t m ng m i.
    • CODEmyArray = [36,23,63,71,25]otherArray = [58,97,16];newArray = myArray.concat(otherArray);trace(newArray);Chuy n i gi a chu i và m ngChú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àyc 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.CODEmyArray = [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 ud 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:CODEmyString = "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 nsang m ng, m i ph n t trong m ng s ch a m t ch . Xem ví d dư i ây nhé:CODEmyString = "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 amà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 ngch c a câu vào trong m ng. Sau ó s khai báo thêm 3 bi n n a. Bi n wordNum slưu m t con s là s th t c a ch s hi n th . Bi n frameDelay s lưu s framem i ch hi n ra. Bi n frameCount s m s frame mà m t ch ã i qua.CODEonClipEvent(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, RolloversT o hình dáng con tr theo ý thíchVi 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, chc 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 trlà 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ìnhbà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 thì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 in 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 itrên t t c các movie clip khác. Chúng ta có th ch n Modify -> Arrage ->Bring ToFront ư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 chekhu 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 snguyên 0, 1, 2… 9999. Vì th chúng ta s s d ng l nhCursor.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áchCODEonClipEvent(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 trCODE
    • 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 movieCODEonClipEvent(unload) { // show the real cursor again Mouse.show(); }- Cu i cùng là vi c ch y th movie c a mìnhLuy 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, vthê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 buttonCODEon (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 qub n làm có gi ng hình này không nhé!RolloversM t k thu t thông d ng hi n th nh ng thông tin dài là s d ng Rollovers ưara nh ng thông tin thay vì s d ng m t button ngư i dùng click vào thì s sangm 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 ivù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 nthô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 làm Rollovers b ng nhi u cáchRollovers s d ng buttonChú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:CODEon (rollOver) { information.gotoAndStop("information 1");}on (rollOut) { information.gotoAndStop("none");}Rollovers s d ng movie clipFlash không có hàm onClipEvent(mouseOver), vì th chúng ta s s d ng m t hàmkhác.Hàm hitTest s cho chúng ta bi t r ng con tr chu t có ang trên movie clip haykhông. Và chúng ta có th làm như sauCODEonClipEvent (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 nti 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 clipinformation v frame none, m t khác thì rollovers khác l i ưa movie clip informationv 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 ucó, 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 thihà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 tmà nó s mang giá tr true ho c false. i v i m i frame, chúng ta s s d ng hàmhitTest ki m tra v trí c a con tr chu t. N u v trí con tr i l p v i over thì sx y ra s thay i. Chúng ta hãy xem o n code sau:CODEonClipEvent (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 frameNhư ã nói trên, có r t nhi u cách làm rollovers. ây, chúng ta s bàn v m tcá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 ngtimeline chính lưu thông tin. Frame u tiên s là frame none, và các frame ti ptheo s ch a các thông tin.Chúng ta hãy xem hình bên dư iVí d trên s d ng button cho các hotspot, và chúng ta hãy lưu ý r ng các button sxu 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 tvà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.CODEon (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 trongcá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 quens d ng nhi u frame thì ây là m t cách t t cho b nLư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 tinNà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 contr và rollovers làm m t chương trình xem nào! Chương trình này s hi n thnh 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 th p thông tin khi ưa tr chu t ngang qua. M i hotspot là m t button, vì th ngư idùng có th click vào di chuy n n m t frame khác xem nh ng thông tin vhà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 2cho 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 thi n hi n th thông tin v n t t v các hành tinh khi ưa tr chu t ngang qua. Movieclip 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 clipsummary- Nào, hãy vi t code nhé!CODEon (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 xem thôngtin v hành tinh, chúng ta l i vi t code cho các buttonCODEon (release) { gotoAndStop("mercury");}Lưu ý r ng chúng ta có hai frame tên mercury, m t frame timeline chính và m ttrong movie clip summary- T o m t movie clip thay th con tr chu t, và vi t code như sauCODEonClipEvent(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ácbutton. Hãy thêm o n code sau vào ph n code c a buttonCODEon (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, ScrollingM c dù scrollbar r t quen thu c trong các ng d ng Mac, Windows, các trình duy tweb… 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 codenhi 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êngh 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 nc 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ũitê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ư tcho 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êncù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éothanh 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 bg 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 icùng s ng v i dòng cu i cùng. Ví d m t textbox có scrollbar hi n th ư c 10 dòngc 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 tch 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ênMũ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 cnă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 chungScrollbar có m t s thu c tính chung mà chúng ta c n ph i xem xét. u tiên, cácthà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 ngcho 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ênxu 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 tcho 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 nkhá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ìnhdư i ây, chúng ta s t tên cho text field là scrollTextSau ó, 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 chotext 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 ngcá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êntrong text field ó có nhi u dòng thì chúng ta không th làm cho text field ch hi nm 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 scrollcho 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òngth 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 scrollThu 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 nBà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ươngtrì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 ctí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:CODEon (press) {
    • scrollText.scroll--;}- Và nh p o n code này cho button i xu ng:CODEon (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àobutton scroll văn b n Gi th 15: Các thành ph n nh p li uCá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ácb 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 sh c cách làm checkbox, radiobutton b ng Action Script. B n cũng s h c ư c cáchlàm sao chuy n t thành ph n này sang thành ph n khác trong form b ng cáchnh n nút TAB, và làm sao h n ch n i dung ngư i dùng nh p vàoCá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 uT o CheckboxTrong 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 uhà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 ntr ng thái Off c a Checkbox, có nghĩa là khi checkbox chưa ư c ch n. M t buttonth 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ư idù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 tframe 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 1dùng movie clip l i ngay ó. Trong m i button ó s có m t o n code g i m t hàmngoài time line c a movie clip có ch a 2 button x lý khi m i nút ư c nh n.CODEon (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 nhstop();CODEstate = 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àmpressButton s ư c g i. Trong ó, s i l i tr ng thái c a state, có nghĩa là lúc ulà false (chưa ch n), sau khi click s thành true ( ã ch n). Ti p theo, hàm pressButtons ki m tra giá tr c a bi n state ưa ngư i dùng n frame thích h p. N u state =true thì s nh y n frame On, còn n u state = false thì s nh y n frame Off.T o RadioButtonVi c t o m t Radiobutton s ph c t p hơn m t chút so v i checkbox. CácRadiobutton 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 sd ng trong nh ng trư ng h p có tính lo i tr , có nghĩa là trong m t nhómRadiobutton thì ch có m t checkbox ư c ch n t i m t th i i m, không có chuy n 2Radiobutton u ư c ch n. N u b n ã ch n m t RadioButton, khi b n ch n quam t Radiobutton khác thì ch n l a cũ s t ng m t i, chuy n qua Radiobuttonm i.Hình dư i ây là m t nhóm RadiobuttonRadioButton 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ó 2frame ch a 2 button bi u hi n 2 tr ng thái c a RadioButton. Frame u tiên ch am 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 aRadioButton 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 loadmovie clip.CODEstop();// ki m tra có ph i là RadioButton u tiên trong nhóm hay khôngif (_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àmturnOn s duy t qua t t c các RadioButton (các movie clip), g i hàm turnOff chot ng RadioButton. Nói ơn gi n có nghĩa là khi click vào m t RadioButton thì trư ctiên t t c các RadioButton trong nhóm u quay v tr ng thái Off, sau ó s chuy ntr ng thái c a RadioButton ư c ch n thành On.CODEfunction 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()CODEfunction turnOff() { gotoAndStop("off"); state = false;}Ti p theo là xây d ng hàm getValue() ki m tra xem RadioButton nào ang ư cch 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 quat t c các RadioButton trong array RadioButton xem cái nào ang ư c ch n.CODEfunction 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 mBâ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 iriê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 idư 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ênCODEresults = 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 ivào m ng resultsCODEon (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 nm 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 codekhác.CODEon (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 ư cch 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 sd 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ó thc 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ácNh ng ngư i s d ng Flash 5 luôn than phi n v vi c không th s d ng tabchuy 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ímTab 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ácchương trình chuyên nghi p, ví d như trong m t trình duy t web, i u này s mangl 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 theotrong 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ư tronghì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áidư 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 ithu 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:CODEtext1.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 sd 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ì Flashcũng không t ng t focus cho thành ph n u tiên, vì th , b n ph i t làm i unày. làm ư c như v y, b n s d ng m t l nh trong i tư ng Selection báocho Flash bi t thành ph n m c nh ư c t focusCODESelection.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 nm 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àotextfield 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 ư cfocus. o n code dư i ây s là m t ví d . Khi ngư i dùng chuy n focus sang m tthành ph n khác thì b n s bi t ngư i dùng chuy n n âu.CODESelection.addListener(this);this.onSetFocus = function(oldFocus, newFocus) { trace(oldFocus+","+newFocus);}H n ch nh p li uKhi 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 cnh p li u ó. Ví d trong ô năm sinh, b n ch mu n ngư i dùng nh p s vào, khôngc n ph i nh p ch . B n có th h n ch nh ng ký t ư c phép nh p vào textfieldb 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ôiCODEtext1.restrict = "01234567890";Còn dư i ây là m t ví d n a n u ô nh p li u là emailCODEtext2.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 text2B 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ũngcó th không c n ph i dùng AS, có th t thu c tính tr c ti p trong khung PropertiesCODEtext1.restrict = "01234567890";text1.maxChars = 4;Luy n t p: Ki m tra d li u nh pBâ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àotên, năm sinh, email. Và chúng ta s ki m tra các thông tin nh p vào nàyTê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ămtrong kho ng 100 năm trư c n nay. Còn email ít nh t ph i có 7 ký t và có d nga@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, anduserEmailText. B n cũng c n ph i t o m t dynamic textfield liên k t v i variablefeedback. 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 u tiên d ng l i và thi t l p các thu c tính h nch nh p li uCODEstop();// 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 suserYear.restrict = "01234567890";userYear.maxChars = 4;// h n ch d li u emailuserEmail.restrict = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";userEmail.maxChars = 128;- Ti p theo là t con tr vào text field userName lúc movie m i b t uCODESelection.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 listenerb t event như o n code dư i âyCODESelection.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 bi nnày sauCODEignoreSetFocus = false;- Ti p theo chúng ta vi t hàm onSetFocus b t event.CODEthis.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à is th hai là textfield sau khi chuy n focus. Hàm checkUserName s ki m tra tênngư i dùngCODE// tên ph i có ít nh t 3 ký tfunction 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);}Hàm checkUserYear s ki m tra năm nh p vàoCODE// năm ph i t kho ng 100 năm n nayfunction 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 n nay"; 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); }
    • // quay tr l i feedback = ""; return(true);}Ti p theo là hàm chechUserEmail ki m tra emailCODE// ki m tra emailfunction 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 trad 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 ttrong nh ng ô trên sai thì s tr v k t qu false, còn úng h t s là trueCODEfunction 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àmCheckAll và ưa sang frame ti p theo v i l i cám ơn.CODEon (release) { if (checkAll()) { nextFrame(); }} Gi th 16: Menu và button ngMenu 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 uhành c a chúng ta và ngay c Flash u có m t h th ng menu trên u. Menu làm t cách t t ưa ra nhi u l a ch n cho ngư i dùng mà l i ít t n di n tích mànhì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 movieCách làm m t menu ơn gi nNh 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 tmenu 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 quabutton ó 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 othành m t dãy menu. Hình dư i ây là m t ví dKhi chúng ta ưa con tr ngang qua nút About Us thì m t lo t nh ng button khác sxu 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àmmenu. Frame th nh t s ch ch a button About Us, frame th hai s ch a buttonAbout Us và 3 button còn l i. frame th nh t, khi ngư i dùng ưa con tr ngangqua button About Us thì s nh y sang frame th 2 và d ng l i frame 2 cho n khingư i dùng ưa con tr chu t ra ngoài, khi ó thì s tr v frame 1. N u ý, các b ns th y cách này gi ng như chúng ta ã ư c h c Gi th 13 v RollOver. Chúng tas dùng hàm hitTest ki m tra xem v trí c a con tr chu t có n m trong buttonkhô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 chungtrong 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àmswapDepthsLuy n t p: Làm m t menuNà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 tas 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 tlà 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 dungcho 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, t tên làaboutUsMenu, và chèn o n code sau:CODEonClipEvent(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"); }}- Bây gi hãy ch y th movie c a b n xem nào. ưa con tr vào button About Usxem 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útCó nhi u cách làm menu x xu ng, và cũng có nhi u cách menu ho t ng. Chúngta ã bi t m t cách trong ví d ph n trư c, khi ngư i dùng ưa con tr ngang qua m tbutton 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, ơngi 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ãynghiê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 amenu, frame hai ch a các button x p d c xu ng thành m t h th ng menu khi tiêuc 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 menuCODEon (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 thchu 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 eventnày cũng gi ng v i on(rollOver) và on(rollOut) nhưng mà ph i gi chu t trong khi dichuy nCODEon (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àmexpandMenu() s t giá tr cho bi n expanded là true và nh y sang frame th haiCODEfunction expandMenu() { expanded = true; gotoAndStop("on");}Hàm collapseMenu() s làm ngư c l iCODEfunction 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 pn 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 thchu t ra thì menu s thu l i.CODEfunction 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úngta s vi t event on(release) cho chúng b t s ki n khi ngư i ngư i th chu t trênbutton ó, 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ũngvi t event on(dragOver) và on(dragOut) cho các button này gi menu l i khi ngư idùng gi chu t và kéo qua các button cũng như s thu menu l i khi ngư i dùng thchu t ra ho c kéo ra ngoài.CODEon (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 nkhung properties c a button, chuy n Track as Button thành Track as Menu Item. i unà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ư iButton 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úngta 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 tas ư c t sinh ra b ng AS , thú v nh . 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 tmovie 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 sLibrary, click chu t ph i lên tên movie clip và ch n Linkage. Nh ch n m c Exportfor 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àycũng r t ơn gi n, chúng ta s d ng l nh attachMovie t o m t instance c a movieclip và t l i giá tr cho dynamic text trong movie clip, và t l i v trí c a nó b ngcách t cách thu c tính _x, _y.CODEfunction 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àoB 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àmcreateButton.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àmcho các button có th x lý nh ng công vi c khác nhau? Button s g i nh ng hàm tngoà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 nhauLuy 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 buttonCODEon (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 buttonnà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 tlo t button t m t m ng lưu s nCODEfunction 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 ngfunction createButtonList(buttonList, x, y, direction) { for (var i=0;i<buttonList.length;i++) { ret = createButton(buttonList[i].label,x,y, buttonList[i].action); buttons[i].mc = ret; if (direction == "down") { y += 20; } else if (direction == "across") { x += 100; } }}- Còn ây là cách t o m ng t o buttonCODEmainButtonList = new Array();mainButtonList.push({label:"About Us", action:"aboutUsButtonList"});mainButtonList.push({label:"Products", action:"productsButtonList"});mainButtonList.push({label:"Store",action:"storeButtonList"});- Công vi c ti p theo là g i hàm createButtonList t o buttonCODEbuttonLevels = 1;createButtonList(mainButtonList,100,100,"across");
    • - N u b n th ch y movie lúc nào thì chúng ta s th y 3 button ư c t o nhưng mà schưa làm gì khi ưa chu t ngang qua hay click vào. Bây gi chúng ta s vi t hàmbuttonRollOverAction x lýCODEfunction buttonRolloverAction(thisAction,thisLabel) { if (thisAction == "aboutUsButtonList") { deleteAllButtonLists(); createButtonList(aboutUsButtonList,100,120,"down"); } else if (thisAction == "productsButtonList") { deleteAllButtonLists(); createButtonList(productsButtonList,200,120,"down"); } else if (thisAction == "storeButtonList") { deleteAllButtonLists(); createButtonList(storeButtonList,300,120,"down"); }}- Hàm buttonRollOverAction g i hàm createButtonLists v i các i s khác nhau làm t trong 3 m ng ư c nh nghĩa dư i âyCODEaboutUsButtonList = new Array();aboutUsButtonList.push({label:"History", action:"goto"});aboutUsButtonList.push({label:"Clients", action:"goto"});aboutUsButtonList.push({label:"Partners", action:"goto"});productsButtonList = new Array();productsButtonList.push({label:"Widgets", action:"goto"});productsButtonList.push({label:"Toys", action:"goto"});productsButtonList.push({label:"Power Tools", action:"goto"});storeButtonList = new Array();storeButtonList.push({label:"Order Online", action:"goto"});storeButtonList.push({label:"Find a Store", action:"goto"});storeButtonList.push({label:"Request Catalog", action:"goto"});storeButtonList.push({label:"Track Shipment", action:"goto"});storeButtonList.push({label:"Return Item", action:"goto"});- Hàm deleteAllButtonLists s làm bi n m t các button ã ư c t o, có nghĩa là t t ccác menu trong 3 m ng v a t o s bi n m t và s ch xu t hi n m t m ng t i m t th i i m mà thôi. Hãy tư ng tư ng cái menu c a chúng ta trong Flash, khi ưa con tr n menu File thì menu File x xu ng, nhưng khi ưa sang Edit thì menu File s thul i và menu Edit x xu ng…Trư c ó, chúng ta ph i có o n code sau ch t ng menu n các m ng menu conCODE
    • allButtonLists = new Array();allButtonLists = [aboutUsButtonList,productsButtonList,storeButtonList];Ti p theo chúng ta s vi t hàm deleteButtonList và deleteAllButtonListsCODEfunction deleteButtonList(buttons) { for (var i=0;i<buttons.length;i++) { buttons[i].mc.removeMovieClip(); }}function deleteAllButtonLists() { for(var i=0;i<allButtonLists.length;i++) { deleteButtonList(allButtonLists[i]); }}Bây gi hãy ch y th movie c a chúng ta nhé. B n th y sao? Tuy t v i ph i khôngnào Gi th 17: Liên k t và liên l c v i trình duy t, Browser Navigation andCommunicationKhi thi t k Flash, b n có 2 s lưa ch n, có th nhúng vào m t trang web ho c làmm t application có th t ch y riêng. N u b n nhúng vào m t trang web thì movie c ab n có th liên l c v i trình duy t báo cho trình duy t c n ph i làm gì.Trong gi th 17, các b n s h c ư c:- Cách load m t trang web- Tìm hi u cách liên l c v i JavaScript- M m t c a s trình duy t m i t movie- S d ng JavaScript g i thông i p n movie- Lưu thông tin ngư i dùng vào JavaScript cookies- T o movie s d ng JavaScript- Nh ng câu l nh c bi t cho nh ng application t ch yLoad m t trang webNgày nay thì Flash ư c s d ng r t nhi u trong các website. Nó ư c s d nglàm trang ch ho c là t o nh ng thanh liên k t (navigation bar)… Cũng có lúc,chúng ta c n load m t trang web m i t movie Flash.Cách ơn gi nB n có th load m t trang web m i b ng cách s d ng câu l nh getURL. Nó ho t ng gi ng như th <a href…> c a HTML. Dư i ây là m t ví d khi nh n m tbutton thì s load m t trang web m i thay th cho trang hi n t i:
    • CODEon (release) { getURL("anotherpage.html");} ví d trên thì trang anotherpage.html s ư c load. B n có th thay b ng m t URLhoà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 tthu c tính hypertext links c a TextField, cái này th t ra gi ng h t như là th <ahref…> c a HTMLCách nâng caoCá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 loadtrang 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 ahà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àyCODEon (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 tc các frame trong windowN 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 sd ng JavaScript. Chúng ta s nói v v n này sauLuy 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ưngb 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 sch 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.htmlCODE<HTML><HEAD><TITLE>Flash Navigation Example</TITLE></HEAD><BODY BGCOLOR="#FFFFFF"><FRAMESET cols="120,*"><FRAME name="navigation" src="navbar.html" scrolling="no"><FRAME name="content" src="content1.html" scrolling="auto"></FRAMESET></BODY></HTML>- Trang HTML trên ch t o ra 2 frame, trong m i frame s ch a m t trang HTMLkhác. Bây gi chúng ta s t o 2 trang HTML ó. Chúng ta chưa c n ph i làm trangHTML cho frame bên trái, vì nó s ư c t o ra khi chúng ta publish movie thànhHTML. 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<HTML><HEAD><TITLE>Content 1</TITLE></HEAD><BODY BGCOLOR="#FFFFFF">Content 1</BODY></HTML>- 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 o3 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:CODEon (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à JavaScriptN 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 it 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ôngngh 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 JavaScriptG i thông i p t ActionScript n JavaScript thì ch c n vi t code trong ActionScriptnhư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 nch là thay th nh ng ch ư c ánh d u Your code here b ng ph n JavaScript c ab 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 filehtml 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 pnh n s liên l c. Tham s ID trong th OBJECT s gi ng v i tham s NAME trongth EMBED. Hai tham s này s t tên cho movie c a chúng ta trong trang webJavaScript 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.0có th liên l c v i Flash b ng công ngh LiveConnect.CODE<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/[ic:cc]flash/swflash.cab#version=5,0,0,0"ID=flashmovie WIDTH=120 HEIGHT=120><PARAM NAME=movie VALUE="17astojs.swf"> <PARAM NAME=qualityVALUE=high> <PARAMNAME=bgcolor VALUE=#FFFFFF> <EMBED src="17astojs.swf" quality=highbgcolor=#FFFFFFWIDTH=120 HEIGHT=120swLiveConnect=true NAME=flashmovie TYPE="application/x-shockwave-flash"PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED></OBJECT>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à Netscapevà Internet Explorer nhìn nh n movie c a chúng ta khác nhau . Internet Explorernhìn movie v i tên truy n vào tham s ID (flashmovie), còn Netscape nhìn movie v itên là document.flashmovie. Hãy xem o n code dư i ây xem nhé:CODE<script LANGUAGE=JavaScript>function flashmovie_DoFSCommand(command, args) { if (navigator.appName.indexOf("Microsoft") != -1) { var flashmovieObj = flashmovie; } else { var flashmovieObj = document.flashmovie; } alert(command); alert(args);}Trong Internet Explorer, Flash không ch có th liên l c v i JavaScript mà còn có thli n l c v i VBScript. o n code dư i ây ư c vi t b ng JavaScript thay cho o nJavaScript trên:CODEif (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) { document.write(<script LANGUAGE=VBScript> n); document.write(on error resume next n); document.write(Sub flashmovie_FSCommand(ByVal command, ByVal args)n); document.write(call flashmovie_DoFSCommand(command, args)n); document.write(end subn); document.write(</SCRIPT> n);}</SCRIPT>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 tmà thôiCODEfscommand ("alert", "This is alert 1.");
    • Nh n thông i p t JavaScriptNh n thông i p t JavaScript thì có v d hơn. Nhưng b n ph i nh r ng ã t thams ID trong th OBJECT và tham s NAME trong th EMBED, nh t gi ng tênnhé. 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 nmovie sang frame th hai.CODE<FORM NAME="flashControlForm"><INPUT NAME="gotoFrame1" TYPE=Button VALUE="Frame 1"onClick="window.document.flashmovie.GotoFrame(1);"></FORM>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 sd 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 uth 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 trongtimeline 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 tmovie khi nó ang ng ng.Luy n t p: M window m iCó 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 oCODEon (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:CODEif (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 trJavaScript ó 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 ngFlash, 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 ncode ta ã chèn vào lúc trư cCODEfunction 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ó htr JavaScript thì jsCommOK s mang giá tr OK còn n u không thì bi n jsCommOKv 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<BODY bgcolor="#FFFFFF" onLoad="initComm();"> 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 JavaScriptTrong 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 iframe 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 manggiá tr là slideshow- Nh t swLiveConnect=true trong th EMBED- T o 2 button trong file HTML b ng o n code sau:CODE<FORM NAME="flashControlForm"><INPUT NAME="next" TYPE=Button VALUE="Next" onClick="nextFrame();"><INPUT NAME="prev" TYPE=Button VALUE="Previous"onClick="prevFrame();"></FORM>- M i button s g i m t hàm. C hai hàm s s d ng TcurrentFame(“/”)bi t angframe th m y, r i s d ng gotoFrame di chuy n t i ho c lui.CODE<script LANGUAGE="JavaScript">function nextFrame() { var frameNum = window.document.slideshow.TCurrentFrame("/"); window.document.slideshow.GotoFrame(frameNum+1);}function prevFrame() { var frameNum = window.document.slideshow.TCurrentFrame("/"); window.document.slideshow.GotoFrame(frameNum-1);}
    • </SCRIPT>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 ServerCho 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ênl c v i máy ch (Server). Nên nh r ng Flash cũng có th g i tr thông tin cho Servergi 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 LoadVarsR 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 iFlash 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 id li u cho Server gi ng như post form trong HTML. Chúng ta có th t o i tư nggi ng như t o nh ng i tư ng khác. Hãy xem gi th 12 nhé!L y d li uDư 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.CODEmyVars = 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:CODEmyVars.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 nhnày mà thôi. Hãy tư ng tư ng, chúng ta có m t file ch a d li u như sau:CODEname=George&ID=47G i d li uV 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 id li u i.CODEmyVars = 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 ctính vào i tư ng myVars. Sau ó, g i d li u i lên Server, chính xác là n chươngtrì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 sendvà load. Có nghĩa là i tư ng LoadVars s g i d li u lên Server, sau ó s l y giá trtr v .CODEmySendVars = new LoadVars();myLoadVars = new LoadVars();mySendVars.name = "George";mySendVars.ID = 47;mySendVars.sendAndLoad("serverprogram.cgi", myLoadVars);Tr ng thái l y d li uHã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 itrong 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 csendAndLoad, 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 sd ng getBytesLoaded và getBytesTotal v i nh ng d li u l n. Dư i ây là ví dki m tra vi c l y d li u:CODEmyLoadVars.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 cfalse cho bi t vi c nh n d li u ã xong hay chưa Gi th 19: Dùng XML v i FlashCàng ngày XML càng tr nên thông d ng trong các ng d ng tin h c, và ngay ctrong 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 nXML ch ơn gi n là m t văn b n ch a d li u. XML tương t như HTML, cũngdùng các th . Tuy nhiên, XML khác HTML là các th HTML ã ư c n nh trư ccho 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 phù h p cho m c íchriêng c a b n.Có th t o m t XML file v i 1 trình biên t p văn b n (như Notepad, Textpad ...) ơngi 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à itư ng XML c a Flash s t ng phân tích văn b n XML này.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 Flash-Lee) 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 itư ng XML là t o m t phiên b n XML trư c:CODEmyXML = new XML()Phân tích và s lý văn b n thành XMLSau 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ênb 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.CODEmyXML = new XML();myXML.parseXML("<user><name>Gary</name><ID>47</ID></user>");Hay b n có th vi t tr c ti p như sauCODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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ó thdùng c tính status ki m tra.CODEmyXML = new XML("<user><name>Gary</name><ID>47</user>");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 </ID>. N u output window cho ra -10 thì b n thi u thm (start tag), và 0 có nghĩa là m i vi c hoàn ch nhL y d li u t i tư ng XMLCó nhi u hàm làm vi c này. Ví d , b n có th dùng firstChild l y nút (node) u tiên c a i tư ng XML:CODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");trace(myXML.firstChild);Output window s cho ra <user><name>Gary</name><ID>47</ID></user>. 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 ifirstChild
    • CODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");trace(myXML.firstChild.firstChild);Kỳ này output window s cho ra <name>Gary</name>, vì ph n t name là nút utiên c a userNgoà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 chidlNodesCODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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ênl y nút ó:CODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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útcu 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:CODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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:CODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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 ncode mình vi t dư i âyCODEmyXML = new XML("<user><name>Gary</name><ID>47</ID></user>");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ó 1chu i văn b n nào trư c thì sao? B n có th dùng createElement t o ra các nútm i và dùng createTextNode t o ra các text node. Tuy nhiên 2 l nh trên ch t o ranút ch không thêm vào trong XML, v y b n ph i thêm nó vào b ng l nhappendChild. 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 ac p.CODEmyXML = 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 nodeValueCODEmyXML.childNodes[0].childNodes[1].childNodes[0].nodeValue = 53;Thu c tínhCác thành ph n c a XML có th có thu c tính (attribute). Trong ây mình g p r cr 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 Anhnhe. Attribute g m có t khoá và giá tr c a t khoá ó, và dùng nh rõ m t thànhph 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 nname hơn, ("alias" là bí danh)CODE<user> <name type="alias">Gary</name> <ID>47</ID></user>
    • N u b n mu n ưa o n code trên vào trong XML object thì ph i i d u " (ngo ckép) thành d u (ngo c ơn)CODEtrace(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 []CODEtrace(myXML.childNodes[0].childNodes[0].attributes["type"]);Và b n có th thay i giá tr c a attribute, hay thêm attribute m i như sau:CODEmyXML.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ánhgi 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ôngchí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 thdùng các l nh như length hay dùng [] v i index number. Nhưng b n có th dùng vòngl p for ... in truy c p t ng attribute c a node.CODEmyXML = new XML("<user><name type=alias validity=verified>Gary</name><ID>47</user>");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à verifiedThêm vài AS v XMLB 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 tph 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 ncó th l y cái node u tiên c a i tư ng XML và quy thành m t bi nCODEmyXML = new XML("<user><name>Gary</name><ID>47</user>");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 lengthc a childNodes. Ví d , user node có 2 node trong, v y b n có th bi t ư c b ngv i o n code sau:CODEmyXML = new XML("<user><name>Gary</name><ID>47</user>");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ó thbí 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ênc a thành ph n (th ) u tiên c a user là name như sau:CODEmyXML = new XML("<user><name>Gary</name><ID>47</user>");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 (textnode) b ng v i thu c tính nodeType. N u nodeType là 1 thì có là 1 thành ph n c aXML 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 : PrintingKhô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ănb 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 ach 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 ư cI> 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 aAction Script. Th t không may,nh ng l nh in này không ư c linh ho t l m. N u sd 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 framehi 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 uframe. Nhưng hi m khi b n mu n in h t toàn b .2 - t tên cho frameB 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 thai 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 cnh ng frame có chưa ký hi u in này s ư c t m t layer riêng. Theo cách ó, b ncó 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 nkhô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 ic 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 ntr phi b n s d ng label "#p" trong câu l nh "gotoAndStop" ho c nh ng l nh tươngt ....3- Lên k ho ch inB n c n ph i suy nghĩ và lên k ho ch cho movie c a b n khi mu n movie có khnăng in. Vì không th ch in m t frame hi n t i nên b nc 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 ns ư 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 utrong moviecó 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 tnhưng không có nút Print cũng như các y u t khôgnc 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 tnú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ôngc 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 thi 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 chu n b cho m t bi u m u in, bây gi cùng h cAS c n thi tII> Các câu l nhCó 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 nlà ho t ng gi ng nhau.1- PrintL nh th nh t làQUOTEPrintL 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 sd ng tham chi u t i movie ó.Tham s th hai là m t trong ba tuỳ ch n sau :QUOTEbframeQUOTEbmovie
    • QUOTEbmaxCá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. Flashcó th co dãn văn b n in t i kích thư cc 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ư c550x400, thì chi u ngang s ư c phóng to t i kích thư c 550pxchi 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 atrang ó. N u frame th nh t có n i dung v i kích thư c là 550x400nhưng frame th hai ch ch a n i dung có kích thư c 275x200, khi ó frame th hais 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 nhxem frame nào có kích thư c l n nh t. Các framecò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 tanên các frame có kích thư c t l v i nhauVí d , frame l n nh t có kích thư c 550x400, và nó l p y trang in. Frame khác chcó 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 cnh 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íchth 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 inchúng s không ư c in ra.Sau ây là ví d v l nh "Print" :QUOTEon(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-PrintAsBitmapCâ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 ngt 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ơnkhi 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 tqu 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 frametrong movie ư c load xu ng.Thao tác : T o bi u m u inM 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 taph 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 im 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êntrang web có th ư c b qua và nh ng y u t m i như email address có th ư cthêm vào.1- T o m t movie m i2- T o ra các trư ng nh p d li u (ví d tên, tu i, a ch , gi i tính, email...) (xemhình) sau ó t tên layer này là CONTENT
    • 3- t tiêu cho trư ng lên phía trên ô nh p li u4-T o thanh tiêu cho Form. Chú ý,hai lo i tiêu này s ư c t hai layer riêngbi t .5-T o nút Print và t trong layer tên là Buttons6-CHèn o n mã sau cho button :QUOTEon (release){print (this, "bmax");}7- Thêm Frame th hai cho movie, kéo Title Bar và Content sang frame 2T o blank keyframe cho layer Buttons và Titles, vì chúng s có n i dung khác trongframe th hai8- Trong frame th hai c a layer Title, t m t tiêu khác. Ví d , n u frame th nh tlà "Fill out that application" thì frame th hai ch c n là Appilcation
    • 9- Sau ó, bi u m u ã s n sàng i n vào. Tiêu cũ s bi n m t, b n có th nhìnth y tiêu m i trong hình..10- Thêm m t layer m i tên là Signature. t m t keyframe frame th hai c a layernày. Thêm ư ng ngăn cách và a ch trong frame này. N u làm úng thì frame 1 c alayernày s không có gì, n i dung ch t n t i frame 211- 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 codeQUOTEstop();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 ncó 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 um 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áyin. 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 ngt 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 componentActionScript cho các Component i kèm FlashCó 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 componenttrong b ng Component, ho c nh n và kéo m t component vào stage.PushButtonClick và kéo component PushButton vào stage s t o m t instance (th hi n) m i c acomponent PushButton trên màn stage. Khi ó b n ã thêm m t s ph n t Libraryvà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 trongLibrary (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 ahà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 tClick 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:ActionScriptfunction 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ì thb n có th ki m tra instance này có ph i có tên là testButton hay không. Hàm ví dtrên s chuy n thông báo "Test Button Pushed" n u nút ư c nh n là testButton, và inra 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.CheckBoxesComponent CheckBox (h p ki m) tương t như cái mà chúng ta ã t o gi 15 (anhem d ch sau nhé). t o m t CheckBox component, click úp vào nó trong b ng Components, ho cclick và kéo nó lên trên stage. t o m t instance th hai, m folder Flash UIComponents 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 nch n m t component trong chúng và m b ng Properties, b n s th y nó có nhi uthô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 InitialValue (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 haykhô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, OptionTwo, và Option Three. Thông s Change Handler c a m i instance ư c i thànhchangeOptions.Tôi t hàm changeOptions trong timeline chính. Hàm này s ư c th c thi khi nàom 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 ic a CheckBox ra c a s Output.ActionScriptfunction 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 it 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.ActionScriptfunction 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 trongcác d ng khác. Ví d , b n có th t chúng trong m t i tư ng LoadVars chúngcó th g i t i m t server.RadioButtonsRadioButtons gi ng như CheckBoxes, ngo i tr vi c chúng ư c s p x p thành cácnhó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 trongnh ng nút ó và m b ng các thu c tính (Properties panel) cho nút, b n s nhìn th ycomponent này có nhi u thông s hơn so v i các component CheckBox hayPushButton.Thêm vào các thông s b n ã th y trong component CheckBox là hai thông sGroup Name (tên nhóm) và Data (d li u). Thông s Group Name xác nh xemRadioButton thu c v nhóm nào. Trong movie m u, c ba RadioButtons u thi t tthô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ì hainhó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 khiPushButton trong movie ư c click. Sau ó PushButton s ch y o n script nàyquy 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 banút tìm ki m m t nút tr v true t hàm getState(). i u này nghĩa là nútRadioButton ó ã ư c b t.ActionScriptfunction 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); }}ListBoxM 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 ach 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 aCheckBoxes ho c RadioButtons. Nó c bi t h u ích khi b n có nhi u l a ch nnhư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 idò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 ach 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 sSelect 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 ulà 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 (specialinterface) cho vi c nh p các giá tr này. Khi b n click trên tham s Labels trong b ngProperties, 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 ythô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àykhô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ênmà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êntrên m t dòng, hàm listBoxChange s ư c g i. i u này ư c xác nh b i thông sChange 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 ư cch n:ActionScriptfunction listBoxChange(listBoxInstance) { trace(listBoxInstance.getValue());}
    • Trong movie m u này cũng có m t component PushButton. Khi nó ư c click, nó sth 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 tthu 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 pdanh sách (list box), nên thay vào ó chúng ta s l y các nhãn (label).ActionScriptfunction buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { items = myListBox.getSelectedItems(); for(var i=0;i<items.length;i++) { trace(items[i].label); } }}B n cũng có th thêm ho c b t các dòng t list box b ng cách s d ng ActionScript.Ví d , addItem s thêm m t l a ch n b sung vào list box.ActionScriptmyListBox.addItem("Choice Four");B n có th dùng addItemAt, removeItemAt, và replaceItemAt thay i list box b iActionScript.ComboBoxM t combo box gi ng như m t menu kéo xu ng (pull-downl menu) ó ngư i dùngcũng có th gõ vào m t giá tr .May thay, b n cũng có th t t tùy ch n hi u ch nh giá tr . Khi ó combo box như m tmenu pull-down bình thư ng. Thông s làm i u này là Editable (có th hi uch nh) trong h p tho i Properties. B sung cho tham s ó, b n cũng có th cung c pcác m ng ch a nhãn (Labels) và d li u (Data).M t thông s khác c a combo box là Row Count (s dòng). Các combo box có thnh như các list box. Khi ngư i dùng click vào, chúng s tr i r ng thành m t danhsách các l a ch n. N u s l a ch n vư t quá giá tr Row Count, m t thanh cu n sxu t hi n bên ph i cho phép ngư i dùng cu n lên xu ng l a ch n.Cơ b n m t combo box có th có 3 tr ng thái. Khi không ho t ng nó thu nh thànhm t dòng. Khi click vào nó, combo box s tr i r ng thành danh sách tuỳ ch n, n u sl a ch n l n hơn s dòng có th hi n th thì xu t hi n thêm thanh cu n.Khi m t ngư i dùng ch n m t l a ch n m i trong combo box, b qu n lý ClickHandler s ư c g i. Dư i ây là m t hàm ơn gi n cho b n bi t nhãn c a combo box
    • ã ch n:ActionScriptfunction comboBoxChange(comboBoxInstance) { trace(comboBoxInstance.getValue());}B n cũng có th dùng getSelectedIndex() l y ch m c (tính t 0) c a m c ã ch n.Movie m u 21combobox.fla là m t ví d v component ComboBox.ScrollPaneHai component ti p theo khác h n so v i 5 component trên. Chúng không dùngcho phép ngư i dùng l a ch n, nhưng dùng hi n th lư ng thông tin l n trong cáckho ng nh (cu n mà l ).Component ScrollPane (ô cu n) g m có m t thanh cu n d c, cu n ngang và m tvùng hi n th hình ch nh t. Thông s chính c a component này là Scroll Content(cu n n i dung). ây là tên liên k t (Linkage name) cho m t movie clip. Khi b nch y movie, movie clip ư c copy t Library và t vào vùng hi n th c a ô cu n.Sau ó các thanh cu n s cho phép ngư i dùng nhìn th y các ph n khác nhau c amovie clip.B n có th xem ví d trong file 21scrollpane.fla.N u b n thi t t thông s Drag Content là true, ngư i dùng cũng có th click vàotrong vùng hi n th và kéo hình trong ó ch y. Các thanh cu n cũng thay i khi b nkéo n i dung trong ô cu n (chính là cái movie clip hi n th trong ô ó).M c dù component ScrollPane không òi h i b t kỳ ActionScript nào làm vi c,nhưng có r t nhi u hàm mà b n có th dùng xác nh xem ph n nào c a movie clip ang ư c xem ho c thay i chi u r ng (width) và chi u cao (height) c a ô.B n cũng có th dùng b ng Properties thay i chi u r ng và chi u cao c a ô cu n.Khi b n làm vi c ó, ô cu n trông b méo mó trong Flash, nhưng no star where, nó sngon lành ngay khi b n ch y movie.M t l nh ActionScript r t h u ích là loadScrollContent . L nh này s d ng m t ach URL và hi n th m t movie clip ngoài vào trong ô cu n.ActionScriptmyScrollPane.loadScrollContent("myMovieClipFile.swf");Ô cu n có th ư c dùng như m t trình duy t hình nh.ScrollBar
    • Component cu i cùng là ScrollBar. Component này thêm các thanh cu n vào trư ngtext. B n có th dùng component này mà không c n dùng b t kỳ code ActionScriptnào. Ch vi c kéo và th m t component ScrollBar vào m t trư ng text (text field), tnó s thêm vào trư ng text.Component ScrollBar có ít thu c tính Actionscript có th s d ng ư c. Ví d , b n cóth s d ng getScrollPosition() l y v trí cu n hi n t i và setScrollPosition()thay i nó.Th c hành v i ComponentsBây gi chúng ta s ph i h p 5 component khác nhau t o m t form nh p d li u:CheckBox, RadioButton, ComboBox, ListBox, và PushButton components.T o m t Flash movie m i.T o ba component CheckBox. t tên cho chúng là checkbox1, checkbox2, vàcheckbox3. Nhãn c a chúng là: Macintosh, Windows, Linux.T o ba component RadioButton. t tên cho chúng là radiobutton1, radiobutton2, vàradiobutton3. Nhãn c a chúng l n lư t là ... như trênT o m t ComboBox component. t tên cho nó là combobox. Thêm m t vài nhãn(label) vào ó ngư i dùng có th ch n l a.T o m t ListBox component t tên là listbox. Thêm bao nhiêu nhãn vào tuỳ b n. ng lo l ng v th t c a chúng vì chúng ta s s p x p l i sau. Thi t t thông sListBox Multiple Selections thành false. Dùng b ng Properties t o cho khung danhsách (list box) r ng 200 và cao 200 pixel.Thêm m t PushButton component. t cho nó nhãn là Done và thông s i u khi nClick Handler là buttonPressed.Thêm dòng sau vào trong frame script. Nó s s p x p l i nhãn c a các m c trongcomponent ListBox.ActionScriptlistbox.sortItemsBy("label","Asc");L nh sortItemsBy làm vi c r t t t v i component ComboBox. B n có th dùng"label" ho c "data" cho thông s u tiên. i u ó tùy thu c vào nhãn (label) hay cáctrư ng d li u (data) s ư c s d ng s p x p. Thông s th hai có th là "Asc"(s p x p theo th t tăng d n) ho c "Desc" (gi m d n).Component PushButton s g i hàm buttonPressed. Chúng ta s t o hàm này theo t ng o n nh x lý t ng ph n c a form.Hàm b t u b ng vi c t o m t m ng m i. Sau ó nó ki m tra t ng check box xemhàm getValue() c a nó có ph i là true không. N u là true, nhãn c a check box ó s
    • ư c thêm vào m ng ó. Khi vòng l p k t thúc, m ng own ch a b t kỳ l a ch n nàomà ngư i dùng ã làm v i các check box.ActionScriptfunction buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { // sưu t p m ng c a các CheckBoxes ã ch n own = new Array(); for(var i=1;i<=3;i++) { if (this["checkbox"+i].getValue()) { own.push(this["checkbox"+i].getLabel()); } } trace("Computers Owned: "+own); o n mã ti p theo ki m tra t t c các component RadioButton và ghi nh xemcomponent nào ã ư c b t ( ã ư c ch n):ActionScript// xác nh RadioButton nào ã l a ch nfavorite = "none";for(var i=1;i<=3;i++) { if (this["radiobutton"+i].getState()) { favorite = this["radiobutton"+i].getLabel(); }}trace("Favorite: "+favorite);Component ơn gi n nh t là combo box. o n mã này ch ơn gi n tr v giá tr c anó:ActionScript// l y giá tr c a ComboBox ComboBoxnextPurchase = comboBox.getValue();trace("Next Purchase: "+nextPurchase); check (ki m) nhi u l a ch n c a list box, b n c n l p t u n cu i m ng tr vb i getSelectedItems(). Sau ó b n c n xem xét thu c tính label c a m i m c ch n(item). o n mã sau s làm i u ó và xây d ng m t m ng ch a các nhãn ã l a ch n:ActionScript
    • // sưu t p các l a ch n c a ListBox uses = new Array(); items = listbox.getSelectedItems(); for(var i=0;i<items.length;i++) { uses.push(items[i].label); } trace("Uses: "+uses); }}N u th c s hi n t i b n ang làm i u này, nên s d ng các i tư ng có tính c utrúc hơn là s d ng l nh trace. Cho ví d , b n có th t o m t i tư ng LoadVarssau ó g i thông tin n máy ch .Thay i ki u dáng (Style) c a m t ComponentCác component c a Flash v n trông ã r t p. Nhưng n u t t c các nhà phát tri nFlash u b t u s d ng chúng, thì t t c các Flash movie c a chúng ta trông s naná nhau.May thay, b n có th tuỳ ch nh các component theo nhi u cách khác nhau. B n có thd dàng t o các giao di n riêng (custom skin) cho chúng. Dư i ây là ba cách tùych nh component b ng cách s d ng ActionScript.Global Customization (tuỳ bi n chung)S d ng i tư ng globalStyleFormat, b n có th tùy ch nh giao di n cho t t c cáccomponent trong m t l n. ây là m t ví d thay i màu ch c a t t c các text trongt t c các component thành màu xanh da tr i (blue):ActionScriptglobalStyleFormat.textColor = 0x0000FF;globalStyleFormat.applyChanges();L nh applyChanges ch p nh n s thay i. Ngoài ra, b n có th thi t t nhi u thu ctính khác. Dư i ây là m t s thay i chi ti t:ActionScriptglobalStyleFormat.textColor = 0x0000FF;globalStyleFormat.textFont = "Arial";globalStyleFormat.textSize = 18;globalStyleFormat.textBold = true;globalStyleFormat.applyChanges();B n có th thay i thành nhi u giá tr như font ch ng h n. S m c thay i trongki u dáng c a các component quá dài có th li t kê h t ây. B n có th thay i
    • màu s c và ki u dáng c a các d u ki m trong CheckBoxes, các hình tròn trong nh ngRadioButton, nh ng mũi tên trong các thanh cu n ScrollBars, màu n n, màu s c c avùng tô sáng (highlight colors), màu s c các m c ch n, v.v... Hãy xem trong chươngtrình Flash c a b n bi t y thông tin v danh sách này.Grouped Customization (tùy ch nh theo nhóm)M c dù i tư ng globalStyleFormat ã ư c s d ng b i t t c các component trênstage, b n v n có th t o cho các i tư ng c a b n ki u dáng (style) riêng bi t chdùng trong m t vài component mà b n ch nh.B n th c hi n i u ó b ng cách t o m t i tư ng FStyleFormat. Khi b n làm i unày, i tư ng m i c a b n s có các thu c tính gi ng như i tư ngglobalStyleFormat.Ví d , b n có th t o m t i tư ng ki u dáng (style object) và thi t t màu s c c anó thành tươi như dư i ây:ActionScriptmyStyle = new FStyleFormat();myStyle.textColor = 0xFF00FF;Các y u t khác c a style không ư c thi t t chính xác trong i tư ng style này.Vì th b n có th áp d ng style này cho m t component, mà di n m o c a style khôngthay i. áp d ng ki u dáng style này vào m t component, hãy s d ng l nh addListener:myStyle.addListener(radiobutton1);B n nghĩ có v kỳ qu c khi s d ng v i addListener, úng là như v y. Hãy hi u r ng:b n báo cho component ti p nh n (listen) i tư ng style.Single Component Customization (tùy ch nh component riêng l )B n cũng có th thi t t m t cách chính xác m t trong nh ng thu c tính c a style.Tuy nhiên, b n không th làm i u ó b ng cách s d ng cú pháp ch m (dot) g n và p như b n mong mu n. Thay vì th , b n c n ph i dùng l nh setStyleProperty. L nhnày s t thu c tính style dư i d ng m t chu i tham s u tiên và giá tr mà b nmu n thi t t cho nó tham s th hai.ActionScriptcheckbox1.setStyleProperty("textColor",0xFF0000);B ng cách s d ng ba phương pháp thi t t style cho các component, b n có th tùych nh các component theo như mong mu n.
    • Gi th 22: i u khi n âm thanh v i ActionScriptCó hai cách b n có th cho âm thanh vào o n phim Flash c a mình. Cách th nh tlà t nó vào ngay timeline. Vi c này không c n ph i s d ng mã. Cách th hai là sd ng ActionScript chơi nh ng o n nh c ư c lưu tr trong Library.Tìm hi u cách truy xu t âm thanh v i ActionScript:Vi c k t n i và chơi nh c: i u u tiên mà b n c n trư c khi chơi m t o n nh c v i ActionScript là k t n i n nó. B n hãy "Import" file nh c vào Library, b m ph i chu t ch n "Linkage", r i ánh d u vào các ph n export. B n cũng có th t m t cái tên "Identifier" khác cho o n nh c thay vì tên file nh c.Ví d , n u b n "import" file nh c "mysound.wav", nó s xu t hi n trong Library v icái tên mysound.wav. Khi b n ch n Linkage, và ánh d u export, nó s ư c t tên"Identifier" ngay là "mysound.wav", nhưng b n có th s a thành b t kì tên gi b nmu n(vd: nhac1). ó chính là cái tên mà b n s s d ng trong ActionScript. chơi m t o n nh c b ng ActionScript, b n ph i làm ít nh t ba bư c: u tiên là t o m t i tư ng "Sound" :ActionScriptmySound = new Sound();Th hai, b n c n g n o n nh c trong thư vi n vào i tư ng "Sound" này:mySound.attachSound("mySound.wav") //mySound.wav là tên b n ã t trong ph n"Identifier"Cu i cùng, b n hãy ra l nh cho i tư ng "Sound" c a b n chơi o n nh c:ActionScriptmySound.start();Và ây là m t o n ơn gi n t vào trong m t Button chơi o n nh c t Library:ActionScripton (release) { mySound = new Sound(); mySound.attachSound("poof.wav"); mySound.start();}B n có th tham kh o m t ví d ơn gi n trong file "22playsound.fla" kèm theoquy n sách này.B n cũng có th xem qua m t phương pháp hơi ph c t p m t tí trong file"22playsoundfunction.fla". Trong file Flash này, có m t function tên là "playsound" ư c t timeline chính. "function" này bao g m t t c các mã mà b n c n chơim t o n nh c ơn gi n.
    • ActionScriptfunction playSound(soundName,balance) { var mySound = new Sound(); mySound.attachSound(soundName); mySound.start();}V i vi c s d ng function này, b n ã ơn gi n hóa o n ActionScript nên b n s chc n s d ng úng m t dòng l nh chơi nh c. ây là o n mã t trong m t Button s d ng function này:ActionScripton (release) { playSound("poof.wav");}Câu l nh "start"Câu l nh "start" trong ví d trên có th ư c s d ng b ng nhi u cách. B n có ththêm hai tham s n a vào nó thay i cách mà o n nh c s ư c chơi.Tham s th nh t b n có th thêm ư c g i là "offset". Nó giúp b n có th chơi b nnh c t b t kì v trí nào b n mu n ch không ph i chơi l i t u. Ví d , dòng l nhnày s b t u chơi t v trí th 1000 miligiây c a o n nh c(1 giây sau khi b t):ActionScriptmySound.start(1000);Tham s th hai c a câu l nh "start" là s l n l p l i c a o n nh c. Ví d , n u b nmu n b t u b n nh c t i v trí sau 1 giây và l p ba l n, câu l nh s như sau:ActionScriptmySound.start(1000,3);B t u b n nh c t i v trí t u và l p ba l n:ActionScriptmySound.start(0,3);Câu l nh i ôi v i "start" là "stop". Khi b n ang chơi m t o n nh c, b n có th ưara câu l nh "stop" b t c khi này ng ng h n o n nh c. B n ph i thêm vào tham slà tên (Identifier) c a o n nh c. N u không, l nh "stop" s ng ng t t c các o nnh c ang chơi.
    • ActionScriptmySound.stop("poof.wav"); i u ch nh âm lư ngB n có th s a i o n trư c và khi ang chơi b ng m t s câu l nh. Các câu l nhnày còn có th i u ch nh âm lư ng c a o n nh c, trong t t c loa hay ch t ng cái.L nh "setVolume" là cách i u ch nh ơn gi n nh t, b n ch c n cho m t tham s t 0 n 100 là b n có th v n to, nh m t o n nh c:ActionScriptmySound.setVolume(50);Trong file "22playsoundvolume.fla" bao g m m t nút Play và b n nút khác i uch nh âm lư ng l n t là 0, 10, 50 và cu i cùng là 100. Nút Play s chơi m t o nnh c 100 l n nên b n có th th i u ch nh âm lư ng trong lúc ang chơi nh c.Chú ý là vi c b n i u ch nh âm thanh c a m t o n nh c s không liên quan n các o n nh c khác. Vì v y b n có th i u ch nh các âm thanh khác nhau như nh c n nvà các ti ng ng. i tư ng "Sound" i tư ng "Sound" có hai thu c tính mà b n nên bi t n. Th nh t là "duration" là dài c a o n nh c tính b ng miligiây. Th hai là "position" là v trí mà o n nh c ang chơi, cũng tính b ng miligiây.Ví d , n u m t o n nh c có thu c tính "duration" b ng 3000, có nghĩa là nó dài 3giây. N u thu c tính "position" b ng 1500 thì o n nh c ang chơi chính gi a.Trong file "22tracksound.fla" th hi n cách dùng "position" và "duration" th hi nc a o n nh c. Sau khi b t u, m t v ch en s ch y d n d n theo v trí c a o nnh c.ActionScriptonClipEvent(enterFrame) { // tính xem ã chơi ư c bao nhiêu c a o n nh c (giá tr t 0.0 n 1.0) percentPlayed = thisSound.position/thisSound.duration; // l y dài c a thanh barWidth = _root.bar._width; // t v trí c a d u v ch _root.mark._x = _root.bar._x + barWidth*percentPlayed;}
    • Khi o n nh c k t thúc:B n có th s d ng thu c tính "position" và "duration" ki m tra m t o n nh c h thay chưa, khi ó hai giá tr này s b ng nhau. Tuy nhiên n u o n nh c ư c l pnhi u l n thì hai giá tr này s b ng nhau m i khi cu i o n nh c.M t cách t t hơn ki m tra khi nào o n nh c k t thúc là dùng "onSoundComplete". ây là m t function s ư c th c thi khi o n nh c k t thúc h n.ActionScriptmySound = new Sound();mySound.attachSound("mySound.aif");mySound.onSoundComplete = function () { trace("sound done!");}mySound.start(); i u ch nh cân b ng:B n có th i u ch nh âm lư ng c a loa này to hơn loa khác thông qua l nh "setPan". i u này gi ng như giàn máy stereo. B n có th t giá tr t -100 n 100. N u b n là -100, t t c âm thanh s ư c phát ra bên loa trái, còn 100 s là loa ph i.ActionScriptmySound.setPan(-100);B n có th tham kh o file "22monopan.fla". Khi b n b m nào nút "Play" bên trái, loatrái s phát ra, b m nút "Play" bên ph i, loa ph i s phát ra. Gi th 23: Qu n lý streaming cho movie, Managing Movie StreamingTrong gi 23 chúng ta s ti n hành nh ng bư c sau: • Tìm hi u, giám sát movie khi load • Làm 1 loader ơn gi n • Làm 1 loader ph c t p hơn v i loading bar • Load các media movie bên ngoài vào flash (sound, image)Chúng ta b t âu v i bư c 1 nhé :Các Movie Flash u có tính ch t stream. i u này có nghĩa là frame u tiên c amovie s b t u ngay khi nó ư c n p xu ng, ko ph thu c vào vi c cái frame cu icùng ã ư c load xong hay chưa.B n có th ko mu n vi c này x y ra. Ví d như movie c a b n là 1 o n animation
    • ng n, b n có th ko mu n nó b t u cho n khi movie ư c load hoàn toàn t web.Có vài cách b t movie i cho n khi loading xong. Cách thông d ng nh t là tat o 1 loader frame. ó là frame u tiên c a movie. Nó s quan sát tính ch t c amovie và xác nh xem khi nao thì movie k t thúc vi c loading. bi t ư c có bao nhi u frame ã ư c load xu ng b n s d ng tính ch t_framesLoaded, còn bi t t ng s Frame c a movie b n s d ng tính ch t:_framesTotal.B n có th s d ng i u này trong 1 s trư ng h p ơn gi n. Ví d b n t frame u tiên l nh stop(); ó ta t o 1 button cho phép ngư i s d ng ti p túc. Khi ngư i s d ng click vào btnb n có th dùng 1 o n script tương t như sau xác nh xem ph i làm gì ti p theo:CODEon (release) { if (_root._framesLoaded == _root._totalFrames) { play(); } else { textDisplay = "Wait a few seconds and press again."; }}N u như movie chưa ư c load h t thì text field mà ta ã liên k t qua var textDisplays thông báo cho user.B n cũng có th s d ng kĩ thu t này trong 1 ph n c a 1 movie dài. Ví d btn có thn m Frame 50 và ch ngư i s d ng ti p t c khi mà 50 frames ti p theo ã s nsàng. Ta dùng o n code sau th c hi n:CODEonClipEvent(load) { _root.textDisplay = "Waiting for the next sequence to load."; _root.stop();}onClipEvent(enterFrame) { if (_root._framesLoaded >= 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 getBytesLoadedand 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ênb n chú ý t thêm l nh stop();
    • CODEonClipEvent(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 ư cload hoàn toàn thì movie s ư c play ti p t cChúng ta ti p t c ti n hành làm 1 loader ơn gi n cho toàn b movie ư c loadtrư c khi nó vư t qua frame 1 :1.M 1 file m i.2. frame u ta t o 1 keyframe3.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à 100K. 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 ã ư cload 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:CODEonClipEvent(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 loadingchưa. ây ta tính s ph n trăm ã load (percentLoaded) và cho hi n th con s nàyqua bi n displayText root levelB 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 ab 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 webrùi test . Ho c b n có th gi thi t l p 1 cai modem 56 KNào bây gi goto website và test b n s th y quá trình loading ư c hi n s ph ntră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.fla3. 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 i2.V 1 hình ch nh t r ng v i border3.Ch n toàn b cái hình ch nh t này và t chúng vào 1 mc b ng cách ch n insert vàconvert to mc.4.Click 2 cái vào mc m i này edit nó5.Tách riêng ph n fill và border c a cái hình ch nh t ra làm 2 layer6.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ênn 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 icá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à barFillDouble 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 chonó 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:CODEonClipEvent(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 sbytesLoaded và bytesTotal liên t c m i Frame. Bi n percentLoaded có giá tr t 0 n100. 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 iKhi mà s bytesLoaded = s bytesTotal thì display text s hi n thông báo: "LoadingComplete" và chuy n movie sang frame ti p theo.CODEonClipEvent(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 nchưa hi u thì cbt s post thêm hình minh h a vàoTimeline 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 ncòn l i c a movie.Trong btn cho o n code sau:CODEon (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.flaCó 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ênngoà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 iCá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. Khi1 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ùngl nh loadMovieVí d , b n có 1 frame cu i 1 movie dài. Khi ngư i xem n ó, h có th click vào1 button và xem 1 movie khác. o n code ơn gi n như sau:CODEon (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ácmovie 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ácph m c a b n v i các files có s n.Loading a Movie ClipV i l nh loadMovie b n có th thay th ch c a 1 mc b ng 1 mc khác. Ví d thayth ch c a myMovieClip b ng file otherMovie.swf b n ch c n làm:CODEmyMovieClip.loadMovie("otherMovie.swf);Khi s d ng loadMovie b n có th dùng getBytesTotal and getBytesLoadedfunctions 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 tmovie tr ng, không có gì trong ngo i tr m t câu l nh stop(). Sau ó chúng ta loadmc 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úngta ã 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 ncó 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 frame1.
    • Loading a JPEGmyMovieClip.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 i a chmovie b ng a ch c a file JPEG là ok:CODEmyMovieClip.loadMovie("picture.jpg");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.flaLoading a SoundCó 2 cách play 1 sound t 1 file bên ngoài. C 2 u s d ng sound object và l nhloadSound. 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();CODEon (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 udownload. Khi sound ư c load xong thì nó s ư c play ngay l p t cCODEon (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à 1stream sound. Ngay khi sound ư c load ph n nào thì s b t u chơi ngay trong lúcph 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
    • 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 Kbpshay 160 Kbps thư ng dùng nghe thì nó s là 1 file quá l n có th stream vóiinternet, c bi t n u ngư i sư d ng dùng modem. 32 Kpsb hay ít hơn s thích h phơ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 thnh 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 nh y t filenày t i file khác như ngư i s d ng mu n.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 ncó 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 unloadMovieCâ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 functioncá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 nhttp://www.vnfx.com/ipb/index.php?showtopic=2325Cách t ng quát t o 1 loader p:http://www.vnfx.com/ipb/index.php?showtopic=2921Ngoà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 vb 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àodi 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 fields1a.Drawing lines- v 1 ư ng th ng, vi c u tiên c n làm là nh nghĩa các giá tr c a lineStyle, nódày như th nào nè, rùi có màu gì và alpha.CODElineStyle(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ưchúng ta thay i scale c a nó thì dày c a nó v n ko thay i. Các b n th o ncode sau, và thay i giá tr dày nhé:CODElineStyle(0,0x000000,100);moveTo(20,50);lineTo(200,200);_xscale=300;_yscale=300;Nhìn o n code trên ta th y xu t hi n l nh:CODEmoveTo(20,50) v 1 ư ng th ng ta c n xác nh 2 i m: u và cu i. M i i m l i ư c xác inhv i 2 giá tr x và y---> moveTo là i m u, i m t bút. Như v y câu trên ta t bút t i x=20; y=50.----> lineTo là i m ti p n. Ta có x= 200; y=200. Như v y chúng ta ã v ư c ư 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í d v 500 ư ng lung tung trên màn hình ta có o n code ơn gi n sau:CODE// set line stylelineStyle(2,0x000000,100);// draw 500 linesfor(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 i alpha, color or thicknessc a nóM i ngư i th copy and paste o n code sau xem hi n ra gì nào :CODE// set line stylelineStyle(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 CurvesTươ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:CODElineStyle(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 conganker2 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 hi u rõthêm .Chúng ta play ti p v i o n code sau:CODElineStyle( 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à dochúng ta cho các giá tr control point gi a 2 i m kiaHãy th thay i 1 chút xem chúng ta có gì nào:CODEvar 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 .Vph n này plz c thêm các topic trong box AS
    • 2. Drawing Filled AreasTrư 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 :CODEbeginFill(color of fill, alpha of fill)Ví d o n code sau:CODElineStyle( 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 avà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 nra cái gì nào và ch nào ư c tô màu, ch nào ko :CODElineStyle(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 nh các giá tr ban u.B n th xem file fla 24betterstar.fla xem saoPause3.V v i chu tPh 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ácnhau 1 tr i 1 v c như th nào http://www.vnfx.com/ipb/index.php?showtopic=3007N 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êntôn tr ng quy n sách, cbt d ch cho y v y1.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)CODEonClipEvent (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 uvonClipEvent(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 aonClipEvent(mouseUp) { // dont draw anymore draw = false;}//b t uonClipEvent (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; } }}
    • Ph n này ch có v y4.T o 1 movie clip riêng cho các hình ã vNh 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ó ththay i _x, _y, rotation, alpha, scale .... t o 1 new mc ta dùng l nh :CODEmy_mc.createEmptyMovieClip("tên c a new mc", level c a nó)Ví d :CODEthis.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:CODEthis.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 attachthê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àoCó 1 bài hư ng d n v bông tuy t khá p trong cu n sách, tuy nhiên code ư c chianh thành các function khá dài dòng và m t công. trong khi trong di n àn c a chúngta 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 DStrong 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 ngAS c a Raider (tìm trong m c l c), trong ó có o n code r t hay. B i v y cbt s kod ch v o n code trong sách này n a.
    • bi t thêm chi ti t xin xem file fla 24snowflakes.fla5.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 effectflying words.T o Text t o 1 text chúng ta c n t o 1 ô text (text field) v i l nh :CODEcreateTextField("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 ó:CODEtext_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=60createTextField("myTextField",0,0,170,550,60);//textmyTextField.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 nhmyTextField.embedFonts = true;//m c nh các tính ch t c a textmyTextFormat = 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 tamyTextField.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ócph 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, IDnameN 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 userCòn r t nhi u các tính ch t trong textField và textFormat class, các b n nên c thêmhelp trang trí cho textField c a mìnhLý thuy t ch có v y, nào bây gi chúng ta s làm effect flying wordsCBT 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ênnó ư 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 it o thêm mc trên stage, có ch h n ch n a... Thôi thì c ưa ra v yCODEfunction 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<textList.length;i++) { // create movie clip with this text mc = createText(i,textList[i]); // set random location mc._x = Math.random()*450+50; mc._y = Math.random()*350+25; // set scale to nothing
    • mc._xscale = 0; mc._yscale = 0; // set scale variable to negative amount mc.scale = 0-i*100; }}function init() { // create array of text var words = "Love,Peace,Destiny,Llamas,Fate,History,Cheese,Rainbows,TinyRocks"; var textList = words.split(","); // create all text movie clips createAllText(textList); // remember how many there are numWords = textList.length;}function moveText() { // loop through words for(var i=0;i<numWords;i++) { // increase the scale of this movie clip mc = this["text"+i]; mc.scale += 10; // hide movie clip when scale is too big if (mc.scale > 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:CODEonClipEvent(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 exportv 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 tvà 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ùngthê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ư sauCODEfunction a(){wordArr=new Array("vnfx","flash","actionscript");//ta t o 3 mc ch a 3 text fieldfor(var n=0;n<wordArr.length;n++){ _root.createEmptyMovieClip("text"+n,n) mc=_root["text"+n]; myFormat=new TextFormat(); myFormat.font="Arial"; myFormat.color = 0x000000; myFormat.size = 24; myFormat.align = "center";mc.createTextField("myTextField",1,-100,-20,200,40);mc.myTextField.text = wordArr[n];mc.myTextField.embedFonts = true;mc.myTextField.setTextFormat(myFormat); //m c nh các giá tr ban umc._x=Math.random()*450+50;mc._y=Math.random()*350+25;mc._xscale=mc._yscale=0;//bi n t o s xu t hiên t t mc.scale=0-n*100;mc.onEnterFrame=function(){ this.scale+=10; if (this.scale > 300) { removeMovieClip(this); } else if (this.scale > 0) { this._xscale=this._yscale = this.scale; }}}}a();
    • //cho l p l i sau 5 ssetInterval(a, 5000);K t thúc r icó th c m c ki n cáo gì các b n c góp ý ha