Tài liệu Làm quen vi AS, Your Fi rst Look at AS: Gi th 01: Làm quen vi AS, Your First Look at AS
AS là mt ngôn ng lp trình c xây dng trong Flash. AS ging nh các ngôn ng
khác nh Javascript, C++ v.v. nhng b n không c
n bit các ngôn ng khác h
c
AS (nu có thì càng d hn).
Bt âu h
c AS, thì chúng ta coi th AS là gì, làm c nhng gì và có quan h gì vi
các chc nng khác ca Flash. Trong bài này, b n s tìm hiu coi AS ra i nh th
nào, xem cách vit AS làm sao, tìm hiu AS làm c nhng gì và sau sau cùng là
xác nh c ni lu tr AS trong Flash.
i sát ngha và tin cho sau này, mình s không dch mt s t
ng ra ting vit
nh
script, movieclip v.v.
Script là gì?
AS là ngôn ng lp trình, vi các lnh sai khin Flash movie làm vic theo úng
nhng gì mình vit (ch có mình vit sai ch computer không làm sai ). Ph
n nhiu
thì AS ch làm vic trong môi trng ca Flash, tuy nhiên AS cng có th gi lnh
cho browser, h iu hành v.v.
Script có th ngn g
n vài ch hay...
149 trang |
Chia sẻ: tranhong10 | Lượt xem: 1022 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Làm quen vi AS, Your Fi rst Look at AS, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Gi th 01: Làm quen vi AS, Your First Look at AS
AS là mt ngôn ng lp trình c xây dng trong Flash. AS ging nh các ngôn ng
khác nh Javascript, C++ v.v. nhng b n không c
n bit các ngôn ng khác h
c
AS (nu có thì càng d hn).
Bt âu h
c AS, thì chúng ta coi th AS là gì, làm c nhng gì và có quan h gì vi
các chc nng khác ca Flash. Trong bài này, b n s tìm hiu coi AS ra i nh th
nào, xem cách vit AS làm sao, tìm hiu AS làm c nhng gì và sau sau cùng là
xác nh c ni lu tr AS trong Flash.
i sát ngha và tin cho sau này, mình s không dch mt s t
ng ra ting vit
nh
script, movieclip v.v.
Script là gì?
AS là ngôn ng lp trình, vi các lnh sai khin Flash movie làm vic theo úng
nhng gì mình vit (ch có mình vit sai ch computer không làm sai ). Ph
n nhiu
thì AS ch làm vic trong môi trng ca Flash, tuy nhiên AS cng có th gi lnh
cho browser, h iu hành v.v.
Script có th ngn g
n vài ch hay cng có th dài c trm trang. Script có th c
vit gp l i mt ch hay cng có th vit rãi rác khp ni trong movie.
Xut x ca AS
AS rât ging ngôn ng C++, Java, javascript .v.v và c da trên tiêu chu!n do
ECMA (European Computer Manufactuers Association) lp ra g
i là ECMAScript.
Nhiu ngi hiu l
m r"ng AS da trên Javascript, nhng thc ch#t c 2 u da trên
ECMAScript.
Lúc
u vit script trong Flash r#t n gin và cho ti Flash 4 mi uc phát trin
nhng cng v$n còn "thô s" vi nhng vòng l%p và các iu kin "if...else". Cho ti
Flash 5 thì dân Flash mi có th lp trình và gn lin script vi các yu t trong
movie. . Sang ti Flash MX thì AS ã tr thành ngôn ng lp trình toàn din vi hn
300 câu lnh, hàm .v.v
Nhn biêt AS
AS n gin là nhng câu lnh c vit b"ng ting Anh (vì l này mà mình s không
dch các t ting Anh liên quan n AS, và mt ph
n thì mình không gi&i thut ng
computer hay ting vit cho lm) và các phép tính và d#u câu. Ví d' sau:
ActionScript
on (press) {
gotoAndPlay ("my frame");
}
B n có th gii ngh(a o n mã trên b"ng cách tìm hiu các t) chính trong ó. Ch
"press" gi ý rng ngi dùng ang kích chut vào mt cái gì ó, (và trong trng
hp này là cái nút) Ch k tip "gotoAndPlay" do 4 ch "go to and play" gp l i, gi
ý r"ng AS ra lnh cho Flash timt im nào ó trong movie và bt
u chi t) im
ó.
AS có th làm nhng gì?
Flash movie g*m có các scence (cnh), và m i cnh s có 1 timeline (thi gin
biu???) và timeline s có các frame (khung) bt
u t) s 1. Thông thng thì Flash
s chi t) frame 1 cho ti frame cui ca scence vi tc c nh và d)ng l i hay
l%p l i t)
u tuy theo ngi làm Flash.
M'c ích chính ca AS là thay i th t trong cách chi ca Flash. AS có th dùng
b#t frame nào, hay ch y ngc tr l i frame trc hay nhy vài frame r*i chi tip.
Nhng ó không ch là nhng gì AS có th làm c. AS có th bin film ho t hình
ca Flash thành mt chng trình ng d'ng có s tng tác ca ngi dùng. Di
ây là nhng c bn mà AS có th làm:
Ho t hình: B n không c
n AS làm ho t hình, nhng vi AS thì b n có th
t o nhng ho t hình phc t p hn. Ví d', trái banh có th tng xung quanh
mành hình mà không bao gi ng)ng, và tuân theo các nh lut vt lý nh lc
hút, lc ma sát, lc phn v.v Nu không có AS thì bn c
n phi dùng c hàng
ngàn frame làm, còn vi AS thì ch 1 frame cng
Navigation (hông bit dchlàm sao cho hay ): thay vì movie ch chi 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
ngi dùng có th chi b#t c frame nào .v.v
Thu nhp thông tin t) ngi dùng (user input): b n có th dùng AS h&i
ngi dùng 1 c
u h&i, r*i dùng thông tìn ó trong movie hay có th gi cho
server hay làm nhng gì b n mun.
Thu nhp thông tìn t) các ngu*n khác: AS có th tng tác vi 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 thc, màu sc, v trí
ca b#t c movie clip (MC) nào trong movie flash ca b n. B n có th t o
thêm phiên bn hay xoá bi phiên bn ca MC vi AS
Phân tích môi trng ca máy tính: Vi AS b n có th l#y gi t) h iu hành
hay a ch ang chi movie Flash ó.
+iu khin âm thanh trong flash movie: AS là cách tt nh#t iu khin âm
thanh trong Flash,AS có chi chm, chi nhanh, ng)ng, quay vòng .v.v bât k,
âm thanh nào trong Flash.
Phát trin các kh n
ng ca AS
+iu quan tr
ng nh#t mà AS có th làm cho b n là nhng gì cha ai ngh( ti Vi
AS và trí tng tng và óc sáng t o ca b n thì không có gì là không th xy ra vi
AS c.
M'c ích ca các sách, và ca VNFX là hng d$n b n hiu bit v Flash t) ó
b n có th t dùng nó làm ra nhng sn ph!m tuyt vi mà không ai có.
Vit AS
âu
Câu h&i
u tiên nhng ai tìm hiu AS thng h&i là "Vit AS vào âu?". Flash có
mt môi trng làm multimedia khá phc t p. Nu b n ã dùng Flash r*i hay ã
c
qua các hng d$n i kèm vi Flash, thì b n ã bit các yu t c bn nh timeline,
key frame v.v. nêu b n cha bit thì mình khuyên b n nên tìm hiu trc r*i tiêp t'c
ây. - trong m'c Flash T ng Quá, VNFX có post link download 3 cái CD hng
d$n c bn cho ngi cha bao gi dùng Flash.
Vit AS time line
AS có th vit vào key frame b#t c timeline nào. + làm nh vy, b n ch
n key
frame trong timeline trc r*i b n m Action Panel ra (có th nh#n F9) viêt hay
xem AS ã c vit ó. Mình khuyên b n nên dùng Action Panel di d ng
Expert hn là Normal, vì nh vy b n s h
c c nhiu và l hn.
Khi vit AS vào key frame nh vy thì AS key frame ó s ho t ng khi mà Flash
chi ti key frame ó. Ví d' nh lnh AS stop() c %t key frame 5 thì Flash
chi ti key frame 5 thì s d)ng l i cho ti khi có lnh khác. cách vit này g
i là vit
vào time line
Mt trong nhng lý do vit script vào time line là khi b n mun dùng function (hàm),
vì function cho phép chúng ta tái s d'ng o n mã ó t) nhiu ni, nhiu level khác.
Viêt AS nút
Các ph
n t ca Flash movie c g
i là symbol (biu tng). thng thì symbol là
các hình nh. Và có 3 lo i symbol: button (nút), graphich (hình nh), movie
clips(o n phim). 3 lo i trên thì AS không th vit lin vi graphic, còn button và
movie clip thì OK.
Nút s không có tác d'ng gì c nu nh không kèm AS lên trên nó. Mun kèm AS
vào nút thì ch
n nút trên stage (sân kh#u: din tích ca flash movie), r*i sau ó m
Action panel và vit vào ó nh ta vit vào key frame.
AS vit trên nút ch ho t ng khi chut ho%c bàn phím tác ng lên nút mà thôi
Vit AS MC
MC khác vi graphic ch MC c %t tên khi mang vào stage, MC thng là hình
ành ng, và có th có AS kèm theo MC. + vit AS vào MC thì cng tng t nh
ta làm vi nút.
AS kèm theo MC có th iu khin MC ó hay là các MC trong cùng mt timeline
hay các timeline ngoài movie
Bài tp
1. T o mt movie mi
2. t o 3 key frames
3. Dung Flash v m.i hình khác nhau cho m.i frame
4. Ch y th movie (nh#n Control + enter)
5. Sau ó tr l i timeline, vit vào keyframe 2 o n mã : "stop();"
6. Cho ch y th movie l
n na
7. Và k, này b n ch th#y Flash chi ti frame th 2 thì ng)ng, và b n ã thành công
trong vic vit AS :
Gi th 02: S dng Action panel, Using the Script Editing Window
Nu dân * ho coi Timeline là nhà thì dân lp trình vi AS coi Action Panel là ni
c ng' ca mình, t i ó dân AS có th thay i, vit t#t c các lnh. Vì vy r#t quan
tr
ng là b n có th s d'ng quen thuc Action Panel
Flash MX s d'ng các panel giúp b n có th l#y các thông tin v movie b n ang
làm mt cách d dàng. Khi b n cài %t và chay Flash l
n
u tiên, Flash s h&i b n
mun s d'ng Flash nh th nào và Flash s xp %t các panel cho hp lý. B n cng
có th thay i cách xp %t theo ý ca b n.
Nói chung bn nên xp t các panel ca bn làm sao cho thun tin cho bn nht, và
cái này cng cn có kinh nghim ó Mình dùng dual monitor, mình close ht các
panel ch gi li 2 cái chính trên màn hình, mình kéo cái action panel và property
panel qua mt bên monitor, còn cái bên kia cho cái stage, nu cn m panel nào
thì mình dùng phím tt m.
S d'ng Action panel có 2 cách: bình thng (normal) và chuyên d'ng (expert). Khi
mi ch y máy l
n
u thì Action panel c set di d ng bình thng. / d ng bình
thng thì b n không có th ánh trc tip các câu lnh, mà phi ch
n t) các menu
bên tay trái ca panel. Vi setup nh vy thì b n không bao gi ph m phi l.i khi vit
AS c.
Mình s b phn h
ng dn dùng normal vì mình thy dùng normal mode s không
bao gi tin
c, dùng expert mode lúc u hi mt nh
ng bo m là các bn s
hc
c mau và nh lâu hn
S d'ng Action panel vi expert mode thì b n có nhiu t do hn, nhng t do *ng
ngh(a vi trách nhim nên b n phi c!n tht khi vit code. T) normal mode chuyn
sang expert mode thì nh#n phím tt CONTROL + SHIFT + E, chuyn ngc l i thì
dùng CONTROL + SHIFT + N (nh kích chut vào action panel trc khi dùng phím
tt). B n có th i t) Normal mode sang expert mode b#t c lúc nào, nhng i
ngc l i thì ch c khi mà code ca b n không có l.i.
Action panel có popup menu (mi tên ch xung di, n"m góc phi ca action
panel) và trong ó có nhiu lnh r#t tt cho b n khi b n dùng Action panel, nh#t là i
vi Expert mode. B n có th tìm và thay th b#t c câu nào, ch nào trong script ca
b n. Phím tt cho tìm kim là Control + F và cho thay th là Control + H, nh#n F3 thì
Flash s tip t'c tìm ch, câu b n mun tìm.
Mt lnh na là "Goto Line" giúp b n tìm c câu b n mun tìm. Lnh "Check
Syntax" s rà soát script ca b n và tìm nhng l.i cú pháp. Lúc mi tp vit AS, thì
dùng nên thng xuyên dùng Chech Syntax check l i trong sctipt. Lnh tip theo
là "Auto Format" và "Auto Format Options" giúp cho b n trình bày script ca b n cho
d
c hn. B n có th thay i màu sc, font ch v.v. cho script ca b n cho b n
d
c code hn b"ng cách vào Edit > Preferences > ActionScript Editor. Các ph
n
còn l i ca pop-up window cho phép b n c xu#t hay nhp AS di d ng text file
và in script ra gi#y.
Tuy g
i là expert mode nhng thc ra dùng còn d hn là normal mode. Bi vì di
expert mode thi Action panel ch0ng khác gì chng trình "note pad" hay "text pad".
B n ch vic vit nhng gì b n mun vào ó. Khi dùng di expert mode, b n v$n có
th tham kho các câu lnh, các cú pháp ca AS cái khung bên trái ca Action
Panel. Và nu b n tôn th mt s quy tt thì b n s s c chc nng "Code Hint"
ca Action Panel, chc nng này t o nên nhng khung nh& nh& trong ó có nhng câu
lnh ca AS úng hp quy cho b n la ch
n.
+ tr thành mt "cao th" v AS thì b n không th nào không nm vng v Action
panel c.
Sau ây là bài thc hành nho nh&, giúp b n làm quen vi Action panel di expert
mode
1. T o mt movie mi
2. Ch
n key frame
u tiên (frame s 1) ca layer 1 (mình không dch ch layer = lp
vì d trùng vi class= lp)
3. M Action panel (có th dùng phím tt hay vào trong ph
n Window > Action panel
4. Chuyn sang expert mode (dùng phím tt hày vào trong pop-up menu ca Action
panel i)
5. Vào ch vit AS
6. Vit o n code sau:
ActionScript
trace ("I am expert");
Khi b n th movie thì dòng ch "I am expert" s c hin ra trong Output panel, và
mình s cp n lnh trace() vào nhng gi ti
Gi th 03: Hc cách lp trình, Learning to program
Lp trình có th coi là khoa h
c và ngh thut. Vì vy lp trình viên gi&i c
n có 2 iu
kin kin thc v ngôn ng mà h
dùng và tính sáng t o, ít khi nào có trng hp ch
có 1 cách lp trình cho mt án lm.
Trong quá trình vit AS, b n s t o ra cho riêng mình mt phong thái vit code khá
%c trng. Có th mi
u b n s dùng phong cách vit code trong nhng bài vit này,
r*i sau ó b n s t) t) chuyn sang phong cách ca riêng b n
Thng thì khái nim v các ngôn ng lp trình u ging nhau, và trong bài này s
bàn v nhng khái nim lp trình và làm sao áp d'ng nó trong Flash
Cách suy ngh ca computer
Tht ra computer dt lm ch0ng bit suy ngh( âu, ch bit làm vic theo mnh lnh
mt cách không suy ngh(. Vì vy computer không bao gi l.i mà l.i ngi vit lnh
sai khin nó.
Còn AS ch là mt chu i lnh, ch th cho computer, hay úng ra là Flash phi làm
nhng gì trong môi trng runtime (runtime environment).
Khi vit AS thì b n nên t coi mình "ngu" nh computer, và
c l i nhng dòng lnh
AS và ngh( ti kt qu ca vic thi hành lnh ó. Khi t %t mình vào v trí ca
computer, b n s oán c script ca b n s làm nhng gì trong môi trng runtime,
và b n có th th#y ra nhng l.i mà b n vô ý mc phi. Khi mà b n tr thành din viên
tuyt vi trong vai computer thì b n cng tr thành mt lp trình viên tài ba.
Lnh, hàm, và phép tính
Lnh (command) là yu t cn bn ca AS ch th Flash làm mt hành ng c' th.
Lnh c thi hành tuyt i trong các trng hp kh thi. Ví d' nu nh ta vit
gotoAndPlay(5) cho Flash ti frame 5 và chi, nhng nu trong movie không có
frame 5 thì lnh không th làm c.
Hàm (function, mình s dùng t) function nhiu hn là hàm) là ph
n tính toán các
phép tính và cho ra (return) mt kt qu. Ví d' hàm random() s cho ra mt con s
ng$u nhiên nào ó, hay hàm sqrt() s cho ra giá tr bình phng ca 1 s mà hàm
nhn c truyn cho.
Lnh và hàm u có th c truyn cho 1 hay nhiu thông s (parameter, mình s
dùng t) parameter thay vì thông s), và nhng thông s ó giúp cho hàm và lnh c
c' th hn. Ví d' gotoAndPlay(5) thì 5 là thông s, nu nh không có thông s này
thì lnh "gotoAndPlay" s không bit rõ phi nói Flash i âu. cng nh hàm sqrt()
cng c
n có thông s cho ra giá tr bình phng ca s #y.
S khác bit gia hàm và lnh chính là các phép tính. Phép tính thng là nhng d#u
+, -, *, / hay là phép so sánh . Hàm có phép tính, lnh thì không
Bin s
Bin s (parameter) c
n thit trong m
i ngôn ng lp trình vì nó lu tr thông tin v
mt cái gì ó trong chng trình. Bin s g*m có 2 ph
n: tên và giá tr. +ôi khi b n
ch c
n lu tr thông tin trong bin s mt thi gian ngn, ví d' b n mun Flash thi
hành 1 s lnh 10 l
n thì b n c
n m s l
n mà Flash ã thi hành lnh có th ra
lnh cho Flash ngng ngay sau khi thi hành xong lnh l
n th 10. Nhng cng có lúc
b n c
n phi lu l i thông tin trong mt thi gian dài hay trong sut quá trình thi
gian Flash chi.
Tên ca bin s thng là mt nhóm t), hay cng có th ch n gin là 1 t), hay 1
ch cái. Thông thng tên ca bin s nên rõ ràng d hiu và nói lên c tính ch#t
ca thông tin mà bin s ang lu tr. Ví d' nu b n mun lu tr tên ca ngi dùng
trong bin s thì b n nên %t tên bin s ó là userName (mình ngh( %t tên ting Anh
d hiu hn, vì ting vit không d#u cng d b hiu l
m), b n có th %t tên bin s
ó là "n" nhng quá ngn, ngi
c script ca b n s khó hiu, nu %t là name thì
d trùng vi các bin s hay t) khoá khác (_name là mt %c tính ca i tng
MovieClip)
Khi vit AS, b n c
n lu ý vit làm sao cho d hiu và d
c. Và các lp trình viên
quy c tên bin s theo quy tc sau: tên bin s luôn vit thng ch
u tiên, và
vit hoa ch cái
u tiên cho các ch k tip, ví d' userName, userLastName,
userMotherMaidenName v.v.
Lu ý r"ng ch các ch cái và s mi c dùng %t tên cho bin s, và luôn bt
âu tên b"ng ch cái.
Có nhiu lo i bin s lu tr nhiu lo i thông tin, và ngay m.i lo i thông tin cng
có th có nhiu lo i khác nhau na. Nh s (number) là mt lo i giá tr ca bin s, và
di nó còn có các lo i khác nh s nguyên (integer), s ... không nguyên
(floating, double). B n cng có th dùng bin s cha các chu.i (chu.i g
i tt cho
chu.i ch cái), chu.i có th ch có 1 ch cái, nhiu ch cái hay là không có gì ht, t#t
c các chu.i sau ây u hp l: "ablsdfjksl", "a", " ", "". Khi vit mt chu.i thì c
n
dùng d#u ngo%c kép ("") bt
u và kt thúc chu.i.
Trong các ngôn ng lp trình khác nh Java, C++, hay ngay c ActionScript 2.0 trong
Flash MX 2004 thì b n phi xac nh trc lo i thông tin nào b n s lu trong bin
s. Nhng vi ActionScript 1 (trong FlashMX) thì b n không c
n làm vic này. Ví d'
bin s userName lúc
u cha 1 chu.i, nhng sau ó l i cha 1 s nguyên thì cng
v$n hp l.
Ngoài chu.i và s, còn có nhiu lo i khác na nhng chúng ta s cp ti vào
nhng bài sau.
iu kin
Trong nhng trng hp chúng ta không bit nên ra lnh cho Flash phi làm gì cho
thích hp vi t)ng tình hung thì ta có th dùng "iu kin" ra lnh cho Flash.
Ví d' nu nh b n ra lnh cho Flash không cho ngi dùng coi mt o n phim trong
Flash nu nh user di 18 tu i, nu user trên 18 tu i thì hãy chi o n phim #y.
Trc tiên, Flash s so sánh s tu i ca user vi s 18, nu nh s tu i ca user tho
mãn iu kin chúng ta %t ra thì Flash s có 1 giá tr true t) phép so sánh trên, và
ngc l i s là false +iu kin s luôn luôn là úng (true) hay sai (false). Mt giá tr
ch có úng hay sai thì c g
i là boolean. Sau khi thc hin phép so sánh và có
c kt qu t) phép so sánh trên, Flash s ch
n mt trong 2 gii pháp do chúng ta
a ra cho t)ng trng hp.
+ôi khi chúng ta c
n có nhiu iu kin hn ch là n gin "true" hay "false", ví d'
nh b n mun Flash chi o n phim A cho ng)i trên 18 tu i, di 18 nhng trên 13
thì chi o n phim B, và nhng ai di 13 thì chi o n phim C.
Vòng lp
Con ngi làm ra computer vì li không mun làm nhiu, mà bán cái cho
computer. Nh#t là phi làm i làm l i 1 vic nào ó thì càng nhàm chán. Vì vy vòng
l%p (loop) là mt yu t quan tr
ng trong các ngôn ng lp trình. AS cng vy, b n có
th dùng vòng l%p trong script.
Trong vòng l%p, "iu kin" r#t quan tr
ng. M
i vòng l%p c
n có im bt
u và
im d)ng và mt iu kin báo hiu im d)ng ca vòng l%p. Ví d' nh b n
mun cho vòng l%p ch y 10 l
n thì s có 1 bin s dùng m vòng l%p, bt
u t)
0, M.i vòng l%p ch y thì bin s này s tng thêm 1. Khi ti 9 thì vòng l%p s d)ng
l i. Sau ây minh ho ca vòng l%p này:
1. Mt s lnh trc vòng l%p
2. Bt
u vòng l%p, set bin s counter = 0
3. Làm mt s lnh trong vòng l%p
4. Tng bin s counter +=1
5. Nu bin s counter nh& hn 9, tr l i bc th 3
6. Ra kh&i vòng l%p, và tip t'c chng trình.
/ ây chúng ta bt d
u bin s counter = 0 vì quy c thông thng các ngôn ng lp
trình u bt
u vòng l%p 0.
Mt im áng lu ý ca vòng l%p là iu kin c xét trc khi thc hin các lnh
trong vòng l%p. Trong vài trng hp, iu kin s c xét sau khi thc hin các
lnh trong vòng l%p. Chúng ta cng có th ngng vòng l%p trc im d)ng ca nó, và
iu này s c cp ti vào bài k tip
Làm nhng
iu không tng
Lnh, hàm, phép tính, bin s, thông s, iu kin, vòng l%p là nhng ph
n cn bn
trong ngôn ng l%p trình, và cái này thì ai cng bit nhng làm sao phi hp l i thành
mt chng trình hoàn ho mi là cái khó.
Chng trình n gin ch là mt tp hp lnh cho computer gii quyt 1 v#n
nào ó. Vì vy trc khi vit 1 chng trình chúng ta c
n phi xác nh "v#n " c
n
phi gii quyt. Ví d' thc t ngoài i, m b n nh b n ra ch mua gà. Nhng ch
n gin nói ra ch mua gà thì cha vì bit mua gà sng hay gà làm r*i. nu mua
gà sng thì mua lo i nào v.v. +ó là cha nói ti mua gà ch nào, giá c ra sao v.v.
Nu nh b n m nói rõ là ra ch bn thành, mua 1 con gà mái d
u, n%ng khong 2 kg,
vi giá khong 10000 thì tht là d dàng cho b n phi không?
Bit c v#n mua gà r*i thì tìm cách mua gà. B n phi "lên k ho ch", nên nh
b n ch hay i taxi ra ch bn thành. Nu i taxi i hãng nào, tìm s phone g
i,
v.v. còn nh b n ch i thì nh tên nào. R*i nên m%c qu
n áo nào i ch. Ra n ch
thì phi m%c c làm sao, tr tin m%t hay ghi s n. B n th#y không, t) mt chuyn
mua gà n gin vy mà có th tn c ngày tri lên chng trình
Vit AS, b n c
n phi lu ý ti t#t c m
i vic dù nh& cách m#y cho Flash có th
làm úng theo nh ý b n trong m
i tình hung. Các chng trình có bug không phi
vì ngi vit d1 mà vì cha ngh( ti ht m
i tình hung thôi.
Tóm l i, iu quan tr
ng trong lp trình là kh n0ng phân tích mt v#n chính thành
nhiu v#n nh& cho ti khi không còn nh& hn na, và sau ó xây dng chng
trình t) gii quyy các v#n nh& lên d
n cho ti v#n chính.
Vit mã hoàn chnh
B
(bug) n gin là l.i ca chng trình mà b n t o ra. Bug có th ch là nhng l.i
cú pháp n gin, hay là nhng l.i phc t p do cách b n gii quyt v#n trong môi
trng runtime.
+ tránh có bug trong script ca b n thì b n nên tn nhiu thì gi vào giai o n phân
tích, thit k chng trình cho script ca b n. Kim tra các o n code nhiu l
n, và
óng vai "computer" cho tht ging, )ng suy ngh(, mà thi hành các lnh trong script
ca b n. Vit t)ng o n code nh& r*i ráp l i vi nhau (vì vy mà lp trình theo hng
i tng c s d'ng nhiu nh#t)
Nu script ca b n có bug thì )ng th mà nn lòng, vì không có chng trình nào do
con ngi làm ra mà không có bug c. Vì vy b n )ng c gng viêt code sao cho
tuyt ho không có l.i. Nu có bug thì b n dit bug thôi B n có th chu!n b
"chin #u" vi bug b"ng cách vit code sao cho d hiu và d
c, vit nhiu chú
thích cho các o n mã. +ôi khi dit bug (debug) r#t n gin nhng có khi cng r#t
kho mà bit bug âu dit. Flash có kèm theo vài công c' giúp b n debug d dàng
hn, chúng ta s nói ti các công c' này trong bài ti.
Gi th 04: Viêt code trong Flash, Writing code in Flash
Khi b n vit script, b n s dùng t#t c nhng t) khóa, và ký hiu v.v. Vy trc tiên
chúng ta s phân tích mt o n script sau ây. +o n script này gn vào 1 button.
ActionScript
on (press) {
var myVariable = 7;
var myOtherVariable = "Macromedia";
for (var i=0; i<10; i++) {
trace(i);
if (myVariable + 3 == 5) {
trace(myOtherVariable);
}
}
}
Dòng
u tiên xác nh nhng o n code sau ó c kích ho t khi mà user nh#n vào
nút. hàm on(press) ch có th s d'ng trong vào trong nút mà thôi. Ngoài ra b n có
th dùng on(release) nu nh b n mun 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à cui o n code, gói o n code ó vào làm mt, và u
c kích ho t khi nh#n nút. Các b n lu ý th#y o n code c vit vào trong cho
d nhn th#y c o n code này ph' thuc vào on(press). Các b n nên vit lùi vào
trong cho nhng o n code ph' thuc vào 1 lnh hay hàm nào ó.
Dòng th hai lp ra bin s (mình s vit tt là var nhe) tên myVariable, và %t giá tr
b"ng 7 cho nó. tng t hàng k tip lp ra var tên là myOtherVariable và cho giá tr
ca nó là "Macrmedia". C 2 câu này c kt 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 tin nhe) for (s nhc ti các
lo i loop phía di) và các iu kin ca loop này. Nó s l%p 10 l
n vi iu kin
bt
u là i=0 và nó s tng thêm 1 cho m.i l
n l%p cho ti khi nó lên ti 9. Tng t
nh on(press), for loop cng 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 iu kin ca for loop c th&a mãn.
Dòng th 5 là lnh trace(), lnh này ch vit thông tin ra output window trong lúc
b n làm vic vi Flash, user s không th#y c. K tip là iu kin, if là t) khoá
trong Flash, và nó s kim tra kt qu ca phép so sánh myVariable + 3 ==5. Nu mà
kt qu là úng thì nó s kích ho t lnh trace trong, và s vit ra output window giá
tr ca myOtherVariable
Vy là b n ã th#y mt o n script hoàn chnh b"ng AS r*i. Tip theo chúng ta s nói
n vài ph
n khác ca AS.
Output window
/ trên chúng ta có nhc ti output window, mà không nói rõ là gì. Output window là
mt window trong software Flash, và ch xu#t hin khi mà b n chy th movie. Nu
Flash compile movie cho b n và phát hin ra l.i thì Flash s vit ra các output
window này. Trong khi ch y th movie, thì lnh trace() mi có th vit các thông tin
ra output window. Output window r#t quan tr
ng trong vit "dit b
", dùng nó chung
vi trace b n có th quan sát các thông s, bin s, các i tng, thuc tính i
tng .v.v
Trong lúc h
c AS, b n có th vit mt
an script ngn không làm gì c nhng ch
vit thông tin ra output window, nh o n code trên.
Thc hành: vit thông tin ra output windown
Cách tt nh#t hiu rõ chc nng ca output window là s d'ng nó. Bây gi mình s
vit mt o n code ngn gi thôi tin ra output window nhe.
1. T o mt file mi
2. Ch
n frame
u tiên ca movie, m Action panel. Chnh kích thc cho action
panel ln vit, và nh dùng expert mode
3. Kích chut vào ph
n vit script và vit câu sau: trace("hello world");
4. Ch y th movie (Control + Enter)
5. B n th#y gì output window? (Nu output window ca b n cha m thì hãy nh#n
F2)
Ging nh action panel, output window có 1 cái pop-up menu nho nh& trên góc
phi. B n có th dùng nó copy, xoá hay save ni dung ca output window hay có
th tìm kim ch, v.v. Ngoài ra, pop-up menu này có ph
n cho b n chnh ch "dit
b
", b n có th ch
n không c
n output window in ra các l.i (none), hay ch in l.i
(error), hay ch in cnh báo (error) và cui cùng là in ra chi tit các l.i hay cnh báo
(verbose)
Bin s cc b và toàn b
/ trong gi th 3, chúng ta có nhc n variable (bin s) dùng lu tr thông tin.
Và s d'ng variable trong AS r#t d dàng. B n ch c
n #n nh giá tr cho variable. Ví
d': myVariable = 7. Chúng ta t o variable có tên là myVariable và #n nh 7 là giá tr
cho nó. (b n có th %t tên cho variable là b#t c gì b n muôn)
Bây gi b n có th th vit o n code sau:
ActionScript
var1= 7;
var2= "hello world";
trace ("var1: " + var1+ " /var2: " + var2);
Khi b n ch y th movie thì output window s có hàng ch sau: var1: 7 /var2: hello
world Vì s 7 và "hello world" c cha trong var1 và var2 s c in ra.
Variable có 2 lo i, local và global. Global variable (bin s toàn b) thì b n có th
truy cp giá tr ca nó b#t c ni nào trong movie. T o global variable không òi
h&i mt b n phi làm mt cái gì %c bit c, b n có th dùng nó nh cách trên, và
Flash t ng bin nó thành global variable. Flash movie dùng h thng level, và
timeline ca movie chính là root leve (gc), còn các movie clip cng chính là mt
Flash movie nh& trong Flash movie ln. Các hình nh, script trong mt movie clip
là 1 level th#p hn root level.
Local variable (bin s c'c b), khác vi global variable, local variable ch có tr
truy cp trong cùng mt o n code, hay trong cùng mt timeline. Khi dùng local
variable thì khi ra kh&i timeline hay o n code ó thì Flash s xoá local variable ra
kh&i b nh. Mun t o local variable thì dùng t) khoá var trc tên ca local
variable, ví d': var myLocal = "This is local"; B n ch c
n dùng t) khoá var 1 l
n
thôi, nhng l
n dùng sau ó thì ch c
n dùng tên ca local variable thôi. Ví d' o n
code:
ActionScript
var myLocal = 9;
myLocal = 11;
trace(myLocal);
Phép so sánh và các phép tính
So sánh 2 giá tr trong AS r#t n gin, dùng các ký hiu toán h
c nh , =
Khi #n nh giá tr thì dùng d#u =, và cho khác bit thì khi so sánh dùng ==. +o n
code sau xét coi giá tr ca a có b"ng 7 không, và in kt qu ra output window. Và khi
test o n code sau, b n s th#y true output window
ActionScript
var a = 7;
trace(a == 7);
Nu b n dùng ln = vi == thì s b l.i runtime ch Flash s không có th tìm c
l.i này cho b n.
B n có th dùng == so sánh 2 chu.i m$u t:
ActionScript
var myString = "Hello World.";
trace(myString == "Hello World.");
trace(myString == "hello world.");
Khi b n test o n code trên thì b n s có c "true" và "false" output window, vì
l
n so sánh th nh#t thì b"ng nhau, nhng l
n th hai thì không vì ch H và h khác
nhau.
Nu b n mun th coi 2 giá tr có khác nhau không thì dùng ky hiu !=
ActionScript
var a = 7;
trace(a != 9);
trace(a != 7);
Hàm trace
u tiên s cho ra "true" vì 7 khác 9, và cái th hai thì s cho ra "false"
Nu b n mun th giá tr coi ln hn hay nh& hn thì dùng > và <
ActionScript
var a = 7;
trace(a < 8);
trace(a > 6);
trace(a < 1);
+o n code trên s cho ra "true", "true" và "false" trong output window vì "a" qu tht
nh& hn 8 và ln 6, nhng không nh& hn 1.
Nu b n mun th giá tr coi ln hn hay b"ng nhau ho%c là nh& hn hay b"ng nhau
thì dùng ký hiu >= và <=
ActionScript
var a = 7;
trace(a <= 9);
trace(a >= 5);
trace(a >= 7);
+o n code trên s cho ra 3 kt qu "true" c.
B n có th thay i giá tr ca variable vi các phép tính n gin nh cng (+), tr) (-
), nhân (*), chia (/). Ví d' mun thêm 4 vào giá tr ca a thì vit a = a + 4. AS cng có
cách vit tt nh Java, C++ cho vì d' này, a += 4 Nu b n mun thêm 1 vào a thì b n
có th vit nh 2 cách trên a = a +1 và a += 1 và còn cách th 3 a++ . D#u ++ ch làm
tng 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ì trc variable. Bây gi th o n code sau:
ActionScript
var a = 7;
trace(a++);
trace(a);
/ output window b n s th#y 7 r*i mi ti 8. / dòng th 2, hàm trace s cho ra giá tr
ca a trc r*i mi tng giá tr ca a lên thêm 1. Bây gi xem ví d' khác:
ActionScript
var a = 7;
trace(++a);
trace(a);
/ output window b n s th#y 8 và 8. / dòng th 2 ca ví d' này, hàm trace s tng
giá tr ca a trc r*i mi cho ra giá tr ca a. Tng t nh ++, AS cng có cách vit
tt cho giãm giá tr ca variable là d#u -, -=, =- và --. Phép tính nhân và chia thì ch có
*, *=, /, /= thôi.
iu kin
Trong AS và các ngôn ng khác, if ... else chính là các t) khoá ca iu kin. Ting
vit có ngh(a là "nu ... nu không". T) khoá if dùng kt qu ca s so sánh nào ó
i ti quyt nh kích ho t mt o n code. +o n code sau s so sánh giá tr ca
variable a vi 7, nu úng thì Flash s chi frame 10
ActionScript
if (a == 7) {
gotoAndPlay(10);
}
T) khoá if luôn bt
u cho 1 iu kin và tip theo s là s so sánh. Luôn %t code so
sánh gia ngo%c n (). T#t c các code c kích ho t nu iu kin c tho
mãn s trong âu ngo%c móc {}.
T) khoá else b sung cho if trong trng hp b n mun thc hin mt o n code nu
iu kin ca if không c th&a mãn. Ví d':
ActionScript
if (a == 7) {
gotoAndPlay(10);
} else {
gotoAndPlay(15);
}
Nu trng hp c
n th&a mãn nhiu iu kin thì có th dùng cú pháp if .... else if ...
else. B n có th có bao nhiu cái else if cng c.
Nãy gi ta chi nói ti iu kin da trên 1 s so sánh, nhng AS cng cho phép dùng
so sánh a hp (compound comparision). Trong iu kin ca Flash ta có th dùng
nhiu so sánh i ti mt kt qu chính xác hn. Ví d' nu nh a ln 10 và a phi
nh& hn 15 thì ra lnh cho Flash chi frame 10.
ActionScript
if ((a > 10) and (a < 15)) {
gotoAndPlay(10);
}
T) khoá and (còn có th c vit là &&) yêu c
u phi tho mãn iu kin ca 2
phép so sánh. B n cng có th dùng t) khoá or (còn có th c vit là ||)nu nh ch
c
n tho mãn 1 iu kin trong 2 phép so sánh thôi.
ActionScript
if ((a > 10) or (a < 15)) {
gotoAndPlay(10);
}
Vòng lp
Cú pháp ca vòng l%p (loop) thì hi rc ri hn so vi cú pháp ca iu kiên if. nhng
nó tng t nh C, C++, Java. G*m có 3 lo i vòng l%p chính là for loop, while loop
và do-while loop
for loop c coi là vòng l%p chính vi t) khoá for và cú pháp ca nó nhìn nh sau:
ActionScript
for(var i=0;i<10;i++) {
trace(i);
}
Nu b n cho ch y o n code trên thì b n s có c t) s 0 ti 9 output window.
for loop tng giá tr ca variable i trong sut quá trình thc hin loop. +iu kin ca
for loop có 3 ph
n chính, và c cách bit bi d#u ch
m ph!y ( . +
u tiên là iu
kin bt
u vi vic t o local variable cho for loop var i=0. ph
n này for loop ch
thc hin có 1 l
n duy nh#t lúc bt âu. Ph
n th hai là iu kin chính ca for loop
i<10, s c thc hin m.i vòng l%p. Nu iu kin này tho mãn thì mi tip t'c
vòng l%p. Và ph
n cui cùng là phép tính cho s tip ni ca for loop m.i vòng l%p,
ây là i++ nên giá tr ca i s c tng sau m.i vòng l%p trc khi vòng l%p mi
bt
u. 3 ph
n này u c b& vào trong ngo%c n (). Còn nhng code thc hin
trong m.i vòng l%p thì trong ngo%c móc {}. Bây gi chúng ta gi làm computer và
ch y cái for loop này.
1. T o local variable và #n nh giá tr cho nó b"ng 0
2. Kim tra giá tr ca i có nh& hn 10 không, nu nh& hn 10 thì vòng l%p thc
hin các code trong {}, còn không thì ti bc th 5
3. hàm trace vit giá tr ca i output window
4. cng 1 vào giá tr ca i, và tr v bc th 1
5. ra kh&i for loop
Ti bc th 5 thì giá tr ca i s b"ng 10
while loop vi t) khoá while có cú pháp nhìn tng t nh sau:
ActionScript
while (a > 0) {
// code thc hin trong while loop
}
+n gin hn for loop, while loop tng t nh iu kin if n gin, thc hin các
code trong vòng l%p nu iu kin ca while loop c thoã mãn, vì vy b n d dàng
r*i vào trng hp vòng l%p vô h n, và d$n n tình tr ng treo máy. Trong o n code
trên, b n phi làm th nào cho co 1 lúc a s nh& hay b"ng 0 cho vòng l%p ng)ng
l i.
Ging nh while loop, do-while loop có cú pháp nhìn nh sau:
ActionScript
do {
// code thc hin trong do-while loop
} while (a > 0);
Ch khác vi while loop là do-while loop thc hin code trong vòng l%p trc r*i mi
kim tra iu kin. (while loop kim tra iu kin r*i mi ch y code trong vòng l%p)
Mun phá ra kh&i quá trình t hành ca 3 lo i loop trên thì dùng lnh break và
continue. Lnh break s phá ra kh&i loop hoàn toàn trong khi lnh continue thì ch
phá ra kh&i vòng l%p hin t i và bt
u vòng l%p mi. T o ra mt ví d' c' th r#t
phc t p, nên chúng ta t m khoan bàn ti 2 lnh này cho ti các bài sau.
Hàm
Cho ti bây gi các script ca chúng ta u c vit vào frame
u tiên ca moive,
cách này ch tt cho nhng chng trình n gin, nhng nu mà chng trình tr
nên phc t p thì ây không phi là cách. Hàm (function) s cho phép chúng ta c#u t o
và qun lý code d dàng hn trong các chng trình phc t p. Di ây là mt
function n gin:
ActionScript
function myFunction(num) {
var newNum = num + 3;
return newNum;
}
Fuction bt
u b"ng t) khoá function, tên ca function có th là b#t c ch gì nh
cách b n %t tên cho variable, nhng lu ý cách %t tên cho fuction làm sao ngi
ta
c tên có th bit c chc nng ca function. Theo sau tên ca 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 vit này)
c trong ngo%c n (). Function có th co 1
hay nhiu param hay không c
n param cng c. Param ch0ng qua ch la variable
c dùng trong function, nhng variable này c truyn t ngoài vào khi function
c g
i. +o n code c function thc hin s n"m gia ngo%c móc {}. Bây gi
chúng ta phân tích o n code trên. Khi function myFunction c g
i, thì param num
c truyn vào, sau ó function myFunction t o ra mt local variable tên là
newNum, và #n nh giá tr ca newNum b"ng giá tr ca param num cng vi 3. Sau
ó myFunction dùng lnh return #n nh giá tr ca newNum là kt qu ca
myFunction. Lnh return là lnh %c bit ch c dùng trong function mà thôi.
Lnh này s kt thúc function.
+ s dùng function này, dùng nó nh mt lnh hay hàm ca AS, ging nh là trace()
vy ó. +ây là ví d': var a= myFunction(7);. Trc tiên t o mt local var r*i sau #n
nh giá tr ca local var này b"ng kt qu ca myFunction vi param là 7, và cui
cùng thi local var này s b"ng 10.
Mt trong u im ca function là b n có th tái s d'ng. Di ây là hàng code
dùng chung 1 fuction và cho 3 kt qu khác nhau
ActionScript
trace(myFunction(7));
trace(myFunction(13));
trace(myFunction(2));
Khi ch y o n code này thì output windown s là 10, 16 và 5. Ví có th tái s d'ng
nên chúng ta ch c
n thay i code trong myFunction thì t#t c các kt qa có c
t) g
i function này cng thay i theo luôn.
Dot Syntax
Mt iu b n s th#y r#t nhiu trong quá trình h
c AS là dot syntax (h.ng bit dch
sao bây gi) Dot syntax là phng pháp c dùng trong lp trình theo hng i
tng (oob: object oriented programming).
+ây là mt ví d' ca dot syntax. Nu b n mun l#y cn bình phng ca mt s, và
trong Flash ã có s2n function làm chuyn này r*i, và hàm này thuc v i tng
toán, tên là Math. Vy mun g
i function này thì trc tiên b n phi g
i tên i tng
mà fucntion này trc thuc, ó là Math, theo sau ó là d#u ch#m (dot), và r*i ti tên
ca function ó là sqrt. Cách vit nh sau:
ActionScript
var a = Math.sqrt(4);
Mt cách dùng dot syntax khác là truy cp %c tính hay variable ca mt i
tng, nh là movie clip.
ActionScript
var a = myClip._x;
var a = myClip.myVariable;
Chúng ta s cp n i tng Math và MovieClip trong các bài ti, còn bây gi
thì quan tr
ng là b n nm c khái nim v dot syntax.
Chú gi i
Mt trong c tính c
n có ca lp trình viên là vit code làm sao cho d
c và d
hiu. Nhng nhiu khi dù khi vit có c gng cách m#y thì nhng o n code ó v$n
khó hiu cho ngi xem, vì vy mi c
n nhng li chú gii. Mun chú gii trong AS
thì ch c
n dùng ký hiu// trc câu chú gii ó. Nu chú gii nhiu hn vài dòng thì
có th dùng kiu sau/* ..... chú gi i ....*/.
ActionScript
/*
chú gii:
cng 2 cho a
cng 2 cho b
*/
a += 2; // add 2 a
// add 2 to b
b += 2;
Debugging
Thng thì thi gian dit b
tn g
n 1/3 thi gian phát trin chng trình. Nu b n
nm vng c "nghê thut" dit b
thì b n s rút ngn c r#t nhiu thi gian. Có 3
cách dit b
hu hin là: phân tích, vit message ra output window và dùng AS
debugger.
Vi các lo i b
n gin thì phân tích các o n code s giúp b n bt trúng con b
c
n
dit. Dùng output window theo dõi các i tng, vòng l%p, iu kin, và nh vào
ó b n có th bit c ch nào trong code có v#n , cui cùng là dùng AS debugger
có s0n trong Flash. Debugger window cho phép b n có th coi ht t#t c moi thành
ph
n trong movie ca b n, cho phép b n dùng AS b#t ch khi nào và ch nào b n
mun. Tham kho thêm ph
n tr giúp ca Flash bit cách dùng debugger.
Gi th 05: iu khin lung movie, Control the flow of the movie
S d'ng AScript là cách iu khin movie n gn nh#t, nhung l i hiu qu nh#t.
Chng này b n s h
c cách :
làm sao d)ng Movie trên frame
Sao nhy t) frame này n frame kia
t o nút cho phép iu khin movie
t o mt slide show n gin
t o mt biu din
y ..
Dng movie
+ây là câu lnh stop:
ActionScript
stop();
Khi b n dùng câu lnh này , movie ch t m d)ng frame mà b n %t câu lnh. Các
animation bên trong movieClip và các file * h
a v$n tip t'c ch y trên frame ó.
Nhng animation ca time line s b d)ng.
+ cho animation ca timeline tip t'c ch y, ta s d'ng mt lênh n gin ó là lnh
play.. ta s bàn n nó sau.
Ví d'
T i frame 1, b n hãy th mt text box và vit vào ó Ch A
T i frame 2, b n hãy th mt text box và vit vào ó Ch B
T i frame 3, b n hãy th mt text box và vit vào ó Ch C
Bây gi b n hay %t câu lnh stop(); vào Frame 2, b n se th#y ch A xu#t hin r#t
nhanh r*i n ch B, nhng ch C s ko th#y xu#t hin,, +n gin vì câu lnh stop()
ã d)ng animation ca timeline t i Frame 2.
Nh y t frame này
n frame kia
Mt câu lnh c bn ca AS là câu lnh gotoAndPlay. Câu lnh này giúp b n có th
nhy t) frame này n frame mà b n mun. B n có th s d'ng s th t ca frame
hay là tên ca frame
ActionScript
gotoAndPlay(7);
gotoAndPlay(20);
gotoAndPlay("my frame label")
b n có th s d'ng nhiu movies , hay còn g
i là cnh(scene) . Nu Câu lnh
gotoAndPlay ch có mt tham s, thì tham s ó là frame. Nhng nu có 2 tham s,thì
tham s
u tin là tên ca scene, còn tham ss th 2 là s th t ca frame hay tên
frame.
ActionScript
gotoAndPlay("My Scene","My Frame");
Khi b n dùng gotoandPlay,movies s nhy n frame mà b n g
i , và tip t'c ch y,
nhng nu b n mun nó nhy n frame và d)ng l i, b n co th s d'ng gotoAndStop
. Câu lnh này dùng y ht nh gotoAndPlay, vi la ch
n 1 tham s hay 2 tham s.
Ngoài ra có thêm 2 câu lnh cng h
at ng ging gotoAndStop , ó là nextFrame
and prevFrame
+ hiu rõ hn v các câu lnh này, ta s i tip ph
n sau...
To nút (button)
Nút là mt trong 3 biu tng (symbol) chính trong Flash, 2 cái kia là movie cilps và
hình
T o mt button
Có nhiu cách t o nút. Mt trong nhng cách ó là ch
n Insert, New Symbol t)
Menu. Mt hp tho i s hin lên và h&i b n %t tên và la ch
n biu tng ca b n là
lo i Movie clip, button, hay * h
a. B n hãy ch
n Button.
Bây gi trong ca s chính ca Flash s thay i, timeline ca button s thay th
timeline ca movie chính. Có 4 frames trong timeLine ca button. Chúng có tên là
Up, Over, Down, HIt. CHúng th hin 3 tr ng thái ca button, và vùng h
at ng ca
button.
Nu b n %t mt * h
a, ch0ng h n là mt vòng tròn, trong frame
u tiên(UP) và ko
có gì trong 3 frame sau, tr ng thái Over và Down ca button s ging nh tr ng thái
ca Up. VÙng ho t ng ca button cng tng t nh vy.
M%t khác , b n có th t o các hiu ng khác nhau cho button ca b n. VÍ d' nu b n
i m
u ca vòng tròn là màu xanh Frame OVER,có ngh(a là khi b n a chut qua
button, button s chuyn sang màu xanh.
Khi b n t o xong 1 button, b n tr lai movie timeline chính. Và button ca b n ã s2n
sàng trong th vin ca FLash. B n ch viêc b#m F11, tìm button ca b n và kéo th
nó vào ni nào b n c
n trên ca s thit k.
T o script cho button
+ %t script cho button,
u tiên hãy ch
m mt button. Sau ó vào ca s Action
b"ng cách b#m chut phi lên button và ch
n Action t) menu xu#t hin.
Hãy Chc chn r"ng ca s Action ã c %t ch
Expert. B n có th kim tra
bng mt popup menu góc trên cùng bên phi ca ca s .
+ây là mt o n mã thông thng cho button. B n có th %t nó trong ca s mã và
sau ó kim tra movie xem nó h
at ng th nào.
ActionScript
on (release) {
trace("You clicked the button!")
}
on : là mt keyword, c g
i ra x lí mt s kin
Release : Là mt s kin, khi ngi s d'ng click vào button và nh chut ra. +o n
mã trace s c thc thi.
Ngoài ra Release có th thay th b"ng s kin PRESS, s kin này ch khác Release
ch. khi ngi s d'ng b#m vào button, o n mã trace s c thc thi mà ko c
n phi
th chut ra.
Trace : là in ra màn hình dòng ch YOU CLICKED THE BUTTON.
Thc Hành: To mt Slide Show
n gi n...
Có l ko phi din t nhiu v Slide Show, các b n hãy tng tng giông Power
Point.. Khi chúng ta b#m chut, các slide s chuyn sang slide khác.
1. M Flash, ch
n New
2. Trong Layer 1, t) Frame 1 n Frame 4, b n hãy t các biu tng hay hình nh,
text khác nhau phân bit c các frame
3. Sau ó b n t o mt layer mi, hãy %t mt button lên layer này.Tip theo b n ch
n
Frame 4 ca layer 2, và b#m F6. +iu này m bo cho button ca b n s xu#t hin
trong t#t c các Frame ca Layer 1.
Bây gi copy o n mã sau vào button ca b n, chú ý nh là copy vào action ca
button, ch ko phi vào b#t kì frame nào
ActionScript
on (release) {
nextFrame();
}
Cui cùng ch
n Frame 1 Layer 1 action và chèn o n code sau
ActionScript
stop();
Hãy ch y th slide show ca b n = cách b#m Ctrl Enter.
5) Xây dng mt presentation n gin:
Presentation này s d'ng nguyên tc giông ht nh ví d' Slide show trên, các b n
hay down load file FLA xem .. easy
Gi th 06: iu khin movie clip, Controlling Movie Clips
6th Hour iu khin movie clip
B n s h
c
1- ra lnh cho movie clip
2-T o playback cho animation
3-TÌm hiu ích(target) ca movie clip
4-Tp vit code cho movie clip
5-T o movie clip có th ch y lùi l i.
1) Ra lnh cho movie clip :
Mt movie chính có th r#t n gin. NÓ ch c
n 1 frame và mt movie clip. Nhng
bn thân movie clip l i có th là mt animation dài. Vic này d dàng thc hin mà ko
c
n Actioncript.
+ iu khin c movie, b n phi %t tên cho movie clip. Chú ý r"ng mt movies
clip có 2 tên, mt tên s d'ng cho timeline . Mt tên s d'ng cho actioncript. 2 tên
này có th %t trùng tên nhau ho%c khác tên nhau.
Làm sao %t tên cho movie clip :
Ch
n insert -----> New Symbol (ho%c b#m Ctrl F8), %t tên cho movies clip
(nh la ch
n option movies clip, ch ko phi là button hay graphic)
Tên này c s d'ng cho timeline. vd: gear animation
Th movie gear animation vào ca s thit k.. PHía di ca s properties, ban s
th#y box instance name.. +%t tên cho movie
tên này c s d'ng cho Action script , vd : gears
và nh vy, khi b n lp trình , tên s d'ng là gears , ch ko phi gear animation.
b n có th s d'ng d#u ch#m a ra các lênh cho movie ca b n. ví d'
ActionScript
gears.stop();
gears.gotoAndStop(5);
Nh r"ng movie clip luôn có level. Nu o n mã c %t trên chính movieclip, b n
ko c
n s d'ng tên movies, ch c
n gotoAndStop();. Nu b n %t c tên movie vào,
Flash s tìm movie ca b n t) timeline chính.. Tc là s phi qua 2 level. ---> chm
hn chút.
2)Animation Playback Controller
Hãy down load source code t) trên ph
n download và xem. V c bn, chúng ta làm
các vic sau:
- T o mt Movie ,%t tên là gear animation
- +%t instance name là gear(hng d$n trên)
- Frame
u tiên ca time line chính, chèn code
ActionScript
gears.stop();
-T o các button Advance, Previous, Play, Stop, and Rewind
-Code cho các button l
n lt là
Advance
ActionScript
on (release) {
gears.nextFrame();
}
Previous
ActionScript
on (release) {
gears.prevFrame();
}
Play
ActionScript
on (release) {
gears.play();
}
Stop
ActionScript
on (release) {
gears.stop();
}
Rewind
ActionScript
on (release) {
gears.gotoAndStop (1);
}
3) Target mt movie
Level c bn
u tiên ca Flash là time line chính(Level 0). Nu b n mun ra lnh
cho time line này, b n dùng code sau
_root.gotoAndStop();
thm chí nu b n %t code time line chính, b n ko c
n _root. Ch c
n
gotoAndStop();
Gi s nu b n có mt movie trên time line, tc là b n có mt level sâu hn(level 1).
Nu b n t) time line chính, mun goi movie gears , b n phi dùng câu lnh
gears.gotoAndStop(7);
_root["gears"].gotoAndStop(7);
this["gears"].gotoAndStop(7);
C 3 cách trên u ging nhau.. Tuy nhiên this có ngh(a là level hin hành. VÍ d' trên,
level hin hành ca this là level 0. Nhng nu code %t trong movie, level hin hành
s là level 1. B n phi chú ý.
Gi s b n có mt movie khác bên trong movie, tc là b n có level 2. Nu b n mun
t) level 1 g
i n level 2, b n phi dùng _parent.
Parent dùng ging nh root, nhng khác ch., nó c g
i t) level trên. Còn root
c g
i t) level 0 (tc là level gc).
Thun li t) vic s d'ng root, this là b n có th gán bin cho movie clips
ActionScript
var whichClipToUse = "gears";
this[whichClipToUse].stop();
Thun li ca vc s d'ng this nhiu hn root ch. , ko phi lúc nào m
i th cng
xy ra time line chính, ôi khi ta ch mun nó xy ra mt level nh#t nh. Bi vy
this là cách tt nh#t goi level ca mt movie. Tuy nhiên trong nhng trng hp
n gin, hay nh#t là c %t tên cho movies.
4) Mã cho movie clip
Chúng ta ã bàn v button trên, vy v c bn movie clip script cng ging button,
ó là
ActionScript
onClipEvent (load) {
trace("This clip has been loaded.");
}
onClipEvent : key word g
i s kin (ging on ca button)
load : s kin này xy ra khi movie clip xu#t hin l
n
u tiên trên màn hình . NÓ ch
xy ra mt l
n.
Nh r"ng ngay c khi time line chính b )ng, movie clip n"m trên time line v$n tip
t'c ch y. S kiên enterFrame xy ra liên t'c bên trong movie clip m.i khi n mt
frame mi. S kin này s thc thi o n mã mt cách liên t'c cho n khi nó b kt
thúc.
ActionScript
onClipEvent (enterFrame) {
trace("This clip has entered a new frame.");
}
bây gi hãy copy 2 o n code trên vào ca s action ca timeline chính và run .. b n
s th#y
ActionScript
This clip has been loaded
This clip has entered a new frame
This clip has entered a new frame
This clip has entered a new frame
This clip has entered a new frame
dòng ch s tip t'c hin ra cho n khi b n tt movie.
Gi th 07: dch chuyn và thay
i movie, Moving and Changing Movie Clips
Mt movie clip (MC) bao gi cng có các thuc tính, cho phép b n xác nh v trí,
phóng to thu nh&, quay, thm chí làm nó bin m#t.
Chng này các b n s bit cách:
-thay i v trí ca mc
-xác inh v trí chut
-làm sao quay mt mc
-làm sao phóng to mc
-làm sao movie invisible
1) V trí ca MC:
M
i th trong Flash u có v trí. V3 trí này c o b"ng PIXEL. Góc trên cùng bên
trái ca màn hình là v trí (0,0) .Nó là v trí giao ca hàng ngang và ct d
c.
Nu b n s d'ng mt movie m%c nh, thì góc di bên phi s là 550,400. Có nghia
là 550 pixel t) bên trái sang và 400 pixel t) bên trên xung.
nhìn hình sau rõ hn.
2) V trí ca Mouse:
Cng nh movie, mouse cng có th xác inh c t
a .. CHú ý thut ng mouse
ây là nói n con tr& (cursor), ch không phi con chut b n ang c
m trên tay.. ^^
Có hai thuc tính c bn ca con tr& , ó là _xmouse và _ymouse.
Vy _xmouse và _ymouse là thuc tính ca chính i tng mà chúng c gán. Nu
b n s d'ng trên time line chính, thì chúng là thuc tính ca time line. Nu b n s
d'ng chúng trên movie clip, thì nó là thuc tính ca movie clip. Nu xmous y mouse
là thuc tính ca time line chính, nó s m%c nh là góc trái trên cùng. Nu xmouse
ymouse là thucc tính ca 1 movie clip, nó s m%c nh trung tâm ca MC.
H
u ht các trng hp thuc tính liên quan n movie chính, b n nên dùng cách
_root._xmouse và _root._ymouse
+ây là mt o n code ví du
CODE
onClipEvent (enterFrame) {
trace(_root._xmouse);
trace(_root._ymouse);
trace("");
}
Khi b n ch y movie, b n s th#y các c%p s c in ra, ó chính là t
a x,y mouse
.Hãy dch chuyn mouse lên góc trái trên, b n s th#y ó v trí mouse là 0.0. ho%c
góc phi di, t
a là 550 400.
Chú ý: khi b n a chut ra ngoài Flash window, t
a chuôt xmouse y mouse
không thay i. Nu b n di chuyn chut tht nhanh t) trung tâm ca ca s ra ngoài
ca s , các giá tr c v$n ó cho n khi b n quay tr l i ca s . VÌ vy, b n phi
luôn lên k ho c c!n th!n trc khi dùng xmouse, y mouse
3) Làm movie quay
Mt thuc tính khac ó là thuc tính _rotation
Thuc tính rotation ch#p nhn giá tr là góc . Mt vòng tròn chia ra 360 , min
giá tr c thuc tính rotation là -180 và 180. B n có th s d'ng giá tr integer ho c
floating point.
Giá tr ca _rotation luôn luôn trong vòng -180 và 180, ví d' 179, ho%c -179. Nhng
nu b n %t nó là 181, nó s hiu thành góc -179.
vy quay mt movie, n gin là %t giá tr cho nó, b n cng có th s d'ng các
biu toán ++, += thay i giá tr . Hãy xem ví d' sau
CODE
myClip._rotation = 90;
myClip._rotation++;
_root["myClip"]._rotation = 45;
this._rotation += 0.5;
4) Co giãn
àn hi mt MC:
B n có th làm co giãn, thay i chiu dài chiu rng ca movie clip
Scale thuc tính
THuc tính làm vic này là _xscale cho chiu ngang và _yscale cho chiu d
c.
Các giá tr c gán cho x,y scale là ph
n trm. Có ngh(a giá tr 100 là 100 ph
n trm
, ây là thuc tính m%c inh cho mt movie clip gc. B n có th s d'ng các s nh&
hn nh 50 làm movie co l i. Ho%c có th s d'ng s to hn, 200 giãn movie ra.
Thm có th dùng các giá tr âm lt movie.
ví d' 07mousesclae.fla cha mt o n mã mà chúgn ta s g%p r#t nhiu sau này. Nó
kim tra t
a ca mouse,. Sau ó xác inh t) mouse n trung tâm movie xa bao
nhiêu. R*i nó s d'ng khong cách ,c chiu cao chiu rng tính ph
n trm t l
cho movie clip.
CODE
onClipEvent (load) {
// get the original width and height of the mc
origWidth = this._width;
origHeight = this._height;
}
onClipEvent (enterFrame) {
// get the distance from the center of the mc to the mouse
dx = _root._xmouse-this._x;
dy = _root._ymouse-this._y;
// calculate the percentage of scale
sx = 100*dx/(origWidth/2);
sy = 100*dy/(origHeight/2);
// set the scale of the mc
this._xscale = sx;
this._yscale = sy;
}
Chú ý ây ta s d'ng 2 thuc tính mi, _width và _height tr v chiu cao và chiu
rng ca movie clip b"ng Pixel. CHúng c lu giú trong onClipEvent (load) vì
khi ta c
n l#y l i giá tr gc ca movie.
Thuc tính _width, _height
S khác nhau gia scale và width,height í scale s d'ng giá tr ph
n trm. Còn width
height s d'ng pixel . Movie có th có giá tr sau: width 75, height 45, nhng scale
cho c xscale and yscale là 100 ph
n trm.
Di ây là mt 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 ngn g
n hn trên. bi vì nó ko s d'ng s kiên
onClipEvent(load) bi gái tr chiu dài chiu cao ca movie gc ko c
n lu tr.+ây là
mt ví d' cho th#y s d'ng width và height tin hn d'ng xscale ,y scale.
5) Visibility
Mt thuc tính khác ca MC là thuc tính _visible , giá tr ca thuc tính này là giá tr
boolean true , false.
CODE
myClip._visible = false;
hãy xem ví d' 07visible.fla rõ hn.
Gi s ta không mun movie bin m#t h0n, mà ch b m i, ta s d'ng thuc tính
_alpha . Thuc tính có giá tr t) 0 n 100
CODE
myClip._alpha = 50;
Thuc 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.
Nu giá tr ca _visible là 0 thì movie là trong sut hoàn tòan và có th nhìn th#y t#t
c m
i th phía sau movie.
Nhìn hình sau xem cùng 1 movieclip nhng vi 3 giá tr alpha khác nhau, 10, 50
và 100 (t) trái sang)
Gi th 08: chn, kéo th movie clip, Moving and Changing Movie Clips
1. Selection
B n ã bit cách h
c sao t o mt button và cho phép ngi s d'ng click vào làm
s kin ho t ng. Tuy nhiên ây ta s h
c cách click vào ch
n la mt i
tng trên màn hình.
T o mt ch
n la, có ngh(a là user click vào item , nhng không có gì xy ra. Nh
vy, ngi dùng có th la ch
n và thay i la ch
n.
Chúng ta s s d'ng l'a ch
n nh bc
u tiên h
c kéo th movie.
Button bên trong mt Movie method.
Mt movie không th phn ng vi mouse click. Không th s d'ng các s kin nh
on (release) hay (Press). vì vy ta phi tìm cách ánh l)a nó. +ó là s d'ng mt
button bên trong movie. Button có th x lý c mouse click, và min là nó có
ln bao trùm mt movie.
Hãy xem ví d' 08buttoninmc.fla . Ta ch nhìn th#y mt movie clip trên màn
hình.nhng thc ch#t bên trong ca movie clip là mt button.
+ t o ra kh nng select, ta phi t o nhiu frame.Frame
u tiên cha mt button tên
là offbutton. Button này có mã là
CODE
on (release) {
this.gotoAndStop(2);
}
b"ng this, button s g
i n movie clip mà nó n"m trên #y. Frame th 2 cha nút
tng t nhu frame 1 , tên là onbutton, nút này có m
u hi sáng hn ngi dùng
nhn ra khi nó c ch
n.
CODE
on (release) {
this.gotoAndStop(1);
}
cui cùng %t vào frame 1
CODE
stop();
Bây gi hãy ch y xem.
Phng thc hitTest
Có cách khác làm movie có th s lý mouse click mà không c
n button, ó là s
d'ng s kin onClipEvent(mouseDown) ho%c là onClipEvent(mouseUp)ví d'
CODE
onClipEvent (mouseUp) {
this.gotoAndStop(2);
}
Hãy ch y ví d' 08twomcs1.fla xem.B n s th#y t i sao onClipEvent(mouseUp)
khác vi on (Release) . Nu b n click vào movie, c hai u phn ng.Bi vì t#t c
movie clip nhn s kin mouse up c gi n cho chúng.
Quyt inh movie nào c click.
Có mt cách click vào movie mình mun. +ó là s d'ng v trí chut xác nh.
Sa o n mã thành nh sau
CODE
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.gotoAndStop(2);
}
}
vy b"ng cách ràng buc movie clip vi mouse location , ta có th click movie ta
mun.
VIt mã cho selection:
Chúng ta phi cho phép User click lên movies nhiu l
n và thay i tr ng thái ca MC
t) bt sang tt, hay tt sang bt.
+o n mã sau có th xác nh movie ang tr ng thái nào và gi nó n frame khác.
VIc này thc hin b"ng thuc tính _currentFrame . Thuc tính này s
c giá tr 1
kh nó frame th nh#t, giá tr 2 khi nó frame th 2.
CODE
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
if (this._currentFrame == 1) {
this.gotoAndStop(2);
} else {
this.gotoAndStop(1);
}
}
}
Bây gi b n ã th#y các cách t o s ch
n la movie. Cách th nh#t tin li nu b n
mun dùng c các trang thái khác nh Over,up , down.. Cách th hai thì không c
n
nhiu biu tng trong th vin.
Enjoy..
2) Kéo mt movie clip
Bây gi ta s h
c kéo mt movie.
Có 2 cách kéo movie, cách th nh#t là s d'ng lnh . Cách này r#t d s d'ng
nhng nó không cho b n nhiu la ch
n trong vic sa i và giám sát movie.
Cách Drag c bn:
2 câu lnh drag co bn là :startDrag và stopDrag. b n dùng startDrag khi b n mun
movie ca b n i theo chut, còn stopDrag khi b n mun movie ca b n không theo
chut na. +ây là o n code c bn :
CODE
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.startDrag();
}
}
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.stopDrag();
}
}
S kin onClipEvent nhìn tng t nh ta ã làm trên. Chúng s d'ng hitTest
nhn bit movie nào ang c click. Và sau ó câu lnh startDrag và stopDrag c
s d'ng. Khi chut c b#m xung, câu lnh startDrag thc thi. Và ngc l i, khi
chut th ra, stopDrag thc thi.
Hãy xem movie, b n s th#y vi các câu lnh drag, b n có th kéo các movie mt
cách c lp. Nhng chú ý r"ng b n không th kéo 2 movie cùng mt lúc. Ch mt
movie c kéo t i mt thi im. Vì vy b n nên c
n cách drag phc t p và linh
ng hn 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) quyt
nh vic trung tâm ca movie clip có khóa vi v trí chut hay không. Các tham s
còn l i là left, top, right, bottom. Nu b n %t chúng, movie ca b n ch có th c
kéo theo các ràng buc ó.
Kéo nâng cao
Bây gi ta h
c cách kéo movie mà ko dùng câu lnh startDrag và stopDrag. Vy làm
th nào??
B n c
n có 4 ph
n mã sau trong movie ca b n:
Th nh#t là s kin onClipEvent(load), s kin này s %t cho bin global tên là
dragging giá tr false. Khi bin này true, tc là báo hiu r"ng movie có th c kéo.
Th hai, ngòi dùng click vào mt movie. Có ngh(a là dragging = true .
Th ba, quá trình kéo s tip t'c din ra bi s kin onClipEvent(enterFrame). S
kin này ch n gin gán _x và _y (thuc tính ca movie clip) cho _root._xmouse và
_root._ymouse(thuc tính ca con tr& ).
Th 4, nu ngòi dùng th chut , thì bin dragging c gán false.
Sau ây là o n code
y
CODE
onClipEvent (load) {
// start out not dragging
dragging = false;
}
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
// follow the mouse from now on
dragging = true;
}
}
onClipEvent (enterFrame) {
if (dragging) {
// set to location of the mouse
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
// don't follow the mouse any longer
dragging = false;
}
}
Trong ví d' 08complexdrag.fla cha 2 MC. Kim tra movie, nhng ch s d'ng MC
bên trái. +ây là MC làm theo o n code trên. Chú ý xem trung tâm movie c khóa
vi v trí chut nh th nào. Nó làm movie nhy ngay lp tc nu b n click vào nó.
Thông thng, khi b n mun kéo MC ó lên màn hình, b n không mun nó nhy ti
làm khp v trí chut vi trung tâm ca MC. Hãy kéo file xung quanh màn
hình.B n s th#y khi b n click chut vào b#t kì im nào trên movie, movie s lp tc
làm khp v trí click chut vi trung tâm movie. +iu này cng tng t vi câu lnh
startDrag .
+ tránh iu này, chúng ta ch c
n thêm mt o n code nh&. Khi ngòi s d'ng b#m
chut, chúng ta s l#y offset, ây là khong cách t) chut cho n trung tâm ca
movie. Sau ó, thay th b"ng vic gán v trí chut n trung tâm movie, ta se thêm
vào offset cho MC luôn luôn xu#t hin offset bi cùng mt giá tr khi ngi dùng
kéo.
Tng tng , ví d' ngòi dùng click vào mt im cách trung tâm movie 5 pixel.
Sau ó ta luôn mun khong cách 5 pixel ó c duy trì. +iu này làm cho ngi
dùng có th click vào b#t c im nào kéo movie.
+ây là code cho movie 2(bên phi)
CODE
onClipEvent (load) {
// start out not dragging
dragging = false;
}
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
// follow the mouse from now on
dragging = true;
// get the mouse offset
xOffset = this._x - _root._xmouse;
yOffset = this._y - _root._ymouse;
}
}
onClipEvent (enterFrame) {
if (dragging) {
// set to location of the mouse
this._x = _root._xmouse + xOffset;
this._y = _root._ymouse + yOffset;
}
}
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
// don't follow the mouse any longer
dragging = false;
}
}
Hãy xem movie th#y khác bit gia 2 o n code.
3) Kéo và th
Bây gi ta ã bit kéo movie, vy ta s th nó âu.?
V#n là b n mun theo dõi hành ng ca ngi s d'ng và xác inh ngi s dung
%t movie âu.
Basic Drop Zone
Chc nng 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 lnh startDrag o n mã kéo th n gin i, nh ó
ta có th tp trung vào các chc nng mi.
Trong o n mã sau, chc nng hitTest c s d'ng so sánh MC c kéo vi mt
movie khác tên là dragZone trên mt lêvl(root level)
CODE
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.startDrag();
}
}
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.stopDrag();
// see if this mc is inside the dropZone mc
if (this.hitTest(_parent.dropZone)) {
trace("Dropped in zone");
} else {
trace("Dropped outside zone");
}
}
}
Chú ý hitTest không c s d'ng nh các bài trc, chúng ta thay th v trí _x và _y
bi mt movie khác.
Lo i hitTest này so sánh v trí và vùng c bao ph ca 2 movie clip. Trong trng
hp này, nó c so sánh vi _parent.dropZone. Nu có 2 movie è lên nhau, hitTest
tr giá tr True. + xác inh xem MC nào ang t*n t i, hình ch nht ca c 2 movie
u c s d'ng. +iu này có ngh(a là khi b n s d'ng 2 hình tròng, nh trong ví
d', bn thân chính các vòng tròn ó không c ch m vào min là các hình ch nht
ca 2 movie c dùng.
Hãy xem hình minh h
a. T#t c các movie Dragme u n"m è trên DropZone.
Có 2 cách s d'ng hitTest. Th nh#t là s d'ng t
a x,y. Chúng ta có th s d'ng
movie clip nh v trí x,y, r*i sau ó s d'ng dropzone nh mt movie clip th nh#t.
CODE
if (_parent.dropZone.hitTest(this._x,this._y)) {
Vi o n code này, thay th ví d' trên, movie clip s n"m bên trong hình ch nht
ca vùng dropzone.
Chúng ta có th thêm mt bc na vi hittest. B"ng cách thêm tham s th 3 cho
hitTest, chúng ta có th dùng hitTest xem hình d ng chính xác ca movie clip và
xác inh v trí x,y. Bin th 3 này c
n gán true nu b n mun hành vi này. Nu nó
false, nó se hành ng ging nh chc nng hitTest bình thng. +ây là o n code
CODE
if (_parent.dropZone.hitTest(this._x,this._y,true)) {
Bây gi movie kéo th ca ta h
at ng tt hn. Nu b n s d'ng ví d' 08drop.fla,
movie bên phi s s d'ng o n mã gôc, và nó n"m è trên hình ch nht ca
dropzone. Các movie khác s d'ng o n code phc t p hitTest và chúng có trung tâm
nàm bên trong hình d ng gc ca dropzone.
Gi th 09: Ly thông tin t ngi dùng, Getting input from the user
Cho ti bây gi, qua 8 gi làm quen vi AS, t#t c các tác ng ca b n lên trên flash
u c làm qua chut. Nhng ngoài chut, b n có th dùng bàn phím n p thông
tin vào Flash.
Làm sao
phát hin khi ngi dùng bm phím
Có 3 cách phát hin khi mt phím tên bàn phím b nh#n. 1 là dùng nút, 2 là dùng
i tng Key, và 3 là dùng "listener" (ch có Flash MX và MX 2004)
1. Phát hin qua nút:
B n có th dùng nút phát hin khi ngi dùng s d'ng bàn phím. B n chi c
n dùng
lnh x lý s kin on cho o n code ca nút . Ví d' o n code sau s kích ho t khi
mà ngi dùng nh#n phím "a".
ActionScript
on (keyPress "a"){
trace ("Key 'a' pressed");
}
Trong movie m$u 09keybutton.fla có mt nút n gin n"m trên màn hình và vài ví
d' trong ó. Nu b n cho ch y th movie và nh#n phím "a" thì Output window s có
vit ra dòng ch "Key 'a' pressed.". X lý d kin on(keyPress) nh là phi phân
bit d ng ch (case-sensitive) nên nu b n ch code cho nó nhn phím "a" thì nó s
không th nhn c phím "A". May mà chúng ta có th dùng bao nhiu b x lý d
kin cng c.
Nu b n mun x lý các phím khác, nh các phím mi tên, enter, thanh dài (space
bar) ... thì b n phi dùng các code dành riêng cho chúng. Vì d' b n mun x lý phím
mi tên trái (left arrow key) thì dùng o n code sau:
ActionScript
on (keyPress "") {
trace("Left pressed.");
}
Và sau ây là các code dành cho các phím %c bit:
B n có th hp nhiu d kin l i chung vi nhau. Ví d' b n có mt nút và nút ó có
phím tt là "b". Vy khi b n nh#n nút ó hay là nh#n phím "b" thì code ca nút ó s
c kích ho t.
ActionScript
on (keyPress "b", release) {
trace("'b' pressed or button clicked.");
}
Các ví d' trên u có trong movie m$u 09keybutton.fla
2. Phát hin qua i t!ng phím (key object)
M%c dù nút r#t hu ích trong vic phát hin khi ngi dùng nh#n phím, nhng nút l i
không th phát hin c trng hp khi ngi dùng nh#n phím và không nh#t tay.
Ví d' nu b n làm mt game b"ng Flash, và trong ó ngi chi cho th làm cho các
nhân vt trong game di chuyn liên t'c nu nh h
nh#n phím mi tên và không nhât
tay lên.
Cho nhng trng hp nh vy, b n phi dùng i tng Key. +i tng Key là tp
hp ca mt s hàm (function) và h"ng s (constant) c xây dng s0n trong Flash.
B n có th dùng các hàm và h"ng s này biêt c các phím ang b nh#n hay
không. Ví d', nu mun kim tra coi phím mi tên trái có b
ang nh#n hay không thì
dùng o n code sau:
ActionScript
if (Key.isDown(Key.LEFT)) {
trace("The left arrow is down");
}
Hàm Key.isDown s cho ra kt qu úng hay sai ph' thuc vào thông s có phi là
phím ang b nh#n hay không. H"ng s Key.LEFT tng trng cho phím mi tên
trái. vy khi mi tên trái b nh#n thì output window s cho ra hàng ch "The left arrow
is down". Di ây là các h"ng s tng t nh Key.LEFT cp trên
Key.BACKSPACE
Key.ENTER
Key.PGDN
Key.CAPSLOCK
Key.ESCAPE
Key.RIGHT
Key.CONTROL
Key.HOME K
ey.SHIFT
Key.DELETEKEY
Key.INSERT
Key.SPACE
Key.DOWN
Key.LEFT
Key.TAB
Key.END
Key.PGUP
Key.UP
Nu b n mun kim tra xem nu nhng phím bình thng ang b nh#n thì b n phi
dùng Key.getCode l#y mã s ca phím ó dùng trong hàm Key.isDown. +ây là
code m$u khi b n mun kim tra phím "a"
ActionScript
if (Key.isDown(Key.getCode("a")) {
trace("The left arrow is down");
}
Cho 2 ví d' trên, b n có th coi source Fla 09keyobject.fla
3. Key Listener
Key listener c dùng quan sát bàn phím và thông báo cho Flash khi phím c
nh#n.
/ cách th 2 chúng ta dùng i tng Key kim tra coi phím có b nh#n hay
không, nhng nó không th bit chính xác lúc nào thì phím b nh#n. Nu mà ngi
dùng nh#n phím quá nhanh, trc khi onClipEvent(enterFrame) kp kích ho t i
tng key kim tra thì Flash s không bao gi bit c ngi dùng ã nh#n phím.
Mt b#t tin na khi dùng cách th 2 là nu b n mun ngi dùng nh#n phím nhiu
l
n thì i tng Key s không phân bit c ó là 1 l
n nh#n dài hay là nhiu cái
nh#n tht nhanh.
Ví vy Flash MX, MM cho chúng ta thêm mt la ch
n na là Key listeners. b n có
th dùng "listener" (có th hiu nó nh mt quan sát viên) theo dõi s kin ca bàn
phím và thông báo cho Flash ngay khi phím c nh#n.
Listener có 2 ph
n. Ph
n
u là ph
n t o listener. B n phi ra lnh cho listener này
chú ý vào s kin ca bàn phím. +ây là code cho t o listener
ActionScript
Key.addListener(_root);
Lnh Key.addlistner t o listener cho i tng trong thông s là _root. Và i tng
này s c thông báo v s kin ca bàn phím.
Trong o n code trên, _root là i tng c thông báo v s kin ca bàn phím.
Nhng khi nhn c thông báo thì _root phi làm gì? Vì vy chúng ta c
n phi vit
code x lý s kin cho _root. Ví d' o n code sau s c thc hin khi _root nhn
c thông báo v s kin bàn phím.
ActionScript
_root.onKeyUp = function() {
trace(Key.getAscii());
}
Khi ngi dùng nh#n phím, r*i nh#t tay lên thì s t o ra s kin onKeyUP, và s kin
này c thông báo ti _root (b n có th thay th _root bng b#t k, i tng nào) và
sau ó thì hàm Key.getAscii() s cho ra kt qu là mã s ASCII tng ng vi phím
v)a c nh#n, ví d' A = 65, B = 66 .v.v
B n có th xem cái fla m$u 09keylistener.fla, trogn ó có o n code trên (lu ý là
trong fla này s không có gì ht ngoài o n code AS frame
u tiên)
Nu b n mun bit phím c nh#t là gì thay vì ASCII code thì b n có th dùng
String.fromCharCode() cho ra kt qu b n mun tìm. Thay dòng
trace(Key.getAscii()); bng trace(String.fromCharCode(Key.getAscii()));
Tht ra ngoài 3 cách trên, còn mt cách na là dùng b x lý s kin onClipEven ca
movie clip theo d&i s kin keyDown, keyUp, nhng cách này không còn c
dùng trong Flash MX na, vì vy b n ch có th cách này trong các Flash trc MX
thôi.
Bài Tp: Dùng phím di chuyn movie clip
1. T o mt file Flash mi
2. T o mt movie clip n gin
3. Gn o n code này vào movie clip ó
ActionScript
onClipEvent(enterFrame) {
if (Key.isDown(Key.LEFT)) this._x -= 5;
if (Key.isDown(Key.RIGHT)) this._x += 5;
if (Key.isDown(Key.UP)) this._y -= 5;
if (Key.isDown(Key.DOWN)) this._y += 5;
}[/b]
+o n code trên kim tra 4 phím mi tên và di chuyn movie clip theo hng ca mi
tên. B n hãy th movie coi sao
4. Thay i o n code trên cho hoàn chnh hn: t o 2 bin [b]x, y[/b] có giá tr tng
ng vi v trí ban
u ca movie clip, và lp giá tr cho bin [b]speed[/b] bng 5.
M i frame ca movie, mình s kim tra 4 phím mi tên và iu chnh giá tr ca 2
bin [b]x,y[/b] ch không iu chnh v trí ca movie clip, sau ó phi hp vi bin
[b]speed[/b] tìm v trí mi cho movie clip, r*i mi di chuyn movie clip ti ó:
[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 li im. Th nh#t, chúng ta tìm v trí mi ca movie clip trc
khi chúng ta di chuyn movie clip ti ó, và nh vy chúng ta có th kim tra v trí
mi có hp lý không (áo d'ng rât nhiu trong game), và th hai là r#t tin cho chúng
ta thay i tc di chuyn ca movie clip, ch c
n thay i giá tr ca bin speed
Nhp v
n b n
Trong Flash, ngi dùng có th nh$p vn bn vào các khung, và b n có th dùng AS
l#y nhng vn bn ó. + cho ngi dùng có th nhp vn bn, b n phi t o khung
input text và t o cho 1 varible tng ng vi gía tr trong khung input text ó.
(nu b n nào cha bit t o input text thì có th download 3 cái CD hng d$n bên
box tài liu tham kho thêm)
Các chc n
ng và thao tác làm vic vi chu"i ký t (string
Chúng ta có r#t nhiu thao tác vi chu.i ký t:
1. Ghép 2 chu.i l i vi nhau: dùng ký hiu +. Ví d' b n có variable tên là myVariable
có giá tr là "Hello", và mun ghép ch "world" vào sau ó thì dùng nh sau:
myVariable = myVariable + "world" và kt qu có c s là "Hello world". B n
cng có th ghép nhiu hn 2 chu.i l i vi nhau b"ng cách trên.
2. Substrings. Substring là mt chu i ký t nh& trong 1 chu i ký t khác. Ví d' "ell"
là substring ca "hello world" hay là "hello" hay là "elle" hay "hell".
B n có th l#y b#t c substring nào ca 1 string vi cú pháp sau:
String.substring(start, end));. String là i tng chu.i mà b n mun trích ra mt
ph
n, start là s th t ca ký t bt
u cho chu i b n mun lây, và end là s th t
bt âu cho ph
n b n không mun l#y. Lu ý rng ký t
u tiê s có s th t là 0.
Ví d' vi o n code sau, output window s cho ra hàng ch "lo W"
ActionScript
var myString = "Hello World.";
trace(myString.substring(3,7));
Ngoài ra còn 1 cách na dùng tng t nh cách trên nhng 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 ca ch
cái
u tiên và th hai cho chiu dài ca chu.i. +o n code sau cng s có kt qu
tng t nh cách 1
ActionScript
var myString = "Hello World.";
trace(myString.charAt(6));
Các hàm ca
i t!ng String
Sau ây là mt s hàm tiêu biu ca i tng String.
1. indexOf: dùng tìm s th t ca mt ký t hay mt chu.i nh& trong i tng
String. Nu hàm indexOf tìm không th#y ký t hay chu.i nh& thì s cho ra kt qu -1.
+ây là cú pháp:myString.indexOf(substring,start)); substring là ký t hay chu.i
mình mun tìm, start là s th t mình bt
u tìm trong i tng String. Ví d':
ActionScript
var myString = "Hello World.";
//output: 6
trace(myString.indexOf("W",0));
//output: 2
trace(myString.indexOf("llo",0));
2. lastIndexOf: tng t nh indexOf nhng chúng ta tìm ký t cui cùng i ngc
lên tiký t
u tiên.
ActionScript
var myString = "Hello World.";
//output: 2
trace(myString.indexOf("l",0));
//output: 9
trace(myString.lastIndexOf("l"));
3. toUpperCase/toLowerCase: dùng i chu.i t) vit thng sang vit hoa và
ngc l i
ActionScript
var myString = "Hello World.";
//output: HELLO WORLD
trace(myString.toUpperCase());
//output: hello world
trace(myString.toLowerCase());
4. length: là %c tính ca Sring dùng tính chiu dài ca chu.i.
ActionScript
var myString = "Hello World.";
//output: 12
trace(myString.length);
Bài tp:
1. m file 09form-noscripts.fla
2. kim tra tên ca variable ca m.i input text field qua property panel
3. Thêm o n mã sau vào nút CLEAR
ActionScript
on (release) {
clearForm();
}
4. thêm o n mã sau vào nút SUBMIT
ActionScript
on (release) {
submitForm();
}
5. Thêm o n code sau vào frame
u tiên ca movie
ActionScript
function 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: To Và iu Khin V
n B n, Creating and Controlling Text
Dynamic Text
B n cng có th hin th vn bn b"ng dynamic text field. Khác vi Input field mà
b n làm quen trong gi s 9, dynamic text field ch cho phép AS thay i ni dung
vn bn ch không phi là ngi dùng. Vì ni dung, hình thc ca vn bn có th
thay i b#t c lúc nào nên mi g
i là dynamic text
Trc tiên b n t o dynamic text b0ng d'ng c' text trên thanh toolbar, nhng thay vì
ch
n "Input Text" trong property panel, b n ch
n "Dynamic Text"
Bc k tip là ni ni dung ca vn bn trong dynamic text field vi mt variable
b"ng cách vit tên ca variable ó vào trong khung Var trong propery panel. Ví d'
nh b n %t variable myText vào trong khung Var thì khi b n thay i giá tr ca
myText thì vn bn trong dynamic text field cng thay i ging nh giá tr ca bin
myText. Ngoài ra b n còn có th thay i mt s la ch
n cho dynamic text field nh
"Single", "Multiline", or "Multiline No Wrap" x lý trng hp ni dung ca vn
bn quá dài và cònn nhiu la ch
n khác na. (Nu b n cha nm vng ph
n này thì
có th tham kho thêm v s d'ng Flash trong CD c post box tài liu)
nh dng v
n b n theo HTML
(HTML format)
+ nh d ng vn bn kiu HTML, bn phi cho phép dynamic text field ch#p nhn
nh d ng HTML (click vào HTML icon trên property panel) và sau ó b n có th
dùng th4 HTML nh d ng vn bn ca b n. Ví d' o n code này s t o vn bn
sau:
CODE
myText = "This text is bold.";
myText += "This text is italic.";
myText += "This text is underlined.";
myText += "This text is red.";
myText += "This text is Arial Black.";
myText += "This text is large.";
myText += "This text is linked.";
QUOTE
This text is bold.
This text is italic.
This text is underlined.
This text is red.
This text is Arial Black.
This text is large.
This text is linked.
Siêu liên kt (hyper link) trên có tác d'ng ging nh trong HTML nh khác 1 iu là
không có g ch di
Sau ây là nhng th4 HTML có th dùng trong Flash MX
: vit m
: vit nghiêng
: g ch di
: kiu ch
: c1 ch
: màu ch
: link
: +
an vn
: Xung hàng
i T!ng TextFormat
Còn mt cách khác nh d ng cho vn bn là dùng i tng TextFormat. + làm
c iu này, b n c
n phi t o ra 1 bin t) i tng TextFormat. Sau ó b n có th
nh giá tr cho các thuc tính ca nó. Ví d' b n mun kiu ch Arial Black, c1 26, và
màu & thì dùng
an code sau:
CODE
myFormat = new TextFormat();
myFormat.font = "Arial Black";
myFormat.size = 36;
myFormat.color = 0xFF0000;
textInstance.setTextFormat(myFormat);
B n có th dùng i tng TextFormat nh là stylesheet trong các file HTML, mt
khi b n t o nó ra thì b n có th dùng nó b#t c ch nào trong movie
B n có th coi các
an code trên trong file m$u: 10formattext.fla
Variable ngoài Flash
B n có th l#y bin t) ngoài trang HTML vào trong Flash thay i ni dung ca
Flash hay dùng vào b#t c chuyn gì. Ví d' b n phi làm 30 cái banner b"ng Flash
cho 30 trang web, thì b n có th ch làm 1 cái banner thôi, nhng thay .i ni dung
tu, theo t)ng trang web. Mun nhp vn bn hay giá tr ca bin nào t) HTML, b n
ch c
n thêm vài ch vào sau cái tên ca movie trong ph
n và
trong HTML.. +o n mã HTML sau ây nhp giá tr ca bin txtName vào trong Flash
HTML
và trong th4 thì b n thêm ph
n variable và giá tr vào sau tên file
HTML
src="10banner.swf?txtName=Dominico Savio!">
Khi movie load thì nó s t t o variable "txtname" và %t giá tr cho bin này b"ng
"Dominico Savio". B n có th xem trang 10banner.html, 10banner.fla trong cái
source file xem chi tit hn.
B n có th làm nhiu giá tr mt lúc cng b"ng cách này
10banner.swf?txtName=Dominico Savio!&gender=male"
Ngoài l#y bin t) HTML, b n còn có th l#y bin t) các text file. Cách này thích hp
khi b n có nhiu bin nhp vào Flash, hay giá tr ca các bin quá dài gn vào
th4 HTML. B n ch c
n dùng lnh loadVariables() làm c iu này. Ví d':
CODE
loadVariables("10external.txt", _root);
B n có th coi thêm v cách dùng loadVariables() bên box ActionScript
[Bài Tp
Mt ví d' n gin áp d'ng các iu mà b n v)a h
c trong bài này là làm mt cái
"news ticker" nh di ây:
Dòng ch s ch y t) bên phi qua bên trái cho sut bn tin. B n có th tham kho
source fla: 10ticker.fla và test nó có khái nim thêm v "news ticker"
1. T o movie mi
2. T o dynamic text field, vi cao ch v)a 1 hàng, và dài b"ng chiu ngang ca
stage, cho d nhn, b n có th vit vài ch trong ó, nh là "text goes here"
3. T o variable cho text field này là text
4. Ch
n font, nên dùng kiu ch tng t nh Courier New, sao cho b ngang ca
m.i ch b"ng nhau
5. Con text field r*i nh#n F8 i thành Movie Clip, và %t cho nó 1 cái tên nh th
nào tu, b n
6. Sau ó thì gn o n script sau vào movie
CODE
onClipEvent(load) {
// %t bn 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; // bt
u ch cái
u tiên
lineLength = 50; // s ch cái ti a trên news ticker
// thêm các khong trng vào trc dòng tin
for(var i=0;i<lineLength;i++) {
tickerText = " " + tickerText;
}
}
onClipEvent(enterFrame) {
// phát bn tin
text = tickerText.substr(firstChar,lineLength);
// thêm ch cái kê tip
firstChar++;
// phát l i bn tin sau m.i l
n kt thúc
if (firstChar > tickerText.length) {
firstChar = 0;
}
}
Trc tiên b n t o ra bin tickerText cha bn vn news ticker, bin firstChar
cha giá tr ca ch cái
u tiên s th#y trong news ticker, và lineLenght là s ch cái
có th xu#t hin mt lúc trên news ticker. Và t#t c các u c cho vào trong b s
lý d kin onLoad
Trong onEnterFrame, Flash s l#y 50 ch cái
u tiên b& vào bin text ( trong
dynamic text field) cho nó hin th lên màn hình. Sau ó di chuyn sang ch cái
th 2 b"ng câu firstChar++;, và sau cùng là kim tra, nu bn tin ã c phát ht thì
phát l i t)
u.
6. B n có th thay i giá tr ca lineLenght và giá tr ca bn vn trong tickerText
hiu hn v 2 bin này
7. Bây gi b n hãy th dùng loadVariable() nhp bn tin t) text file vào coi có
c không. Nu không thì hãy tr l i ây h&i mình nhe
Happy flashing
Gi th 11: Làm vic vi các con s, Chng này r#t hay và b ích!
Chúng ta ã nghiên cu v text và strings trong các chng trc. Bây gi chúng ta s
nghiên cu v nhng con s. B n s phi 'ng vi nhng con s trong Action
Script trong nhiu trng hp, vì vy b n c
n phi hiu làm sao s d'ng chúng.
Nhng phép toán (operator) và nhng hàm (function) v s
Nhng phép toán n gin
Chúng ta cng ã h
c qua các phép toán n gin r*i. Bây gi hãy xem l i nhé. D#u +
và d#u - s thc hin phép toán cng và tr), d#u * thc hin phép nhân, d#u / thc
hin phép chia.
Ngoài ra, b n cng có th s d'ng nhng phép toán nh +=, -=, *=, /= làm n
gin cho code ca b n. L#y ví d' hai câu lnh di ây s thc hin cùng mt công
vic là cng thêm 7 và bin a
CODE
a = a + 7;
a += 7;
Nhng phép so sánh
Nhng phép toán so sánh nh == so sánh hai s xem có b"ng nhau không, > (ln
hn), = (ln hn ho%c b"ng). Trong Action
Script chúng ta có th so sánh mt s nguyên vi mt s thc. Ví d' nh 7.2 s ln
hn 7.
Math.abs
+i tng Math cha mt tp hp các hàm x lý các con s. Hàm Math.abs s tr v
giá tr tuyt i ca mt s. B n hãy th o n code này xem kt qu th nào nhé:
CODE
trace(Math.abs(-7));
Math.round
Nu b n có mt s thc, nhng b n l i mun hin th cho ngi dùng xem di d ng
s nguyên thay vì phi cho h
xem các con s ph
n thp phân, b n hãy s d'ng hàm
Math.round. Th nhé:
CODE
trace(Math.round(7.2));
Math.ceil, Math.floor
Hai hàm khác dùng làm tròn s thc 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 xung. Th nhé:
CODE
trace(Math.ceil(7.2));
trace(Math.floor(8.3));
Math.min, Math.max
Các b n có th s d'ng hai hàm này tìm s ln hn và s nh& hn trong hai s. Ví
d' hàm Math.min(4, 5); s tr v 4, Min.math(4, 5); s tr v 5
Math.pow
+ây là hàm l#y ly th)a, cng n gin thôi, tham s th nh#t là c s, tham s th
hai là ly th)a. Ví d' b n mun l#y 4 lu5 th)a 3 thì vit th này
CODE
Math.pow(4, 3);
Math.sqrt+ây là hàm tính cn, nhng mà mình xin nói trc luôn là ngoài hàm
Math.sqrt, b n còn có th s d'ng hàm Math.pow vi ly th)a nh& hn 1 tính cn.
Ví d' mun l#y cn 2 ca 4 thì có th s d'ng
CODE
Math.pow(4, .5);
ho%c
Math.sqrt(4);
C hai cách trên u ra cùng mt kt qu là 2.
Hàm s l!ng giác
Nhng hàm ca object class mà các b n c bit trên có v4 nh r#t d h
c. Nhng
còn nhng hàm v lng giác nh sin, cosin thì “khó nut” hn nhiu. M%c dù b n có
th b& qua nhng hàm này nhng nhng hàm lng giác này r#t hu ích và hay trong
vic t o nhng ng d'ng trong Flash. Vy chúng ta hãy cùng tìm hiu cách nó làm
vic nhé!
Hàm sin và cosin s d'ng qua Math.sin và Math.cosin, biu din mi quan h gia
ng th0ng vi ng cong ca mt ng tròn.
Hình di ây biu din mt vòng tròn vi mt s im c ánh d#u b"ng các ch.
Hãy tng tng tâm ca vòng tròn to 0,0; bán kính ca ng tròn b"ng 1. Vì
th, im trên cùng s có to 0,1 và im tn cùng bên phi s có to 1,0
Bây gi b n hãy tng tng vòng tròn trên là mt ng th0ng. Bt
u t) im “a”
có to 1,0 n im 0,-1 qua -1,0 r*i qua 0,1 và cui cùng tr v 1,0.
Trong Flash, và cng nh trong các ngôn ng lp trình khác, chúng ta nh v mt vt
b#t k, b"ng to x, y ca chúng. Vì th, vic chuyn mt im trên ng th0ng
thành mt im có to x, y trên ng tròn r#t hu d'ng. +ó là nhng gì mà hàm
sin và cosin thc hin. Ví d' nh chúng ta %t im “a” là im bt
u ca ng
th0ng ca ng tròn, b n có s d'ng hàm sin và cosin ca 0 tính to x, y ca
im “a” trên ng tròn. T#t nhiên, Math.cos(0) s tr v giá tr 1, Math.sin(0) s tr
v giá tr 0. Kt qu s tr v to ca im “a” 1,0
Vy im “c” s n"m âu trên ng tròn? Nu du.i ng tròn ra s có dài
b"ng 6.28 l
n bán kính, do bán kính b"ng 1 nên dài s b"ng 6.28. +ây là xu#t x
ca h"ng s pi. Pi b"ng 3.14, b"ng mt na dài ca ng tròn.
+ dài ca ng tròn là 6.28 thì mt ph
n t dài ng tròn là 1.57. +im ó
tng ng vi im “c”. Hàm Math.cos(1.57) s tr v mt 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 chuyn các im trên ng tròn thành im có to
x,y
Vy thì nó có ích nh th nào? Gi s nh b n mun t o mt movieclip bay quanh
màn hình trong mt vòng tròn. Làm sao làm c iu ó? Nu làm b"ng frame có
th phi tn hàng trm frame . Ho%c cách khác là có th dùng hàm Math.cos và
Math.sin tính chuyn sang to x,y quanh vòng tròn.
Trong o n code di ây, khi cng thêm n, movie clip s chuyn 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 vi giá tr ca radius tng kích thc ca ng tròn.
Giá tr ca centerX và centerY s c cng thêm cho các to x, y, vì th tâm
ng tròn bây gi không còn 0,0 na mà s v trí 150,150
CODE
onClipEvent(load) {
n = 0;
radius = 100;
centerX = 150;
centerY = 150;
}
onClipEvent(enterFrame) {
n += .1;
this._x = Math.cos(n) * radius + centerX;
this._y = Math.sin(n) * radius + centerY;
}
Ch (string) và s (number)
Có r#t nhiu cách chuyn i t) chu.i sang s và ngc l i. Ví d' nh trng hp
ngi dùng nhp mt s vào text field, b n s nhn giá tr ó và cng thêm mt. Hãy
xem o n code sau ây, num là mt bin giá tr text field
CODE
b = num + 1;
Nu num = 42, vy thì b s là 43, úng không? Xin tr li là sai, kt qu b là 421, n
gin bi vì num là mt chu.i (string) ch không phi là mt s, vì th khi chúng ta
thc hin phép cng num vi 1 có ngh(a là cng ký t “1” vào chu.i num ang có giá
tr “42”.
+ làm cho Flash hiu num là mt s, b n có th s d'ng mt trong hai hàm sau ây
chuyn mt chu.i thành s. Hàm parseInt chuyn mt chu.i thành kiu s nguyên,
hàm parseFloat chuyn mt chu.i thành kiu s thc. Ví d' hàm parseInt(“42”) s tr
v giá tr là 42, nu chúng ta s d'ng parseInt(“42.9”) thì cng s nhn c giá tr là
42 bi vì hàm parseInt không làm tròn s, nó ch l#y ph
n nguyên mà thôi. Còn nu
s d'ng hàm parseFloat(“42.9”) b n s nhn c giá tr là 42.9, mun làm tròn các
b n có th s d'ng hàm Math.round(parseFloat(“42.9”)). Hàm parseFloat cng s tr
v mt mt s nguyên nu tham s truyn vào là mt chu.i s nguyên. Ví d'
parseFloat(“42”) s cho ta s 42. Tr) trng hp b n mun tr v mt giá tr s
nguyên, còn không b n nên s d'ng hàm parseFloat.
Mt nét r#t %c bit và r#t hay ca hàm parseInt là có th chuyn mt chu.i thành mt
s nhng thành nhiu d ng h s khác nhau. Hãy xem mt ví d' cho d hiu:
CODE
parseInt(“FF”, 16);
Hàm này s tr v giá tr là 255, ý ngh(a ca nó là chuyn chu.i cha s FF là mt s
hexa h s 16 thành mt s h nguyên h s 10.
Ngc l i, chuyn t) mt s sang mt chu.i, hãy s d'ng hàm toString. Hàm này
s ho t ng khác vi hàm parse, bi vì nó ho t ng bên trong m.i bin, g
i hàm
này sau d#u ch#m (.). Xem ví d' nhé:
CODE
a = 135;
trace(a.toString() + 1);
Kt qu s là 1351.
Chúng ta cng có th s d'ng hàm toString chuyn mt s thành mt chu.i cha
s di mt h s khác. Ví d' a.toString(16) s tr v kt qu là chu.i “ff”
S ng#u nhiên
T o s ng$u nhiên là mt ph
n quan tr
ng trong công vic thit k game và mt s
ho t hình. Bi vì nu không có sô ng$u nhiên thì nhng o n phim ca b n s ch y
ging nhau, không còn gì thú v na!
+ 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 mt
giá tr t) 0.0 n 1.0 nhng thng thì không tr v giá tr b"ng 1.0
Hãy xem ví d' di ây, b n s nhn c con s ng$u nhiên trong ca s OutPut
CODE
trace(Math.random());
Kt qu tr v i lo i ging nh 0.023268056102097, nhng m.i l
n l i khác nhau.
Mt ví d' khác là b n c
n t o mt s ng$u nhiên t) 1 n 10, vic này r#t n gin,
ch c
n nhân thêm s ng$u nhiên cho 10. +o n code sau s cho ta con s ng$u nhiên
t) 0.0 n 10.0
CODE
trace(Math.random() * 10);
Nhng cái chúng ta c
n là con s ng$u nhiên t) 1.0 n 10.0 ch không phi t) 0.0
n 10.0, vì th, hãy cng thêm 1
CODE
trace(Math.random() * 10 + 1);
Bây gi thì kt qu tr v là 1.0 n 11.0 nhng s không có kt qu 11.0. Hãy s
d'ng hàm Math.floor làm tròn xung.
CODE
trace(Math.floor(Math.random() * 10 + 1));
Tht ra thì con s ng$u nhiên trong máy tính cng cha tht s ng$u nhiên. Bi vì nó
không tht s thay i trong b vi x lý. Thay vào ó s có mt con s chu!n, mt
con s nào ó không bit trc c nh là gi ho%c phút ca h thng, con s này
s c a và mt biu thc r#t phc t p, r#t r#t phc t p mà chúng ta không th
oán c. Kt qu tr v cho chúng ta kt qu dng nh là ng$u nhiên. Kt qu này
s c a và mt hàm tính mt l
n na là lu l i thành con s chu!n tính ng$u
nhiên cho l
n tip theo.
Hãy ngh( v iu này, s ng$u nhiên trong i sng tht s cng không tht s ng$u
nhiên. Nu chúng ta gi mt m%t ca con xúc xc, th!y úng theo mt hng tht
chính xác, chúng ta s có cùng mt kt qu
+c r*i, bây gi hãy th t o mt s ng$u nhiên t) 3 n 7. Làm th nào ây? Ah, có
mt th thut cho b n ây:
CODE
trace(Math.floor(Math.random() * 5 + 3);
Trong ph m vi t) 3 n 7 s có t#t c là 5 s nguyên 3, 4, 5, 6, và 7. Th còn trong
ph m vi t) 50 n 100 thì sao
CODE
trace(Math.floor(Math.random() * 51 + 50);
Là s 51 bi vì trong ph m vi t) 50 n 100 có 51 s, còn nu t) 51 n 100 s là
CODE
trace(Math.floor(Math.random() * 50 + 50);
Mt cách th xem ph m vi ca b n có úng nh ý ca mình không, ó là hãy th
vi s nh& nh#t và s ln nh#t thay cho Math.random(). Giá tr nh& nh#t ca hàm
Math.random() là 0, hãy th vi s 0 nhé
CODE
trace(0 * 51 + 50);
Giá tr ln nh#t ca Math.random() s không chính xác b"ng 1.0 mà s là g
n b"ng,
vy chúng ta hãy th vi giá tr là 0.9999
CODE
trace(.9999 * 51 + 50);
Hãy th xem có úng không nhé!
Di ây là mt ví d' na r#t thú v, movie clip ca b n s nhy n nhng v trí b#t
k,
CODE
onClipEvent(enterFrame) {
this._x = Math.random()*550;
this._y = Math.random()*400;
}
Luyn tp: To mt chng trình máy tính
n gi n
Hãy bt tay vào vic thit k mt chng trình máy tính n gin nhé.
- M mt movie mi trong Flash. Movie ca chúng ta s ging nh hình di ây
Chúng ta s có 10 nút nhp 10 s t) 0 n 9, các nút các phép toán, phím =, d#u
ch#m thp phân, phím C xóa màn hình. Mt text field %t trên hin th nhng
s ngi dùng b#m, text field này s liên kt vi bin display.
- Trong m.i movie clip ca m.i nút b#m, chèn o n code sau
CODE
on (release) {
_parent.keyPressed(this._name);
}
Khi mt nút b#t k, c nh#n thì hàm keyPressed s c g
i level ngoài mà ây
s là level root. Hàm này s truyn tên ca movie clip.
- Quay tr l i level root, m.i movie clip phi có mt tên riêng, không c trùng. +%t
tên ca movie clip theo s ca nó, ví d' nút s 5 s có tên là 5, d#u ch#m thp phân có
tên là “.”. D#u cng, d#u tr), d#u nhân, d#u chia, d#u b"ng, nút C l
n lt %t tên là
plus, minus, multiply, divide, equals, clear.
- Ok, bây gi bt
u vit code nhé! Code này s n"m ngoài movie frame
CODE
// trc 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"; // cha có phép toán nào c
newNum = true; // ánh d#u khi nào ã nhp xong mt s
}
Bin display là mt chu.i (string), s liên kt vi text field hin th ni dung ngi
dùng b#m. Nó s bt
u vi giá tr b"ng 0, có ngh(a là khi ngi dùng mi bt máy
lên thì s m%c nh là s 0
Bin memory lu l i con s trc ó thc hin phép tính. +iu này r#t c
n thit, ví
d' b n b#m s 5, +, 7 thì s 5 nhp vào, khi b n b#m d#u cng, màn hình s c xóa
và s 5 c lu vào memory, s 7 c nhp tip và s thc hin phép tính 5 và 7.
Phép toán ngi dùng ch
n cng c
n c lu vào b nh. Khi ngi dùng ã nh#n
5, +, 7 r*i, sau ó b#m d#u = ho%c mt phép toán khác thì chng trình s g
i l i phép
toán c ã c lu trong bin operation thc hin phép toán trc ca 5 vi 7.
Bin newNum nh là mt bin c hiu báo cho chng trình bit khi nào s kt
thúc mt phép toán. Ví d' khi ngi dùng b#m 5, +, 7 r*i sau ó b#m mt phép toán
khác thì kt qu s c lu l i tính toán tip, lúc này phép toán cha kt thúc,
newNum = false. Còn nu ngi dùng b#m d#u = thì màn hình s hin ra kt qu và
kt thúc luôn phép toán chuyn sang phép toán mi, newNum = true.
- Ph
n tip theo là hàm keyPressed x lý khi m.i nút c nh#n. Hàm keyPressed
s s d'ng c#u trúc switch thay cho c#u trúc if, then, else. C hai cách u ho t ng
tng t nhng cách vit hi khác, b n hãy xem nhé:
CODE
// hàm này c g
i bi nút nh#n
function keyPressed(keyName) {
// do something different for different keys
switch (keyName) {
case "clear" : // khi nh#n nút C
clearAll();
break;
case "plus" : // các phép toán cng, 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) { // hin th s mi trên màn hình
display = keyName;
newNum = false;
if (display == "0") newNum = true; // s không bt
u vi s 0
} else {
display += keyName; // ni thêm s vào màn hình
}
break;
}
}
Khi ngi dùng nh#n nút C thì hàm clearAll() s c g
i, tng t khi ngi dùng
nh#n các phép toán thì hàm operate s c g
i
- Hàm operate s thc hin tính toán. Nó s tìm ra phép toán gia con s trcó và
con s hin thi, s d'ng hàm parseFloat chuyn chu.i thành s.Operation có giá
tr b"ng none khi nhp mt s mi sau khi thc hin xong phép toán và màn hình
c xóa.
CODE
// thc hin phép toán trc
function operate(keyName) {
switch (operation) {
case "none" : // s
u tiên
memory = parseFloat(display); // lu l i s trc
break;
case "plus" : // thc hin 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
}
Luyn tp: Làm nhng hành tinh bay quanh qu$
o
Trong ví d' v lng giác trong ph
n trc, b n ã bit cách làm mt movie clip
quanh quay mt vòng tròn. Bây gi hãy áp d'ng nhng kin thc ó làm mt
movie 4 hành tinh xoay quang m%t tri, hành tinh th 3 s có mt v tinh.
- T o mt movie mi trong Flash
T o 6 movie clip là các vòng tròn, %t tên l
n lt là sun, mercury, venus, earth, mars,
and moo
Các file đính kèm theo tài liệu này:
- 24_Gio_Hoc_Flash_2267_89039819.pdf