Bạn không nhất thiết phải sử dụng ActionScript để sử dụng Flash, nhưng nếu bạn muốn cung cấp hoạt động liên minh người dùng, làm việc với các object khác hơn kiến trúc có trong Flash như
Trang 1PHÒNG KHOA HỌC CÔNG NGHỆ - MÔI TRƯỜNG
g
456456456
Ban CNTT -Phóng tác từ nguyên bản Tiếng Anh
Hà Nội 7.2007
Trang 2C
Tin hoơc Phöí cíơp Vùn phođng
Ăùơc taê Xûê lyâ vađ Xûê lyâ Tûơ ăöơng
Ăùơc taê Ăöì hoaơ AutoCAD
Ăùơc taê Ăöì hoaơ PhotoShop
Caâc thuê thuíơt cuêa Hacker
Khai thaâc ẵa Hiren's Boot
Correl Draw vađ ăöì hoaơ Myô thuíơt
Ăöì hoaơ hoaơt hònh Flash
Kyô thuíơt Thiïịt kïị Website
Kyô thuíơt Líơp trònh Windows Hoơc Internet theo caâch ăún giaên hoaâ Tûđ ăiïín ActionScript cho Flash Sûê duơng Companent trong Flash Líơp trònh mö phoêng vúâi DirectX MapInfor vađ baên ăöì söị
Phaâ moơi míơt khííu gùơp trïn maây tñnh Líơp trònh vúâi MathLab
Xûê lyâ tñn hiïơu söị trong Quín sûơ
Tađi liïơu nađy lûu hađnh nöơi böơ Trung tím Tin hoơc ABCKiïím tra vađ sûêa chûôa: Nguýîn Phûúng Thaêo
Trang 3f TRUNG TÂM TIN HỌC ABC
Hân hạnh Giới thiệu
44444444444444
Bạn thân mến!
Từ khi ra đời Macromedia Flash đã mở đầu cho một cuộc cách mạng về xử lý các hình ảnh động Các version về sau ngày càng bổ sung nhiều hiệu ứng hấp dẫn và tuyệt đẹp, tạo những ấn tượng khĩ quên cho rất nhiều người khi tiếp xúc với nĩ khiến cho nhiều người trong chúng ta tự hỏi, điều gì ẩn giấu đằng sau các hiệu ứng tuyệt vời đĩ Khơng phải điều gì khác, đĩ chính là
ActionScript Flash
ActionScript là kịch bản hành động đáp ứng cho tất cả các tình huống, hành động, thuộc tính, phương pháp của các đối tượng trong Flash Là người đã làm việc với Flash ngay từ những ngày đầu nĩ xuất hiện và liên tục bổ sung cập nhật những thơng tin mới nhất đối với nĩ, tơi rất vinh dự được giới thiệu tài liệu này tới các bạn Trong quá trình biên dịch tự động bằng phần mềm tự viết, cĩ thể cĩ những lỗi bất ngờ, mong các bạn hết sức thơng cảm và gửi gĩp ý trực tiếp cho tơi, để những tài liệu sau khơng cịn những khiếm khuyết đĩ
Mọi ý kiến gĩp ý xin gửi về:
Nguyễn Anh Cường - Điện thoại: 0988.529.310
Hoặc gửi gĩp ý trực tiếp lên Forum http: // khkt.net
Nguyễn Anh Cường xin chân thành cảm ơn
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phịng Khơng Khơng Quân@
Trang 4Một số từ Tiếng Anh không được dịch vì nếu dịch ra sẽ không thoát được nghĩa và
gây rối câu văn khiến người đọc dễ nhầm lẫn:
Contructor Chương trình tạo lập theo mẫu
Handler Cán của chương trình
Listener Trình lắng nghe để gọi lệnh đáp ứng sự kiện
ToolBox Hộp công cụ
Tài liệu này dịch theo MacromediaFlash 2004- ActionScript (Khi mà hãng Macromedia chưa được hãng Adobe mua) tuy nhiên phần bổ sung cho Adobe Flash ActionScript 3.0, hiện tại đang sửa chữa, sẽ được gửi trong thời gian tới
Rất mong được bạn góp ý phê bình
Xin chân thành cảm ơn
Trang 5LỜI GIỚI THIỆU
Macromedia FlashMX2004 và FlashMXProfessional2004 là những công cụ sáng tác chuẩn chuyên nghiệp cho những thành quả kinh nghiệm chịu tác động cao với web Các ActionScript là ngôn ngữ bạn dùng khi bạn muốn phát triển một ứng dụng trong phạm
vi Flash Bạn không nhất thiết phải sử dụng ActionScript để sử dụng Flash, nhưng nếu bạn muốn cung cấp hoạt động liên minh người dùng, làm việc với các object khác hơn kiến trúc có trong Flash (như là các button và các movie clip), hoặc nếu ngược lại một tệp SWF đem lại cho người dùng kinh nghiệm tinh vi hơn, bạn sẽ hầu như chắc chắn muốn sử dụng ActionScript
Các yêu cầu hệ thống
Các ActionScript không có bất cứ yêu cầu hệ thống, kể cả Flash MX 2004 hoặc Flash MX Professional 2004 Tuy nhiên, tư liệu minh chứng thừa nhận bạn đang dùng những thiết lập xuất bản ngầm định cho những tệp Flash của bạn: Flash Player 7 và ActionScript 2.0 Nếu bạn thay đổi cái gì đó ở các thiết lập này, những giải thích và những mẫu code được trình bày trong tư liệu minh chứng có thể không làm việc đúng đắn
Sử dụng những tư liệu dẫn chứng
Tài liệu này cung cấp một cái nhìn tổng quan của cú pháp ActionScript, thông tin trên làm thế nào để sử dụng ActionScript khi làm việc với các kiểu object khác nhau, cộng với những chi tiết trên cú pháp và cách dùng của mỗi yếu tố ngôn ngữ Bắt đầu học quy tắc chung và những khái niệm cơ sở sử dụng trong phần cuối của mỗi tài liệu (Xem Chương
II, “Các ActionScript Basics” trang 21) Tiếp đến, học những kỹ thuật viết và gỡ rối Các script Flash (Xem Chương III, “Viết và Debug các script,” trang 53)
Trước khi viết những các script của riêng bạn, bạn nên hoàn thành những bài học
“Viết các script với ActionScript” và “Tạo một Mẫu với Conditional Logic và Gửi dữ liệu,” thứ mà cung cấp một sổ tay vỡ lòng để làm việc với ActionScript Để tìm những bài học này, chọn Help>How Do I>Quick Tasks
Sau khi bạn hiểu những khái niệm cơ bản, bạn sẵn sàng sử dụng thông tin trong phần cuối của mỗi tài liệu này như nó thích hợp với hiệu ứng cụ thể bạn đang cố giành được Ví
dụ, nếu bạn muốn học làm thế nào để viết một script mà thực hiện một action nào đó khi một người dùng chuột, xem Chương IV, “Diễn xuất các event,” trang 79
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 6Khi bạn tìm thông tin về một lệnh chắc chắn bạn muốn sử dụng, bạn có thể tìm kiếm đầu vào của nó ở Chương XII, “Từ điển các ActionScript” trang 195; mỗi yếu tố ngôn ngữ được liệt kê ở đó theo thứ tự ABC
Các quy định in
Các quy định trong sau đây được dùng trong sách này:
• Chữ không chân chỉ ra Code ActionScript
• Chữ có chân nghiêng chỉ ra một yếu tố, như là một tham số ActionScript hoặc tên đối tượng, mà bạn thay với đoạn text của riêng bạn khi viết một script
Các điều khoản sau được dùng trong sách này :
• Bạn ám chỉ chuyên viên phát triển, người mà đang viết một script hoặc ứng dụng
• Người dùng ám chỉ nhân vật, người mà sẽ chạy kịch bản script và các ứng dụng của bạn
• Thời gian biên dịch là thời gian trong lúc mà bạn xuất bản, xuất, kiểm tra, hoặc gỡ rối tài liệu của bạn
• Runtime là thời gian trong lúc kịch bản script của bạn đang chạy trong FlashPlayer Các điều khoản ActionScript như là method và object được định nghĩa ở chương II,
“Các ActionScript Basics” trang 21
Các tài nguyên bổ sung
Tư liệu làm bằng chứng riêng biệt về Flash và các sản phẩm liên quan có thể kiếm được và không dính dáng với nhau
• Để biết thêm về làm việc trong môi trường sáng tác Flash, xem Sử dụng Flash Help
Để biết thêm về làm việc với các thành phần, xem Sử dụng Components Help
• Để biết thêm về tạo sự liên lạc các ứng dụng với Flash Communication Server, xem
Phát triển Các sự liên lạc Applications và Quản lý Flash Communication Server
• Để biết thêm về truy cập các dịch vụ web với các ứng dụng Flash, xem Sử dụng Flash Remoting
Macromedia DevNet website (www.macromedia.com/devnet) được cập nhật đều đặn với thông tin mới nhất trên Flash, cộng lời chỉ bảo từ người dùng lão luyện, những đề mục nâng cao, các ví dụ, các lời khuyên, và những cập nhật khác Kiểm tra website thường xuyên để biết những tin mới nhất trên Flash và làm thế nào để nhận nhiều nhất phần bên ngoài của chương trình
(www.macromedia.com/support/flash) Macromedia Flash Support Center cung cấp TechNotes, tư liệu minh chứng cập nhật, và liên kết đến các tài nguyên bổ sung trong cộng đồng Flash
Trang 7PHẦNI
CHÀO MỪNG BẠN ĐẾN VỚI ACTIONSCRIPT
Phần này gồm có thông tin cơ sở trên ngôn ngữ ActionScript
Chương 1 gồm có thông tin trên cái gì là mới hoặc đã thay đổi ở ActionScript và FlashPlayer 7 Nếu bạn đã sử dụng ActionScript trước, đừng quên xem lại thông tin này cẩn thận
Nếu bạn là người mới dùng ActionScript, đọc các chương 2 và 3 để nhận một cơ sở tiếp nhận tốt cho việc hiểu Thuật ngữ ActionScript và cú pháp và cho việc học làm thế nào để viết và gỡ rối kịch bản script của bạn
Chương 1: Cái gì mới Trong FlashMX2004ActionScript 8
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 8CHƯƠNGI
ACTIONSCRIPT 2.0 Macromedia FlashMX2004 và Macromedia FlashMXProfessional2004 cung cấp vài sự đề cao mà nó làm cho bạn viết script dễ dàng hơn, tinh vi hơn khi sử dụng ngôn ngữ ActionScript Những nét đặc trưng mới này, thứ mà được thảo luận ở chương này, chứa có chứa các yếu tố ngôn ngữ mới, cải thiện các công cụ gỡ rối và biên tập (Xem “Thay đổi các Trình soạn thảo ActionScript” trang 18 và “Debug thay đổi” trang 18), thêm mào đầu của một chương trình hướng đối tượng nhiều mô hình (Xem “Tạo mới mô hình chương trình hướng đối tượng” trang 19)
Chương này cũng chứa một phần mở rộng mà bạn nên đọc cẩn thận nếu bạn có kế hoạch xuất bản bất cứ tệp nào của FlashMX hoặc về trước đang tồn tại của bạn vào FlashPlayer 7 (Xem “Xuất những script đang tồn tại dùng Flash Player 7” trang 10)
Các yếu tố ngôn ngữ mới và đã thay đổi
Phần này mô tả các yếu tố ngôn ngữ ActionScript mới hoặc đã thay đổi Trong Flash
MX2004 Để sử dụng bất cứ yếu tố này trong các kịch bản script của bạn, bạn đặt đích là FlashPlayer 7 (ngầm định) khi bạn xuất bản tài liệu của bạn
• Các methodArray sort ()và Array sortOn () cho phép bạn bổ sung các tham số chỉ rõ các lựa chọn sắp xếp bổ sung, như là tăng dần và xếp giảm dần, cho biết để tính đến trường hợp nhạy cảm khi sắp xếp, và vân vân
• Các properties Button menu, MovieClip menu, và TextField menu làm việc với ContextMenu mới và các class ContextMenuItem để cho phép bạn kết hợp các menu item tình huống với các objectButton , MovieClip , hoặc TextField
• Class ContextMenu và Class ContextMenuItem cho phép bạn tuỳ biến thực đơn ngữ cảnh được hiện khi một người dùng trong FlashPlayer
•Class Error và các lệnh throw với try catch finally cho phép bạn thi hành diễn xuất ngoại lệ tinh vi hơn
•Các method LoadVars addRequestHeader () và XML addRequestHeader () thêm hoặc thay đổi HTTP yêu cầu headers (như là Content - Type hoặc SOAPAction) gửi với các actionPOST
• Function MMExecute () cho phép bạn đưa các lệnh từ ActionScript ra FlashJavaScript API
• EventListenerMouse onMouseWheel được sinh ra khi người dùng cuốn sử dụng nút cuộn chuột
•Method MovieClip getNextHighestDepth () cho phép bạn tạo MovieClip các instance
lúc runtime và được cam đoan rằng những object của chúng biểu hiện xếp chồng trên các
Trang 9object khác theo thứ tự trục Z của movie clip cha MethodMovieClip get Instance AtDepth ()
cho phép bạn truy nhập năng động MovieClip các instance đã tạo, sử dụng chiều sâu như một chỉ số tìm kiếm
• Method MovieClip getSWFVersion () cho phép bạn quyết định thứ mà version của FlashPlayer được hỗ trợ bởi một tệp SWF đã tải
• MethodMovieClip getTextSnapshot () và object textSnapshot cho phép bạn làm việc với text, ở trong các trường text tĩnh trong một movie clip
• PropertyMovieClip _lockroot cho phép bạn chỉ rõ một movie clip sẽ hành động như _root cho bất cứ movie clip đã tải nó vào, hoặc ý nghĩa của _root trong một movie clip sẽ không thay đổi nếu movie clip đó được tải vào movie clip khác
• MovieClipLoader class cho phép bạn giám sát tiến trình của các tệp như chúng đang được tải vào các movie clip
• Class NetConnection và Class NetStream cho phép bạn tuôn các tệp cục bộ video (Các tệp FLV)
• Class PrintJob cho bạn (và người dùng) điều khiển nhiều hơn về trong từ FlashPlayer
•EventhandlerSound onID3 cung cấp truy cập tới dữ liệu ID3 được kết hợp với một objectSound mà chứa một tệp MP3
• PropertySound ID3 cung cấp truy cập vào metadata đó là một phần của Tệp MP3
• Class System có các object và method mới, và object System capabilities có vài properties mới
• Property TextField condenseWhite cho phép bạn bỏ đi khoảng trắng quá mức từ các trường text HTML được đáp lại trong một trình duyệt
• Property TextField mouseWheelEnabled cho phép bạn chỉ rõ cho biết nội dung của trường text sẽ cuộn khi trỏ chuột nằm trên một trường text và người dùng cuốn bánh xe chuột
• Class TextField StyleSheet cho phép bạn tạo một object kiểu sheet mà chứa những quy định định dạng text như là font size, màu, và các kiểu định dạng khác
• PropertyTextField styleSheet cho phép bạn tác động một object kiểu sheet vào một trường text
• MethodTextFormat getTextExtent () chấp nhận một tham số mới, và object bị nó trả
về, chứa một bộ phận mới
• MethodXML addRequestHeader () cho phép bạn bổ sung hoặc thay đổi HTTP yêu cầu headers (như là Content-Type hoặc SOAPAction) gửi với các actionPOST
Chế độ bảo mật mới và tệp SWF kế thừa
Quy tắc làm thế nào Flash Player xác định xem hai domain là như nhau, đã thay đổi trong Flash Player 7 Bổ sung thêm, quy tắc cho biết định rõ và làm thế nào một tệp SWF
đã phục vụ từ một HTTP domain có thể truy cập một tệp SWF, hoặc tải dữ liệu từ một
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 10HTTPS domain đã thay đổi Trong phần lớn trường hợp, những thay đổi này sẽ không hiệu ứng trừ phi bạn xuất tệp SWF đã tồn tại của bạn vào FlashPlayer 7
Tuy nhiên, nếu bạn có tệp SWF đã xuất bản dùng FlashPlayer 6 hoặc về trước mà tải
dữ liệu từ một tệp được lưu trên một server, và SWF được gọi đang chơi trong FlashPlayer 7, người dùng có thể thấy hiện một hộp thoại mà đã không hiện trước đó, đòi cho biết để được phép truy cập Bạn có thể chặn hộp thoại này từ lúc hiện, bởimột phương tiện
chính sách tệp trên site nơi mà dữ liệu được lưu Muốn biết rõ hơn về hộp thoại này, xem
“Về khả năng tương thích với trước các mô hình bảo mật Flash Player” trang 184
Bạn cũng có thể cần thực hiện một tệp chính sách nếu bạn đang dùng các thư viện chia sẻ runtime Nếu hoặc tải hoặc tệp SWF đã tải, đã xuất bản dùng FlashPlayer 7 và tải hay đã tải các tệp không được phục vụ từ cùng domain chính xác, thì dùng một tệp chính sách để cho phép truy cập Muốn biết rõ hơn về các tệp chính sách, xem “Về cho phép tải
dữ liệu domain-chéo” trang 183
Xuất các script đang tồn tại vào Flash Player 7
Như với bất cứ sản phẩm phát hành mới, Flash Player 7 hỗ trợ nhiều lệnh ActionScript hơn các vesion trước của player; bạn có thể dùng những lệnh này thực hiện script tinh vi hơn (Xem “Các yếu tố ngôn ngữ mới và đã thay đổi” trang 8.)Tuy nhiên, nếu bạn đã dùng bất cứ của những lệnh này trong những script đang tồn tại cũ của bạn, script
có thể không làm việc đúng đắn nếu bạn xuất bản nó dùng FlashPlayer 7
Ví dụ, nếu bạn có 1 kịch bản script với một tên function là Error, script có thể trình diễn để dịch thẳng nhưng có thể không chạy như mong đợi trong FlashPlayer 7, vì Errorbây giờ là một built-in class (và do đó là một từ dành riêng) ở ActionScript Bạn có thể sửa kịch bản script của bạn bằng cách đổi Tên function Error thành bất cứ gì khác, ví như là ErrorCondition
Cũng, FlashPlayer 7 cam kết thực hiện một số thay đổi mà hiệu ứng làm thế nào một tệp SWF có thể truy cập tệp SWF khác, làm thế nào biết dữ liệu ngoài đã tải, và làm thế nào những thiết lập và dữ liệu cục bộ(như là những thiết lập riêng và các object cục bộ lâu dài được chia sẻ) có thể được truy cập Cuối cùng, thói quen của vài điểm đặc trưng tồn tại
đã thay đổi
Nếu bạn có những script đang tồn tại được viết dùng FlashPlayer 6 hoặc về trước mà bạn muốn xuất bản dùng FlashPlayer 7, bạn có thể cần sửa các script cho chúng thích hợp với sự thi hành của FlashPlayer 7 và làm việc như thiết kế Những thay đổi này được thảo luận trong phần này
Sự chấp thuận ECMA-262 Edition 4
Vài thay đổi đã được thực hiện trong FlashPlayer 7 để thích hợp với sự đề xuất chặt chẽ hơn vào ECMA-262 Edition 4 (Xem www.mozilla.org/js/language/es4/index.html)
Bổ sung thêm vào các kỹ thuật chương trình trên nền class sẵn dùng ở ActionScript 2.0(Xem “Mô hình chương trình hướng đối tượng mới” trang 19), các điểm đặc trưng khác đã thêm và chắc chắn làm những thói quen đã phải thay đổi Cũng, khi xuất bản dùng FlashPlayer 7 và sử dụng ActionScript 2.0, bạn có thể thay một kiểu object thành kiểu khác Muốn biết rõ hơn, xem “Sự đổ khuôn các object” trang 36 Những khả năng này không
Trang 11yêu cầu bạn cập nhật những script đang tồn tại; tuy nhiên, bạn có thể muốn sử dụng chúng nếu bạn xuất bản kịch bản script của bạn vào FlashPlayer 7 và sau đó tiếp tục xét lại và nâng cấp chúng
Không như thay đổi đã đề cập trên, thay đổi đã liệt kê trong bảng sau (vài thứ cũng tận dụng sự chấp thuận ECMA) có thể là nguyên nhân những script đang tồn tại làm việc khác biệt chúng đã làm trước đó Nếu bạn đã dùng những nét đặc trưng này trong những script đang tồn tại mà bạn muốn xuất bản dạng Flash Player 7, xem lại thay đổi để chắc chắn code của bạn còn làm việc như dự định hoặc định rõ xem bạn cần viết lại code của bạn không Những gì liên quan, vì undefined được đánh giá khác trong những trường hợp
cụ thể, bạn nên khởi tạo tất cả các biến trong các script mà bạn xuất ra FlashPlayer 7
Tệp SWF xuất vào Flash Player 7 Tệp SWF xuất vào đời trước đó Flash Player
Trường hợp nhạy cảm được hỗ trợ
( các tên biến mà không giống chỉ
trong hoa thường được làm sáng tỏ
như là các biến khác nhau ) Sự thay
đổi này cũng ảnh hưởng các tệp đã
tải với #include và các biến ngoài đã
tải với LoadVars load () Muốn biết
nhiều hơn , xem “ Trường hợp nhạy
cảm ”trang 25.
Trường hợp nhạy cảm không được hỗ trợ
( các tên biến mà không giống chỉ trong hoa thường được làm sáng tỏ như là cùng biến ).
Định giá undefinedở một ngữ cảnh
số trả về NaN. Định giá undefinedở một ngữ cảnh số trả về
0
trace ( DemCuaToi );//NaN trace ( DemCuaToi );// 1
Khi undefined bị chuyển vào một
string , kết quả là undefined. Khi undefined bị chuyển vào một string , kết
quả là "" ( một string rỗng ).
TenHo = " Nguyen Phuong " TenHo = " Nguyen Phuong "
lastname = " Flender " lastname = " Flender "
trace ( TenHo + middlename +
lastname );// Nguyen Phuong
undefinedFlender
trace ( TenHo + middlename + lastname );// Nguyen Phuong Thao
Khi bạn chuyển một string vào một
Giá trị logic Bool , kết quả là true nếu
string có một độ dài lớn hơn zero ;
kết quả là false khi một string rỗng
Khi bạn chuyển một string vào một Giá trị logic Bool , string là đầu tiên bị chuyển vào một number ; kết quả là true nếu số là không phải 0 , false nếu ngược lại
Khi thiết đặt độ dài của một array ,
my_array = new Array (); my_array = new Array ();
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 12Tệp SWF xuất vào Flash Player 7 Tệp SWF xuất vào đời trước đó Flash Player
my_array [ 6 " = " x " my_array [ 6 " = " x "
trace ( my_array length );// 0 trace ( my_array length );// 7
my_array [ 6xyz " = " x " my_array [ 6xyz " = " x "
trace ( my_array length );// 0 trace ( my_array length );// 7
my_array [ 6 " = " x " my_array [ 6 " = " x "
trace ( my_array length );// 7 trace ( my_array length );// 7
Quy tắc Tên - domain cho các thiết lập và dữ liệu cục bộ
Trong FlashPlayer 6, superdomain hợp pháp được dùng theo ngầm định khi truy cập những thiết lập cục bộ (những sự cho phép truy cập như là camera hoặc microphone) hoặc
dữ liệu lâu dài cục bộ (các object được chia sẻ)
Đó là, các thiết lập và dữ liệu cho tệp SWF được host lưu ở đây.xyz.com, ở đó.xyz.com, và xyz.com được chia sẻ, và tất cả được lưu ở xyz.com
Trong Flash Player 7, domain hợp pháp phải chính xác được dùng theo ngầm định
Đó là, các thiết lập và dữ liệu cho một tệp được host lưu ở đây.xyz.com được lưu ở đây.xyz.com, các thiết lập và dữ liệu cho một tệp được host lưu ở đó.xyz.com được lưu ở đó.xyz.com, và vân vân
Tệp SWF đã xuất bản cho Flash Player 7 , tệp SWF đã xuất bản cho các version về trước của Flash Player Trường hợp nhạy cảm được hỗ trợ ( Tên biến hoa thường bị dịch và phân biệt là khác nhau ) Thay đổi này cũng ảnh hưởng đến các tệp đã tải với
#include và các biến ngoài đã tải với LoadVars load () Muốn biết rõ hơn , xem “ Trường hợp nhạy cảm ”trang 25.
Trường hợp nhạy cảm không được hỗ trợ (Tên các biến mà không giống, chỉ phân biệt chữ hoa được dịch như đang được cùng một biến) Định giá undefined trong một số tình huống trả về NaN
DemCuaToi += 1 ;
trace ( DemCuaToi );//NaN
Định giá undefined trong một số tình huống trả về 0
DemCuaToi += 1 ;
trace ( DemCuaToi );// 1
Khi undefined được chuyển thành một string , kết quả là undefined.
TenHo = " Nguyen Phuong " ;
lastname = " Thao " ;
trace ( TenHo + middlename + lastname );
// Nguyen Phuong undefined Thao Khi undefined được chuyển thành một string , kết quả là ""
( một string rỗng ).
Trang 13TenHo = " Nguyen Phuong " ;
lastname = " Thao " ;
trace ( TenHo + middlename + lastname );
// Nguyen Phuong Thao
Khi bạn chuyển một string vào một giá trị logic Bool, kết quả là true nếu string có một độ dài lớn hơn 0; kết quả là false cho một string rỗng
Khi bạn chuyển một string vào một giá trị logic Bool, string được chuyển đầu tiên vào một số; kết quả là true nếu số khác 0, false nếu ngược lại Khi thiết lập độ dài của một array, chỉ một độ dài string thiết đặt quy cách số Ví dụ, "6" làm việc nhưng " 6" hoặc
trace ( mangcuatoi_array length );// 7
Khi thiết lập độ dài của một array, thậm chí số xấu xí string thiết đặt độ dài:
mangcuatoi_array = new Array ();
trace ( mangcuatoi_array length );// 7
Một thuộc tính mới, System exactSettings, cho phép bạn chỉ rõ những quy tắc nào sử dụng Thuộc tính này được hỗ trợ cho các tệp xuất bản dùng Flash Player 6 hoặc về sau Với các tệp xuất bản dùng Flash Player 6, giá trị ngầm định là false, điều này nghĩa là superdomain hợp pháp được dùng Còn các tệp xuất bản dùng FlashPlayer 7, giá trị ngầm định là true, điều này nghĩa là domain hợp pháp phải chính xác được dùng
Nếu bạn dùng các thiết lập hoặc dữ liệu cục bộ lâu dài và muốn xuất bản một tệp SWF FlashPlayer 6 dùng FlashPlayer 7, bạn có thể cần đặt giá trị này thành false trong tệp xuất
Muốn biết rõ hơn, xem System.exactSettings trang 970
Domain - chéo và subdomain truy cập giữa tệp SWF
Khi bạn phát triển một chuỗi tệp SWF mà truyền thông với từng tệp khác—ví dụ, khi
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 14sử dụng loadMovie (), MovieClip loadMovie (), MovieClipLoader LoadClip (), hoặc các objectLocal Connection—bạn có thể dẫn (host) các movie trong các domain khác, hoặc trong các subdomain khác của một superdomain đơn
Trong các tệp xuất bản dùng FlashPlayer 5 hoặc về trước, không có hạn chế nào trên domain-chéo hoặc subdomain truy cập
Trong các tệp xuất bản dùng Flash Player 6, bạn có thể dùng handlerLocalConnection allowDomain hoặc method System security allowDomain () chỉ rõ domain-chéo được thừa nhận truy cập (Ví dụ, để cho phép một tệp ở SiteNaoDo.com được truy cập bởi một tệp ở SiteNaoDoKhac.com), và không nên thiếu lệnh để cho phép subdomain truy cập (ví dụ, một tệp ở www.SiteNaoDo.com có thể được truy cập bởi một tệp ở store.SiteNaoDo.com)
Các tệp xuất bản dùng FlashPlayer 7 thực hiện truy cập giữa tệp SWF khác nhau, từ các version về trước Đầu tiên, FlashPlayer 7 cam kết thực hiện domain hợp pháp phải chính xác thay thế của superdomain hợp pháp Vì thế, tệp được truy cập (ngay cả khi nó đã xuất bản cho một Player version về trước FlashPlayer 7) phải dứt khoát cho phép domain-chéo hoặc subdomain truy cập; topic này được thảo luận bên dưới Thứ hai, một tệp được host lưu ở một site sử dụng một giao thức bảo mật (HTTPS) phải dứt khoát cho phép truy cập từ một tệp được host lưu ở một site sử dụng một giao thức bảo mật trong (HTTP hoặc FTP); topic này được thảo luận trong phần tới (Xem “Giao thức HTTP tới HTTPS truy cập giữa tệp SWF” trang 182)
Vì Flash Player 7 cam kết thực hiện domain hợp pháp phải chính xác thay thế của superdomain hợp pháp, bạn có thể phải sửa những script đang tồn tại, nếu bạn muốn truy cập chúng từ các tệp, mà được xuất bản dùng FlashPlayer 7 (Bạn có thể còn xuất bản các tệp đã sửa dùng FlashPlayer 6.)
Nếu bạn đã dùng bất cứ câu lệnh LocalConnection allowDomain () hoặc System security allowDomain () trong các tệp của bạn và được chỉ định các site superdomain
để cho phép, bạn phải thay đổi các tham số của bạn, chỉ rõ chính xác các domain thay thế Đoạn code sau đưa ra 1 ví dụ về các kiểu thay đổi bạn, có thể phải thực hiện:
// Flash Player 6 các lệnh trong một tệp SWF ở www BatKySiteCu com
// để cho phép truy cập bởi tệp SWF mà được host lưu ở www SiteNaoDo com
// hoặc ở store SiteNaoDo com
System security allowDomain ( SiteNaoDo com " );
my_lc allowDomain = function ( sendingDomain ) {
return ( sendingDomain = = " SiteNaoDo com " );
}
// Tương ứng với các lệnh để cho phép truy cập bởi tệp SWF
// mà được xuất bản cho Flash Player 7
System security allowDomain ( www SiteNaoDo com " , " store SiteNaoDo com " );
my_lc allowDomain = function ( sendingDomain ) {
Trang 15return ( sendingDomain = = " www SiteNaoDo com " ||
sendingDomain = = " store SiteNaoDo com " );
System security allowDomain ( store SiteNaoDo com " );
my_lc allowDomain = function ( sendingDomain ) {
return ( sendingDomain = = " store SiteNaoDo com " );
}
Tóm lại, bạn có thể phải sửa các tệp của bạn, thêm hoặc thay đổi các câu lệnh
allowDomain nếu bạn xuất bản các tệp dùng FlashPlayer 7 mà gặp những điều kiện sau:
• Bạn đã thi hành script bắt chéo-SWF (sử dụng loadMovie (), MovieClip loadMovie (),
MovieClipLoader LoadClip (), hoặc các object Local Connection)
• Tệp SWF được gọi (của bất cứ version nào) không được host lưu, ở một site sử dụng một giao thức bảo mật (HTTPS) Hoặc tệp gọi và tệp SWF được gọi, cả hai được host lưu ở các site HTTPS (Nếu chỉ tệp SWF được gọi là HTTPS, xem “Giao thức HTTP tới HTTPS truy cập giữa tệp SWF” trang 182.)
• Tệp SWF không ở trong cùng domain (ví dụ, một tệp là ở www.tenmien.com và một là ở store.tenmien.com) Bạn phải thay đổi như sau:
• Nếu tệp SWF được gọi đã xuất bản dùng Flash Player 7, có chứa hệ thống security allowDomain hoặc LocalConnection allowDomain trong tệp SWF được gọi, sử dụng chính xác tên domain phù hợp
• Nếu tệp SWF được gọi đã xuất bản dùng FlashPlayer 6, sửa tệp được gọi để thêm hoặc thay đổi mộtcâu lệnhSystem security allowDomain hoặc LocalConnection allowDomain,
sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này Bạn có thể xuất bản tệp đã sửa, cho hoặc FlashPlayer 6 hoặc 7
• Nếu tệp SWF được gọi đã xuất bản dùng Flash Player 5 hoặc về trước, xuất tệp được gọi ra Flash Player 6 hoặc 7 và thêm một câu lệnh System security allowDomain, sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này
(Các objectLocalConnection không được hỗ trợ ở FlashPlayer 5 hoặc về trước.)
Giao thức HTTP tới HTTPS truy cập giữa các tệp SWF
Như thảo luận trong phần trước, quy tắc cho domain-chéo và subdomain truy cập đã thay đổi trong Flash Player 7 Bổ sung thêm vào domain hợp pháp phải chính xác, bây giờ
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 16đang được thực hiện đầy đủ, bạn phải dứt khoát cho phép các tệp được host lưu ở các site
sử dụng một giao thức bảo mật (HTTPS) truy cập, bởi các tệp được host lưu ở các site sử dụng một giao thức bảo mật nội bộ Quyết định trên cho biết, tệp được gọi đã xuất bản dùng FlashPlayer 7 hoặc FlashPlayer 6, bạn phải thực hiện: hoặc một trong số các câu lệnhallowDomain (Xem “Domain-chéo và subdomain truy cập giữa tệp SWF” trang 13), hoặc dùng các câu lệnh mới là LocalConnection allowInsecure Domain hoặc System security allowInsecureDomain ()
Cảnh báo: Phương tiện một câu lệnh allowInsecureDomain () thoả hiệp bảo mật đã đưa ra
đề nghị bởi giao thức HTTPS Bạn chỉ nên thay đổi nếu bạn không thể cải tổ lại site của bạn để tất cả tệp SWF được phục vụ từ giao thức HTTPS
Đoạn code sau đưa ra 1 ví dụ về các kiểu thay đổi bạn có thể phải thực hiện:
// các lệnh ở một Flash Player 6 Tệp SWF ở https :// www SiteNaoDo com
// để cho phép truy cập bởi Flash Player 7 tệp SWF mà được host lưu
// ở http :// www SiteNaoDo com hoặc ở http :// www SiteNaoDoKhac com
System security allowDomain ( SiteNaoDoKhac com " );
my_lc allowDomain = function ( sendingDomain ) {
return ( sendingDomain = = " SiteNaoDoKhac com " );
}
// Tương ứng với các lệnh ở một tệp SWF Flash Player 7
// để cho phép truy cập bởi Flash Player 7 tệp SWF mà được host lưu
// ở http :// www SiteNaoDo com hoặc ở http :// www SiteNaoDoKhac com
System security allowInsecureDomain ( www SiteNaoDo com " ,
" www SiteNaoDoKhac com " );
my_lc allowInsecureDomain = function ( sendingDomain ) {
return ( sendingDomain = = " www SiteNaoDo com " ||
sendingDomain = = " www SiteNaoDoKhac com " );
}
Bạn cũng có thể phải thêm những dòng lệnh như thế này tới các tệp của bạn, nếu bạn hiện tại không dùng chúng Một sửa chữa có thể là cần thiết, ngay cả khi cả hai tệp ở trong cùng domain (ví dụ, một tệp trong http://www.tenmien.com bị gọi một tệp trong https://www.tenmien.com)
Tóm lại, bạn có thể phải sửa các tệp của bạn, thêm hoặc thay đổi các câu lệnh, nếu bạn xuất bản các tệp dùng FlashPlayer 7, mà gặp những điều kiện sau:
• Bạn đã thi hành script bắt chéo-SWF (sử dụng loadMovie (), MovieClip loadMovie (),
MovieClipLoader LoadClip (), hoặc các objectLocal Connection)
• Tệp gọi không được host lưu sử dụng một giao thức HTTPS, và tệp được gọi là HTTPS
Trang 17Bạn phải thay đổi như sau:
• Nếu tệp được gọi đã xuất bản dùng Flash Player 7, có chứa System security allowInsecureDomain hoặc LocalConnection allowInsecureDomain trong tệp được gọi, sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này
Câu lệnh này được yêu cầu, ngay cả khi tệp gọi và tệp SWF được gọi ở trong cùng domain
• Nếu tệp được gọi đã xuất bản dùng FlashPlayer 6 hoặc về trước, và cả hai tệp (gọi
và được gọi) ở trong cùng domain (ví dụ, một tệp trong http://www.tenmien.com gọi một tệp trong https://www.tenmien.com), không cần thiết sửa chữa
• Nếu tệp được gọi đã xuất bản dùng Flash Player 6, các tệp không ở trong cùng domain, và bạn không muốn xuất tệp được gọi vào FlashPlayer 7, sửa tệp được gọi để thêm hoặc thay đổi một câu lệnh System security allowDomain hoặc LocalConnection allowDomain, sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này
• Nếu tệp được gọi đã xuất bản dùng Flash Player 6 và bạn muốn xuất tệp được gọi vào Flash Player 7, có chứa System security allowInsecureDomain hoặc LocalConnection allowInsecureDomain trong tệp được gọi, sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này Câu lệnh này được yêu cầu, ngay cả khi cả hai tệp ở trong cùng domain
• Nếu tệp được gọi đã xuất bản dùng Flash Player 5 hoặc về trước, và cả hai tệp không ở trong cùng domain, bạn có thể làm một trong hai chúng Bạn có thể hoặc xuất tệp được gọi ra FlashPlayer 6 và thêm hoặc thay đổi mộtcâu lệnhSystem security allowDomain,
sử dụng tên domain phù hợp chính xác, xem trong các ví dụ mới ở phần này, hoặc bạn có thể xuất tệp được gọi vào Flash Player 7, và có chứa trong tệp được gọi một câu lệnh
System security allowInsecureDomain, sử dụng tên domain phù hợp chính xác, xem trong các
ví dụ mới ở phần này
Server-ngoàichính sách các tệp thừa nhận cho truy cập vào dữ liệu
Một tài liệu Flash có thể tải dữ liệu từ một tài nguyên ngoài bởi sử dụng một trong số
dữ liệu gọi tải, sau: XML load (), XML sendAndLoad (), LoadVars load (),
LoadVars sendAndLoad (), loadVariables (), loadVariablesNum (), MovieClip loadVariables (),
XMLSocket connect (), và Macromedia Flash Remoting
(NetServices createGatewayConnection)
Cũng, một tệp SWF có thể nhập các thư viện chia sẻ runtime (RSLs), hoặc các tài nguyên đã định nghĩa trong tệp SWF khác, lúc runtime Theo ngầm định, dữ liệu hoặc RSL phải định cư trong cùng domain, như tệp SWF đó tải dữ liệu ngoài hoặc media
Để làm dữ liệu và các tài nguyên trong các thư viện chia sẻ runtime sẵn dùng vào tệp SWF trong các domain khác, bạn nên dùng một tệp chính sách domain-chéo Một tệp chính sách domain-chéo là một tệp XML mà cung cấp cho server một cách chỉ ra dữ liệu của nó và các tài liệu là sẵn dùng, vào tệp SWF đã phục vụ từ các domain chắc chắn, hoặc
từ tất cả các domain Bất cứ tệp SWF đó, được phục vụ từ một domain, được chỉ định bởi tệp chính sách server, được phép truy cập từ server, dữ liệu hoặc RSLs
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 18Nếu bạn tải dữ liệu ngoài, bạn nên tạo các tệp chính sách, ngay cả khi bạn không dự kiến xuất bất cứ tệp nào vào FlashPlayer 7 Nếu bạn đang dùng RSLs, bạn nên tạo các tệp chính sách, nếu hoặc tệp gọi, hoặc tệp được gọi đã xuất bản vào FlashPlayer 7
Muốn biết rõ hơn, xem “Về cho phép tải dữ liệu domain-chéo” trang 183
Thay đổi soạn thảo ActionScript
Trình soạn thảo ActionScript đã được cập nhật để làm nó tinh vi hơn và dễ sử dụng hơn Những thay đổi này được tổng kết ở đây
Chế độ ngắt dòng Bây giờ bạn có thể dùng các lựa chọn pop-up menu trong Script pane, Debugger panel, và Output panel đặt enable hoặc disable chế độ ngắt dòng Bạn có thể cũng lật đảo chế độ ngắt dòng sử dụng pop-up menu trong các actionpanel Tổ hợp phím tắt là Control+Shift+W
Trợ giúp xem tình huống-nhạy cảm
Khi trỏ của bạn nằm trên một yếu tố ngôn ngữ ActionScript trong các actiontoolbox
hoặc trong Script pane, bạn có thể dùng View Help item trong thực đơn ngữ cảnh để hiện một trang giúp đỡ về yếu tố đó
Nhập các script Khi bạn chọn Import Script từ pop-up menu trong các actionpanel, script đã nhập được copy vào script ở trỏ thanh, trong tệp code của bạn Trong các vesion trước của Flash, nhập một script sẽ ghi đè nội dung của script đang tồn tại
Đơn- breakpoints Để thêm một điểm ngắt gỡ rối trước một dòng code trong Debugger panel hoặc Script pane của các actionpanel, bạn có thể vào lề trái Trong các vesion trước của Flash, vào lề trái, một dòng code được chọn Cách mới để chọn một dòng code Ctrl-
Các chế độ bình thường và chuyên gia không dài hơn trong các action panel Trong các vesion trước của Flash, bạn có thể làm việc trong các action panel, hoặc trong chế độ thường, (trong chế độ mà bạn đã lọc, ở các lựa chọn và các tham số để tạo code), hoặc trong chế độ chuyên gia, (trong chế độ bạn đã bổ sung các lệnh ngay tức khắc vào Script pane) Trong FlashMX2004 và FlashMXProfessional2004, bạn có thể làm việc trong các actionpanel, bởi chỉ thêm các lệnh ngay tức khắc để viết kịch bản pane Bạn có thể còn drag các lệnh từ các actiontoolbox vào Script pane hoặc dùng Button Cộng ( + ) trên Script pane để thêm các lệnh vào một script
Ghim đồng thời nhiều script bạn có thể ghim đồng thời nhiều script bên trong một tệp FLA dọc theo đáy của Script pane trong các action panel Trong các vesion trước của Flash, bạn chỉ có thể ghim một script trong một thời gian
Sơ đồ Script Bên trái của các actionpanel bây giờ chứa hai panes: các actiontoolbox
và một Sơ đồ Script mới Sơ đồ Script là một cái nhìn, theo dõi cấu trúc của tệp FLA của bạn; bạn có thể kiểm soát xuyên suốt tệp FLA của bạn, nhằm định vị Code ActionScript Cửa sổ script được hoà nhập cho việc biên tập các tệp ngoài (Chỉ Flash Professional) bạn
có thể dùng trình soạn thảo ActionScript trong một Cửa sổ script (tách từ các actionpanel)
để viết và biên soạn các tệp script ngoài Cú pháp đổi màu, chế độ mời code, và các tính năng ưu điểm khác được hỗ trợ trong cửa sổ script, và các actiontoolbox cũng sẵn dùng
Trang 19Để hiện lên Cửa sổ script, dùng File>New và sau đó chọn kiểu của tệp ngoài bạn muốn biên soạn Bạn có thể có đồng thời nhiều tệp ngoài mở ở cùng thời gian; các tên tệp được hiện trên các tab bắt chéo trên đỉnh của Cửa sổ script.
Phần này mô tả thay đổi mà tận dụng trí thông minh của bạn để gỡ rối kịch bản script Output cửa sổ đã thay đổi ra Output panel Bây giờ bạn có thể di chuyển và cố định Output panel giống như bất cứ panel khác trong Flash
Cải thiện báo cáo lỗi ở thời gian biên dịch Bổ sung thêm, miễn là diễn xuất ngoại lệ tinh
vi hơn, ActionScript 2.0 cung cấp một số các lỗi mới thời gian-biên dịch Muốn biết rõ hơn, xem Phụ lục A, “ Các thông điệp lỗi,” trang 1206
Cải thiện cách trình bày ngoại lệ Class Error và throw và try catch finally các lệnh cho phép bạn thi hành diễn xuất ngoại lệ tinh vi hơn
Mô hình chương trình hướng đối tượng mới
Các ngôn ngữ ActionScript đã trưởng thành và phát triển từ khi nó được đưa vào vài năm trước Với từng sản phẩm phát hành mới của Flash, các từ khoá bổ sung, các object, các method, và các yếu tố ngôn ngữ khác đã thêm vào ngôn ngữ Tuy nhiên, không như các sản phẩm phát hành trước của Flash, Flash MX2004 và FlashMXProfessional2004đưa vào vài yếu tố ngôn ngữ mới, mà thực hiện chương trình hướng đối tượng theo một cách chuẩn hơn trước Vì các yếu tố ngôn ngữ này chỉ ra một sự nâng cấp đầy ý nghĩa tới hạt nhân ngôn ngữ ActionScript, chúng đưa ra một version mới của chính ActionScript: ActionScript 2.0
Các ActionScript 2.0 không phải là một ngôn ngữ mới Đúng hơn, nó gồm một hạt nhân thiết đặt của các yếu tố ngôn ngữ, để làm nó dễ hơn, để phát triển các chương trình hướng đối tượng Với mào đầu của các từ khoá như là class, interface, extend, và implements, Cú pháp ActionScript bây giờ dễ học hơn cho các nhà lập trình quen thuộc với các ngôn ngữ khác Các nhà lập trình mới, có thể học thuật ngữ chuẩn hơn để có thể áp dụng vào các ngôn ngữ hướng đối tượng khác (nghiên cứu trong tương lai)
Các ActionScript 2.0 hỗ trợ tất cả các phần tử chuẩn của ngôn ngữ ActionScript; nó cho bạn quyền viết một cách dễ dàng các script mà bám sít sao hơn vào các tiêu chuẩn sử dụng trong các ngôn ngữ hướng đối tượng khác, như là Java Các ActionScript 2.0 Sẽ là
sự quan tâm chủ yếu của các chuyên viên thiết kế Flash trung gian hoặc cao cấp, những người mà đang xây dựng các ứng dụng có yêu cầu sự thi hành của các class và subclass Các ActionScript 2.0 cũng cho phép bạn công bố object kiểu dạng một biến, khi bạn tạo nó (Xem “Việc gõ dữ liệu trực tiếp” trang 34) và cung cấp đáng kể việc cải thiện lỗi biên dịch (Xem Phụ lục A, “Các thông điệp lỗi” trang 1206)
Các yếu tố ngôn ngữ mới ở ActionScript 2.0 được liệt kê bên dưới
Trang 20Các cơ sở lập luận then chốt về ActionScript 2.0 có chứa các điểm sau:
• Các script dùng ActionScript 2.0 (Có định nghĩa các class hoặc giao diện), phải được lưu như các tệp script ngoài, với một class đơn (Đã định nghĩa trong từng script- đó
là, các class và giao diện không thể được định nghĩa trong các actionpanel)
• Bạn có thể nhập các tệp class riêng biệt hoàn toàn (Bởi sự cất giữ chúng vào một chỗ đó được chỉ định hoặc bởi tài liệu-riêng biệt những đường dẫn kiếm tìm toàn cục và sau đó sử dụng chúng trong một script) hoặc dứt khoát (Bởi sử dụng nhập lệnh); Bạn có thể nhập các gói (Các bộ sưu tập của class, các tệp trong một thư mục) bởi sử dụng từ đại diện
• Các ứng dụng đã phát triển với ActionScript 2.0 được hỗ trợ bởi FlashPlayer 6 về sau
Cẩn thận:
Ngầm định thiết lập xuất bản cho các tệp mới đã tạo Trong Flash MX 2004 là
ActionScript 2.0 Nếu bạn đặt kế hoạch sửa một tệp FLA đang tồn tại sử dụng cú pháp ActionScript 2.0 , bảo đảm rằng tệp FLA chỉ rõ ActionScript 2.0 , trong các thiết lập xuất bản của nó Nếu không , tệp của bạn sẽ biên dịch sai , dẫu cho Flash không phát sinh các lỗi biên dịch
Muốn biết rõ hơn về sử dụng ActionScript 2.0 để viết hướng đối tượng các chương trình trong Flash, xem Chương IX “Tạo các class với ActionScript 2.0” trang 154
Trang 21CHƯƠNG II
CÁC ACTIONSCRIPT BASICS Các ActionScript có quy tắc của văn phạm và dấu câu định rõ các ký tự và các từ được dùng, để tạo nghĩa và theo thứ tự chúng có thể được viết Ví dụ, trong Tiếng Anh, một dấu chấm câu kết thúc một câu Ở ActionScript, một dấu chấm phảy kết thúc một câu lệnh
Các quy định chung sau đây áp dụng vào tất cả ActionScript Phần lớn các điều khoản ActionScript cũng có các luật lệ riêng; quy tắc trong giới hạn riêng biệt, xem đầu vào của nó ở Chương XII, “Từ điển Các ActionScript” trang 195
Những khác nhau giữaActionScriptvà JavaScript
Các ActionScript tương tự hạt nhân ngôn ngữ sáng tác JavaScript Bạn không cần biết JavaScript để sử dụng và học ActionScript; tuy nhiên, nếu bạn biết JavaScript, ActionScript sẽ rất quen thuộc
Sách giáo khoa này không cố hướng dẫn sáng tác chung Có nhiều tài nguyên cung cấp nhiều thông tin hơn (về những ý niệm sáng tác chung và ngôn ngữ JavaScript)
• European Computers Manufacturers Association (ECMA) tài liệu ECMA-262 được bắt nguồn từ JavaScript và tiếp nhận như chuẩn quốc tế cho ngôn ngữ JavaScript Các ActionScript dựa trên cơ sở đặc điểm kỹ thuật ECMA-262
• Netscape DevEdge Online có một site JavaScript Developer Central (http://developer.netscape.com/tech/javascript/index.html) chứa nhiều tư liệu minh chứng
và các bài báo hữu ích cho việc hiểu ActionScript Phần lớn tài nguyên quý giá là Hạt nhân JavaScript Guide
Vài điểm khác giữa ActionScript và JavaScript như sau:
• ActionScript không hỗ trợ trình duyệt-riêng biệt, các object như là Document, Cửa
sổ, và Neo
• ActionScript không hoàn toàn hỗ trợ tất cả các object built-in của JavaScript
• ActionScript không hỗ trợ 1 vài cú pháp tạo của JavaScript, như câu lệnh labels
• Ở ActionScript, actioneval () chỉ có thể thi hành các tham chiếu biến
Unicode hỗ trợ choActionScript
Macromedia Flash MX 2004 và Macromedia Flash MX Professional 2004 hỗ trợ Encoding text Unicode cho ActionScript Điều này nghĩa là bạn có thể chứa text với các ngôn ngữ khác nhau trong một tệp ActionScript Ví dụ, bạn có thể đưa text với các ngôn ngữ Tiếng Anh, tiếng Nhật, và tiếng Pháp trong cùng một tệp
Bạn có thể đặt các sự ưu tiên ActionScript chỉ rõ kiểu của mã hoá để sử dụng khi nhập hoặc xuất các tệp ActionScript Bạn có thể chọn hoặc mã hoá UTF-8 hoặc Default Encode UTF-8 là định dạng 8-bit Unicode; Default Encode là mẫu mã hoá đã hỗ trợ bởi
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 22ngôn ngữ hệ thống bạn dùng hiện tại, cũng được gọi là traditional code page
Khái quát, nếu bạn nhập hoặc xuất các tệp ActionScript dùng UTF-8 format, dùng sự
ưu tiên UTF-8 Nếu bạn là nhập hoặc xuất các tệp dùng traditional code page thì dùng ngôn ngữ hệ thống của bạn, ngầm định sự ưu tiên mã hoá
Nếu text trong các kịch bản script của bạn trông không như mong đợi, khi bạn mở hoặc nhập một tệp, thay đổi sự ưu tiên mã hoá nhập Nếu bạn nhận một thông điệp cảnh báo khi xuất các tệp ActionScript, bạn có thể thay đổi sự ưu tiên mã hoá xuất hoặc tắt cảnh báo này ở các sự ưu tiên ActionScript
Để chọn các lựa chọn mã hoá text , cho nhập hoặc xuất các tệp ActionScript :
1 Trong hộp thoại Preferences (Edit>Preferences), tab ActionScript
2 Dưới các lựa chọn việc biên tập, làm một hoặc cả hai sau:
■ Ở Open/Import, chọn UTF-8 để mở hoặc nhập sử dụng mã hoá Unicode, hoặc Chọn Default Encoding để mở hoặc nhập sử dụng mẫu mã hoá của ngôn ngữ hiện tại (sử dụng bởi ngôn ngữ hệ thống của bạn)
■ For Save/Export, chọn UTF-8 để cất hoặc xuất sử dụng mã hoá Unicode, hoặc Chọn Default Encoding để cất hoặc xuất sử dụng mã hoá mẫu của ngôn ngữ hiện tại (sử dụng bởi ngôn ngữ hệ thống của bạn)
Để bật xuất mã hoá cảnh báo off hoặc on :
1 Trong hộp thoại Preferences (Edit>Preferences), tab Warnings
2 Chọn hoặc bỏ chọn Warn trên Encoding Conflicts khi xuất tệp
Các action là các câu lệnh chỉ dẫn một tệp SWF làm cái gì đó, trong khi nó đang chơi
Ví dụ, gotoAndStop () gửi Playhead vào một riêng biệt frame hoặc label Trong sách giáo khoa này, các điều khoản action và câu lệnhlà có thể thay thế nhau
Boolean là mộtgiá trị true hoặc false
Các class là các kiểu dữ liệu mà bạn có thể tạo, để định nghĩa một kiểu dạng objectmới Để định nghĩa một class, bạn dùng từ khoá class trong một tệp script ngoài (không phải trong script bạn đang viết, ở các actionpanel)
Các constant là các phần tử mà không thay đổi Ví dụ, hằng Key TAB luôn luôn có nghĩa như nhau: nó chỉ ra phím Tab trên bàn phím Các constant là hữu ích để nên các giá
Trang 23// file Circle as
class Circle {
private var BanKinh : Number
private var circumference : Number
//constructor
function Circle ( BanKinh : Number ) {
circumference = 2 * Math PI * BanKinh ;
}
}
Điều khoản constructor được dùng khi bạn tạo (thuyết minh) một object trên cơ sở một class liên quan Những dòng lệnh sau là constructors cho built-in Class Array và class Circle tuỳ hứng:
mangcuatoi_array : Array = New Array ();
my_circle : Circle = New Circle ();
Các kiểu Dữ liệu mô tả loại thông tin một biến hoặc các phần tử ActionScript có thể giữ Các kiểu dữ liệu ActionScript là String, Number, Boolean, Object, MovieClip, Function, null, và undefined Muốn biết rõ hơn, xem “Về các kiểu dữ liệu” trang 31
Các event là các sự kiện xảy ra trong khi một tệp SWF đang chơi Ví dụ, các eventkhác nhau được sinh ra khi tải một movie clip, Playhead vào một frame, người dùng
một button hay movie clip, hoặc người dùng gõ phím
Các event handler là các action đặc biệt nó quản lý các event như mouseDown hoặc load Có hai loại event handler ActionScript: các method event handler và các EventListener (Có cũng hai event handler, on () và onClip Event (), mà bạn có thể gán ngay tức khắc vào các button và các movie clip.) Trong các actiontoolbox, từng objectActionScript
mà có các method eventhandler hoặc các EventListener có một phạm trù con gọi là các event hoặc các Listener Vài lệnh có thể được dùng cả hai, như các eventhandler và như các EventListener và có chứa trong cả hai phạm trù con
Các biểu thức là bất cứ sự kết hợp hợp pháp của các symbol ActionScript chỉ ra một giá trị Một biểu thức gồm các toán tử và các toán hạng Ví dụ, trong biểu thức x + 2, x và 2
Trang 24Những thứ nhận dạng là các tên sử dụng để chỉ ra một biến, property, object, function, hoặc method Ký tự đầu tiên phải là một chữ, dấu gạch dưới (_), hoặc ký hiệu đô la ($) Từng ký tự tiếp phải là một chữ, số, dấu gạch dưới, hoặc ký hiệu đô la Ví dụ, first_name tên của một biến
class chứa tất cả các thuộc tính và các method của class đó Ví dụ, tất cả các movie clip là các instance của Class MovieClip, nên bạn có thể dùng bất cứ method nào hoặc các properties của Class MovieClip với bất cứ instance movie clip
Các tên Instance là các tên duy nhất mà cho phép bạn đặt đích các instance movie clip
và button trong các script
Bạn dùng thuộc tính inspector để gán các tên instance vào các instance trên Stage Ví
dụ, một master symbol trong thư viện có thể gọi BoDem và hai instance symbol trong tệp SWF, có thể có các tên instance score Player 1_mc và score Player 2_mc Đoạn code sau thiết đặt một biến gọi là DiemTheThao bên trong từng instance movie clip bởi sử dụng các tên
instance:
_root score Player 1_mc DiemTheThao += 1 ;
_root score Player 2_mc DiemTheThao - = 1 ;
Bạn có thể dùng các hậu tố đặc biệt khi đặt tên các instance để các code mời (Xem
“Sử dụng các code mời” trang 62) hiện như bạn gõ code của bạn Muốn biết rõ hơn, xem
“Sử dụng các hậu tố để bắn ra các code mời” trang 60
Các từ khoá là các từ dành riêng mà có nghĩa đặc biệt Ví dụ, var là một từ khoá sử dụng để công bố các biến cục bộ Bạn không thể dùng một từ khoá bừa bãi Ví dụ, var không phải là một tên biến hợp pháp Danh sách các từ khoá, xem “Các từ khoá” trang 30 Các method là các function được kết hợp với một class Ví dụ, getBytesLoaded ()là một built-in method được kết hợp với class MovieClip Bạn có thể cũng tạo các function mà hành động như các method, cho các object trên cơ sở hoặc các class built-in, hoặc các class
mà bạn tạo Ví dụ, trong đoạn code sau, clear () trở thành một method của một objectcontroller mà bạn đã định nghĩa trước đó:
Các toán tử là điều khoản mà tính toán một giá trị mới từ một hoặc nhiều giá trị Ví
Trang 25dụ, toán tử phép cộng (+) thêm hai hoặc nhiều hơn các giá trị với nhau để có kết quả một
giá trị mới Các giá trị mà các toán tử nhào nặn bị gọi là các toán hạng
Các tham số (cũng được gọi là các đối số) là những chỗ giữ trước cho phép bạn đưa
các giá trị vào các function
Ví dụ, functionwelcome () sau dùng hai giá trị nó nhận trong các tham số TenHo và
hobby:
function welcome ( TenHo , hobby ) {
welcomeText = " Hello , " + TenHo + " Tôi rất vui được gặp bạn " + hobby ;
}
Các gói là các thư mục mà chứa một hoặc nhiều tệp class, và định cư trong một đường
dẫn thư mục class đã định nghĩa (Xem “Hiểu đường dẫn class” trang 160)
Properties là các thuộc tính cho định nghĩa một object Ví dụ, _visible là một property
của tất cả các movie clip định nghĩa cho biết một movie clip có thể trông thấy hoặc hidden
Những đường dẫn đích là các địa chỉ có thứ bậc của các tên instance movie clip, các
biến, và các object trong một tệp SWF Name một instance movie clip trong thuộc tính
inspector của movie clip (Phần chính Timeline luôn luôn có name _root.) bạn có thể dùng
một đường dẫn đích để chỉ thị một action ở một movie clip hoặc để nhận, hay đặt giá trị
một biến Ví dụ, câu lệnh sau là đường dẫn đích vào biến AmLuong bên trong movie clip
stereoControl:
Muốn biết rõ hơn về các đường dẫn đích, xem “Các đường dẫn đích liên quan và vô
điều kiện” trong Sử dụng Flash Help
Các biến là những thứ giữ các giá trị của bất cứ kiểu data Các biến có thể được tạo,
thay đổi, và cập nhật Các giá trị chúng lưu giữ có thể được lấy lại cho dùng trong các
script Trong ví dụ sau, những thứ nhận dạng trên bên trái của các ký hiệu bằng là các biến:
var x = 5 ;
var name = " Lolo " ;
var c_MauSac = New Color ( mc instance Name );
Muốn biết rõ hơn về các biến, xem “Về các biến” trang 38
Cú pháp Như với bất cứ ngôn ngữ nào, ActionScript có quy tắc cú pháp mà bạn phải
theo để tạo các script có thể biên dịch và chạy đúng đắn Phần này mô tả các phần tử gồm
các cú pháp ActionScript
Trường hợp nhạy cảm Trong một trường hợp-nhạy cảm ngôn ngữ sáng tác, tên các
biến mà không giống, chỉ trường hợp (book và Book), được chiếu cố khác nhau tuỳ từng
trường hợp khác nhau Vì thế, lệ thường theo các sự thoả thuận ngầm, chữ hoa chữ thường
phải rõ ràng và phù hợp, như những sử dụng trong sách giáo khoa này, để nó dễ nhận ra
tên các function và các biến ở Code ActionScript
Khi bạn xuất bản các tệp dùng FlashPlayer 7 hoặc về sau, Flash cam kết thực hiện
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 26trường hợp nhạy cảm cho biết bạn đang dùng ActionScript 1 hoặc ActionScript 2.0 Điều này nghĩa là các từ khoá, các tên class, các biến, các tên method, và vân vân là tất cả trường hợp nhạy cảm
Ví dụ:
// trong tệp đích tệp Flash Player 7
// và hoặc ActionScript 1 hoặc ActionScript 2.0
// Đặt các properties của hai object khác nhau
ConMeo hilite = true ;
CONMEO hilite = true ;
// Tạo ba biến khác nhau
var myVar = 10 ;
var myvar = 10 ;
var mYvAr = 10 ;
// Không phát sinh một lỗi
var array = New Array ();
var date = New Date ();
Thay đổi này cũng ảnh hưởng đến các biến ngoài đã tải với LoadVars load ()
Bổ sung thêm, trường hợp nhạy cảm được thi hành cho các script ngoài, như là các tệp class ActionScript 2.0 hoặc các script mà bạn nhập sử dụnglệnh #include Nếu bạn xuất bản các tệp dùng FlashPlayer 7 và có các tệp ngoài đã tạo trước đó, mà bạn bổ sung vào kịch bản script của bạn bởi sử dụng câu lệnh #include, bạn nên xem lại từng tệp và xác nhận rằng, bạn đã dùng chữ hoa phù hợp từ đầu đến cuối Một cách để làm Đây là để mở tệp trong cửa sổ script (chỉ FlashProfessional) hoặc, trong một tệp FLA mới, đặt các thiết lập xuất bản của bạn vào FlashPlayer 7 và copy các nội dung tệp vào các actionpanel Rồi
sử dụng button Test Cú pháp (Xem “Kiểm tra cú pháp và dấu ngoặc” trang 65) hoặc xuất bản tệp của bạn; các lỗi bị gây ra bởi tranh chấp do đặt tên hiện ra Output panel
Khi cú pháp đổi màu được enable, các yếu tố ngôn ngữ được viết với chữ hoa chính xác là xanh dương theo ngầm định Muốn biết rõ hơn, xem “Các từ khoá” trang 30 và
“Làm nổi bật cú pháp” trang 59
Chấm cú pháp Ở ActionScript, một chấm (.) thường chỉ ra các thuộc tính hoặc phương pháp liên quan đến một object hoặc movie clip Nó được dùng để nhận ra đường dẫn đích vào một movie clip, biến, function, hoặc object
Một biểu thức chấm cú pháp bắt đầu với tên của object hoặc movie clip theo sau bởi một chấm, và kết thúc với yếu tố bạn muốn chỉ rõ
Ví dụ, property_x movie clip chỉ ra một vị trí trục x của movie clip trên Stage Biểu thức ballMC _x ám chỉproperty_x của instance movie clip ballMC
Ví dụ khác, submit là một biến đặt trong Sample movie clip, được đưa vào bên trong movie clip shoppingCart Biểu thức shoppingCart Sample submit = true thiết đặtbiến submit
Trang 27của instanceSample thành true
Biểu diễn một method của một object hoặc movie clip theo mẫu giống nhau sau Ví
dụ,methodplay () củainstance movie clip TraiBanh_mc di chuyển Playhead trong Timelinecủa TraiBanh_mc, như trong trình bày:
_root các function s buildGameBoard ();
Bạn có thể dùng bí danh _parent để ám chỉ đến một movie clip được đưa vào trong đối tượng hiện tại Bạn có thể cũng dùng _parent để tạo một đường dẫn đích liên quan Ví
dụ, nếu movie clip ConCho_mc được đưa vào bên trong movie clip ConThu_mc, câu lệnh
sau trên instanceConCho_mc bảo ConThu_mc ngừng:
_parent stop ();
Slash cú pháp
Slash cú pháp đã dùng Trong Flash 3 và 4 để chỉ ra đường dẫn đích của một movie clip hoặc biến Cú pháp này là vẫn còn được hỗ trợ bởi FlashPlayer 7, nhưng nó không được đề nghị, và slash cú pháp không được hỗ trợ ở ActionScript 2.0 Tuy nhiên, nếu bạn đang tạo nội dung dự định rõ ràng dùng FlashPlayer 4, bạn phải dùng slash cú pháp Muốn biết rõ hơn, xem “Sử dụng slash cú pháp” trang 1219
Các dấu ngoặc nhọn
Các eventhandler ActionScript, các định nghĩa class, và các function được tập hợp với nhau vào các khối với các dấu ngoặc nhọn ({}) Bạn có thể mở ngoặc trên cùng dòng như công bố của bạn, hoặc trên dòng kế, như trong ví dụ sau Để làm code của bạn dễ đọc hơn, một ý hay để chọn một định dạng và dùng nó trước sau như một
// Event handler
on ( release ) {
myDate = New Date ();
currentMonth = myDate getMonth ();
}
on ( release )
{
myDate = New Date ();
currentMonth = myDate getMonth ();
}
// Class
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 28class Circle ( BanKinh ) {
}
class BinhPhuong ( side )
{}
// Function
circleArea = function ( BanKinh ) {
return BanKinh * BanKinh * MATH PI ;
function HamCuaToi ( Ten , Tuoi , reader ){
// code của bạn ở đây
}
Khi bạn gọi một function, có chứa bất cứ tham số đã đưa vào function trong các dấu ngoặc đơn, như hiện ở đây:
HamCuaToi ( Steve " , 10 , true );
Bạn có thể cũng dùng các dấu ngoặc đơn để đè lên các thứ tự ưu tiên ActionScripthoặc để làm các câu lệnhActionScript của bạn dễ đọc hơn (Xem “Toán tử quyền ưu tiên
và sự kết hợp” trang 43.)
Bạn cũng dùng các dấu ngoặc đơn đưa về giá trị một biểu thức bên trái dấu chấm trong chấm cú pháp Ví dụ, trong trình bày sau, các dấu ngoặc đơn là nguyên nhânđưa về giá trị mới Color ( this ) và tạo một Color object:
onClip Event ( enterFrame ) {
( new Color ( this )) setRGB ( 0xffffff );
Trang 29Nếu bạn không dùng các dấu ngoặc đơn, bạn phải thêm một câu lệnh đưa về giá trị biểu thức:
onClip Event ( enterFrame ) {
myColor = New Color ( this );
Để chỉ ra một dòng hoặc một đoạn là một lời chú, đặt trước lời chú với hai dấu chéo lên (//):
on ( release ) {
// tạo mới Object Date
myDate = New Date ();
currentMonth = myDate getMonth ();
// convert số tháng to tên tháng
monthName = calcMonth ( currentMonth );
year = myDate getFullYear ();
currentDate = myDate getDate ();
Để tạo một khối lời chú, đặt/* ở đầu các dòng chú giải và * /ở cuối
Ví dụ, khi script sau chạy, trong khối lời chú không có code ở đó thực hiện:
// code dưới chạy
var x : Number = 15 ;
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 30var y : Number = 20 ;
// code dưới không chạy
/ *
on ( release ) {
// tạo mới Object Date
myDate = New Date ();
currentMonth = myDate getMonth ();
// convert số tháng thành tên tháng
monthName = calcMonth ( currentMonth );
year = myDate getFullYear ();
currentDate = myDate getDate ();
}
* /
// Code dưới chạy
var Ten : String = " Tên tôi là " ;
var Tuoi : Number = 20 ;
Các từ khoá Các từ dự trữ ActionScript riêng biệt dùng bên trong ngôn ngữ, nên bạn không thể dùng chúng như những thứ nhận dạng, như là các tên biến, function, hoặc label Bảng sau liệt kê tất cả các từ khoá ActionScript:
Các constant Một hằng là một property giá trị của nó không bao giờ thay đổi
Ví dụ, các hằng BACKSPACE, ENTER, QUOTE, RETURN, SPACEBAR, và TAB là các properties của object phím và quy vào các phím trên bàn phím Để kiểm tra cho biết người dùng là nhấn phím Enter, bạn có thể dùng câu lệnh sau:
if ( Key getCode () = = Key ENTER ) {
alert = " Bạn sẵn sàng chơi? " ;
controlMC gotoAndStop ( 5 );
}
Trang 31Về các kiểu dữ liệu
Một kiểu dữ liệu mô tả loại thông tin một biến hoặc các phần tử ActionScript có thể giữ Có hai loại kiểu dữ liệu built-in Flash: nguyên thuỷ và tham chiếu Các kiểu dữ liệu nguyên thuỷ— String, Number, và Boolean—có một hằng giá trị và vì thế có thể giữ giá trị hiện thời của yếu tố chúng chỉ ra Các kiểu dữ liệu tham chiếu—MovieClip và Object—
có các giá trị mà có thể thay đổi vì thế chứa các tham chiếu tới giá trị hiện thời của yếu tố Các biến chứa các kiểu dữ liệu nguyên thuỷ đối xử khác nhau trong các hoàn cảnh chắc chắn hơn các kiểu chứa tham chiếu này (Xem “Sử dụng các biến trong một chương trình”trang 38.) Có cũng hai kiểu dữ liệu đặc biệt: null và undefined
Trong Flash, bất cứ built-in object không một kiểu dữ liệu nguyên thuỷ hoặc một kiểu dữ liệu movie clip, như là Array hoặc Math, là kiểu dữ liệu của Object
Từng kiểu dữ liệu có quy định riêng của nó và được mô tả trong các topic sau:
Khi bạn gỡ rối script, bạn có thể cần định rõ kiểu dữ liệu của một biểu thức hoặc biến
để hiểu vì sao nó đang được đối xử một cách chắc chắn Bạn có thể làm điều này với toán
tửtypeof (Xem “Xác định một kiểu dữ liệu của Item” trang 33)
Bạn có thể chuyển một kiểu dữ liệu thành kiểu khác, sử dụng một trong số functionchuyển đổi sau: Array (), Boolean (), Number (), Object (), String ()
String Một string là một chuỗi của các ký tự như là các chữ, các số, và các dấu câu Bạn vào các string trong một câu lệnhActionScript bởi bao chúng trong nháy đơn hoặc nháy nháy đúp
Các string được xem xét như các ký tự thay thế các biến Ví dụ, trong trình bày sau,
" L7 "là một string:
favoriteBand = " L7 " ;
Bạn có thể dùng toán tử (+) để nối, hoặc ghép, hai string Các ActionScript coi các khoảng trống ở nơi bắt đầu hoặc kêt thúc của một string như một phần chữ cái của string Biểu thức sau gồm có một khoảng trống sau khi dấu phảy:
greeting = " Welcome , " + TenHo ;
Để gộp một dấu nháy nháy vào một string, đặt trước nó với một ký tự chéo xuống (\) Điều này được gọi là một ký tự escaping Có các ký tự khác mà không thể được miêu tả ở ActionScript, ngoại trừ bởi các chuỗi Escape đặc biệt Bảng sau cung cấp tất cả các ký tự escape ActionScript:
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 32Escape chuỗi Character
\b Ký tự Backspace ( ASCII 8 )
\f ký tự Form - nguyên liệu ( ASCII 12 )
\n Ký tự Line - nguyên liệu ( ASCII 10 )
\r Ký tự Enter ( ASCII 13 )
\t Ký tự Tab ( ASCII 9 )
\000 - \377 Một byte được chỉ rõ trong bát phân
\x00 - \xFF Một byte được chỉ rõ trong thập lục phân
\u0000 - \uFFFF Một ký tự 16 - bit Unicode được chỉ rõ trong thập lục phân
Number Kiểu dữ liệu Number là một số phảy động đúp-độ chính xác Bạn có thể nhào nặn các số sử dụng các toán tử số học phép cộng (+), phép trừ (-), phép nhân (*), phép chia (/), modulo (%), gia tăng (++), và giảm bớt (- -) Bạn có thể cũng dùng các method của các class built-in Math và Number để nhào nặn các số Ví dụ sau dùng methodsqrt ()(căn bậc hai) để trả về căn bậc hai của số 100:
Math sqrt ( 100 );
Muốn biết rõ hơn, xem “Các toán tử số” trang 43
Boolean Một giá trị logic Bool là một trong hai, hoặc true hoặc false Các ActionScriptcũng chuyển các giá trị true và false thành 1 và 0 khi thích hợp Phần lớn các giá trị Bool thường xuyên sử dụng với các toán tử logic ở các câu lệnhActionScript so sánh để điều khiển luồng của một script Ví dụ, trong script sau, tệp SWF chơi nếu biến MatKhau là true:
onClip Event ( enterFrame ) {
if ( TenNguoiSD = = true && MatKhau = = true ){
play ();
}
}
Xem “Sử dụng các function nội bộ” trang 49 và “Các toán tử logic” trang 45
ObjectMột object là một bộ sưu tập của các properties Từng property có một tên và một giá trị Giá trị của một property có thể là bất cứ kiểu dữ liệu Flash, thậm chí kiểu dữ liệu object Điều này cho phép bạn sắp đặt các object bên trong từng cái khác, hoặc lồng chúng Chỉ rõ các object và các properties của chúng, bạn dùng toán tử chấm (.) Ví dụ, trong đoạn code sau, GioDaLamViec là một property của weeklyStats, là một property của employee: employee weeklyStats GioDaLamViec
Trang 33Bạn có thể dùng các objectActionScript built-in để truy cập và nhào nặn các loại của thông tin riêng rẽ Ví dụ, Object Math có các method mà thi hành các phép toán trên các số bạn đưa vào chúng Ví dụ này dùngmethodsqrt ():
squareRoot = Math sqrt ( 100 );
Các ActionScript MovieClip object có các method mà cho phép bạn điều khiển các
instance symbol movie clip trên Stage Ví dụ này dùng các methodplay ()và nextFrame ():
Bạn có thể cũng tạo các object tuỳ hứng để tổ chức thông tin trong ứng dụng Flashcủa bạn Để thêm phạm vi hoạt động liên thông vào một ứng dụng với ActionScript, bạn sẽ cần nhiều, các mẩu thông tin khác nhau: ví dụ, bạn có thể cần một tên người dùng, tốc độ của một trái bóng, các tên của các item trong một thùng đồ, số các frame đã tải, Zip code của người dùng, hoặc phím đã bị nhấn cuối cùng Tạo các object tuỳ hứng cho phép bạn tổ chức thông tin này vào các nhóm, đơn giản hoá kịch bản script của bạn, và dùng lại kịch bản script của bạn
MovieClip Các movie clip là các symbol mà có thể chơi hoạt hình trong một ứng dụng Flash Chúng chỉ là kiểu dữ liệu mà ám chỉ một yếu tố graphic Kiểu dữ liệu MovieClip cho phép bạn điều khiển các symbol movie clip sử dụng các phương pháp của Class MovieClip Bạn gọi các phương pháp sử dụng toán tử chấm (.), như hiện ở đây:
my_mc startDrag ( true );
CHA_mc getURL ( http :// www khkt.net / support / + product );
NullKiểu dữ liệu null chỉ có một giá trị, null Giá trị này nghĩa là “không có giá trị nào”—đó
là, một sự thiếu của data Giá trị null có thể được dùng trong các hoàn cảnh đa dạng Đây là vài ví dụ:
• Để chỉ ra một biến chưa nhận giá trị
• Để chỉ ra một biến khôngchứa một giá trị nữa
• Như giá trị trả về của một function, để chỉ ra không có giá trị nào sẵn dùng để được trả về bởi function
• Như một tham số vào một function, để chỉ ra một tham số đang bị bỏ quên
Undefined
Kiểu dữ liệu undefined có một giá trị, undefined, và được dùng cho một biến mà không được gán giá trị
Xác định một kiểu dữ liệu của Item
Trong khi kiểm tra và gỡ rối chương trình của bạn, bạn có thể tìm ra các vấn đề mà dường như liên quan tới các kiểu dữ liệu của các item khác nhau Trong những trường hợp này, bạn có thể muốn định rõ một kiểu dữ liệu của Item Để làm điều đó, dùng toán tửtypeof, như trong ví dụ này:
trace ( typeof (TenBien));
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 34Muốn biết rõ hơn về kiểm tra và gỡ rối, xem Chương III, “Viết và Debug các script,”trang 53
Việc được quy cho các kiểu dữ liệu vào các yếu tố
Flash tự động gán các kiểu dữ liệu vào các loại sau của các yếu tố ngôn ngữ, như thảo luận trong phần tới, “Tự động việc gõ dữ liệu”:
• Các biến
• Các tham số đã đưa vào một function, method, hoặc class
• Các giá trị trả về từ một function hoặc method
• Các object đã tạo như các subclass của các class đang tồn tại
Tuy nhiên, bạn có thể cũng dứt khoát gán các kiểu dữ liệu vào các item, có thể giúp chặn hoặc chẩn đoán chắc chắn các lỗi trong các script kịch bản của bạn Muốn biết rõ hơn, xem “Việc gõ dữ liệu trực tiếp” trang 34
Tự động nhập liệu
Trong Flash, bạn không cần định nghĩa dứt khoát một item đang giữ một số, một string, hoặc kiểu dữ liệu khác Flash định đoạt kiểu dữ liệu của một item khi nó được gán: var x = 3 ;
Trong biểu thức var x = 3, Flash đưa về giá trị yếu tố phía phải của toán tử và định đoạt nó là kiểu dữ liệu số Một gán về sau có thể thay đổi kiểu của x; Ví dụ, câu lệnh x =
" hello "thay đổi kiểu của x là một string Một biến mà không được định nghĩa một giá trị có một kiểu dạng undefined
Các ActionScript chuyển các kiểu dữ liệu tự động khi một biểu thức yêu cầu nó Ví
dụ, khi bạn đưa vào một giá trị vào actiontrace (), trace () tự động chuyển giá trị vào một string và gửi nó ra Output panel Trong các biểu thức với các toán tử, ActionScript chuyển các kiểu dữ liệu như nhu cầu; ví dụ, khi sử dụng với một string, toán tử + trông mong toán hạng khác để được một string
" Dòng kế , thứ " + 7
Các ActionScript chuyển số 7 thành string "7 " và thêm nó vào cuối của string đầu tiên, kết quả ở trong string sau:
" Dòng kế , thứ 7 "
Việc gõ dữ liệu trực tiếp
ActionScript 2.0 cho phép bạn công bố dứt khoát object kiểu dạng một biến khi bạn tạo nó; điều này được gọi việc gõ dữ liệu chính xác Vì kiểu dữ liệu không phù hợp bắn ra các lỗi biên dịch, bản đánh máy dữ liệu trực tiếp giúp bạn chặn bằng việc quy kiểu dạng dữ liệu sai vào một biến đang tồn tại Để gán một kiểu dữ liệu rõ ràng vào một item, chỉ rõ kiểu của nó sử dụng từ khoá var và sau-dấu hai chấm, cú pháp:
// gõ trực tiếp của một biến hoặc object
var x : Number = 7 ;
Trang 35var NgaySinh : Date = New Date ();
// gõ trực tiếp của các tham số
function welcome ( TenHo : String , Tuoi : Number ){
}
// gõ trực tiếp của tham số và giá trị trả về
function BinhPhuong (x: Number ): Number {
var SinhVien : SinhVien = New SinhVien ();
Bạn có thể cũng chỉ rõ các object là kiểu Function hoặc Void
Sử dụng gõ trực tiếp giúp bảo đảm rằng bạn không tình cờ gán một kiểu dạng giá trị sai vào một object Flash kiểm tra các lỗi gõ sai ở thời gian biên dịch
Ví dụ, giả sử bạn gõ đoạn code sau:
// trong tệp SinhVien AS class
class SinhVien {
var status : Boolean ;// property của các object SinhVien
}
// ở một script
var SinhVienThachHoai : SinhVien = New SinhVien ();
SinhVienThachHoai status = " đã thu nạp " ;
Khi Flash biên dịch script này, một lỗi “Kiểu không phù hợp” được sinh ra
Lợi thế khác của bản đánh máy dữ liệu trực tiếp là FlashMX2004 tự động hiện các code mời cho các object built-in khi chúng được gõ mẹo Muốn biết rõ hơn, xem “Hoàn toàn gõ các object để bắn ra các code mời” trang 59
Các tệp xuất bản sử dụng ActionScript 1 không tôn trọng những nhiệm vụ bản đánh máy dữ liệu trực tiếp ở thời gian biên dịch Do đó, việc được quy cho kiểu dạng giá trị sai vào một biến mà bạn đã gõ mẹo không phát sinh một lỗi biên dịch
var x : String = " abc "
x = 12 ;// không lỗi trong ActionScript 1 , lỗi gõ sai trong ActionScript 2
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 36Lý do này là khi bạn xuất bản một tệp cho ActionScript 1, Flash hiểu một câu lệnh
như là var x: String = " abc " như slash cú pháp, đúng hơn là như gõ trực tiếp (Các ActionScript 2.0 không hỗ trợ slash cú pháp.) Thói quen này có kết quả trong một objectđược gán vào một biến gõ sai, nguyên nhân trình biên dịch cho phép method gọi bất hợp pháp và property undefined các tham chiếu đưa vào, không được thông báo suốt Vì thế, nếu bạn có phương tiện bản đánh máy dữ liệu trực tiếp, chắc chắn là bạn xuất bản các tệp cho ActionScript 2.0
Sự đổ khuôn các object
Các ActionScript 2.0 cho phép bạn thay một kiểu dữ liệu thành kiểu khác Toán tửthay mà Flash dùng mang mẫu của một function gọi và là đồng hành với rõ ràng coercion, như được chỉ định trong sự đề xuất của ECMA-262 Edition 4 Sự đổ khuôn cho phép bạn khẳng định một object là một kiểu nào đó để khi kiểm tra gõ xảy ra, trình biên dịch coi object như đang có một thiết đặt của các properties, mà nó không chứa kiểu khởi tạo Điều này có thể là hữu ích, ví dụ, khi lặp đi lặp lại qua một array của các object mà có các kiểu không giống nhau
Trong các tệp xuất bản dùng Flash Player 7 hoặc về sau, thay các câu lệnh hỏng lúc runtime trả về null Trong các tệp xuất bản dùng Flash Player 6, không runtime hỗ trợ cho các khuôn bị hỏng được thi hành
Cú pháp cho sự đổ khuôn là type(item), nơi mà bạn muốn trình biên dịch đối xử bình thường nếu kiểu dữ liệu của item là kiểu Sự đổ khuôn về bản chất là gọi một function, và function gọi trả về null nếu thứ thay hỏng Nếu thứ thay thành công, function gọi trả về object gốc Tuy nhiên, trình biên dịch không phát sinh kiểu các lỗi sai khi bạn thay các item vào các kiểu dữ liệu mà bạn đã tạo, trong các tệp class ngoài, ngay cả khi thứ thay hỏng lúc runtime
var VetChamTron : ConCho = New ConCho ();
var TamThoi : ConMeo = ConMeo ( VetChamTron );// khẳng định mà một object ConCho là của kiểu ConMeo
TamThoi meow ();// không làm bất cứ cái gì , nhưng lỗi biên dịch không hoặc
Trong hoàn cảnh này, bạn đã khẳng định với trình biên dịch mà TamThoi là một object ConMeo, và, vì thế, trình biên dịch thừa nhận TamThoi meow ()là một câu lệnh hợp pháp Tuy nhiên, trình biên dịch không biết mà thứ thay sẽ hỏng (đó là, bạn đã cố để thay một ConCho object vào một kiểu Con mèo), không nên có lỗi trong thời gian biên dịch xảy ra Nếu bạn có chứa một kiểm tra trong kịch bản script của bạn để chắc chắn rằng thứ
Trang 37thay thành công, bạn có thể tìm kiểu các lỗi sai lúc runtime
var VetChamTron : ConCho = New ConCho ();
var TamThoi : ConMeo = ConMeo ( VetChamTron );
trace ( TamThoi );// hiện null ở runtime
Bạn có thể thay một biểu thức vào một giao diện Nếu biểu thức là một object mà cam kết thực hiện giao diện hoặc có một class cơ sở mà cam kết thực hiện giao diện, objectđược trả về Nếu không, nullđược trả về
Ví dụ sau chỉ ra các kết quả của sự đổ khuôn kiểu các object built-in Như dòng đầu tiên trong with ( các kết quả )khối cho thấy, một thay bất hợp pháp—trong trường hợp này,
sự đổ khuôn một string vào một movie clip— trả về null Như hai dòng cuối cùng hiện, sự
đổ khuôn thành null hoặc undefined trả về undefined
var mc : MovieClip ;
var arr : Array ;
var bool : Boolean ;
var num3 : Number ;
var obj : Object ;
var str : String ;
_root createTextField ( các kết quả " , 2 , 100 , 100 , 300 , 300 );
with ( các kết quả ){
text = " type MovieClip : " +( typeof MovieClip ( str ));// trả về null
text += " \ntype object : " +( typeof Object ( str ));// trả về object
text += " \ntype Array : " +( typeof Array ( num3 ));// trả về object
text += " \ntype Boolean : " +( typeof Boolean ( mc ));// trả về boolean
text += " \ntype String : " +( typeof String ( mc ));// trả về string
text += " \ntype Number : " +( typeof Number ( obj ));// trả về number
text += " \ntype Function : " +( typeof Function ( mc ));// trả về object
text += " \ntype null: " +( typeof null( arr ));// trả về undefined
text += " \ntype undefined: " +( typeof undefined( obj ));// trả về undefined
}
// Các kết quả trong Output panel
type MovieClip :null
type object : object
type Array : object
type Boolean : boolean
type String : string
type Number : number
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 38type Function : object
type null:undefined
type undefined:undefined
Bạn không thể đè lên các kiểu dữ liệu nguyên thuỷ như là Boolean, Date, và Number với một toán tử thay trùng tên
Khởi tạo một biến giúp bạn theo dõi và so sánh giá trị của biến như tệp SWF chơi Các biến có thể giữ bất cứ kiểu dạng dữ liệu (Xem “Về các kiểu dữ liệu” trang 31) Kiểu một biến chứa dữ liệu ảnh hưởng đến việc làm thế nào thay đổi giá trị của biến khi nó được gán trong một script
Kiểu thông tin được gõ mà bạn có thể lưu trong một biến có chứa một URL, một tên người dùng, kết quả của một phép toán, số lần một event đã xảy ra, hoặc cho biết một button đã bị Từng tệp SWF và instance movie clip có một thiết đặt biến, với từng biến đang có, một giá trị độc lập của các biến trong tệp SWF khác hoặc các movie clip
Để kiểm tra giá trị của một biến, dùng actiontrace () để gửi giá trị ra Output panel Ví
dụ, trace ( GioDaLamViec ) gửi giá trị của biến GioDaLamViec ra Output panel trong chế độ kiểm tra Bạn có thể cũng kiểm tra và đặt giá trị các biến trong Debugger trong chế độ kiểm tra Muốn biết rõ hơn, xem “Sử dụng câu lệnh trace” trang 77 và “Hiện và sửa các biến” trang 70
Đặt tên một biến
Một tên biến phải theo những quy tắc này:
• Nó phải là một dạng (Xem “Thuật ngữ” trang 24)
• Nó không thể là một từ khoá hoặc một từ ActionScript như là true, false, null, hoặc
hello_str = New String ();
Trang 39trace ( hello_str length );// trả về 0
String = " hello " ;// Cho một biến tên trùng như một built - in class
hello_str = New String ();
trace ( hello_str length );// trả về undefined
Trình soạn thảo ActionScript hỗ trợ các code mời cho các class built-in và cho các biến, trên cơ sở các class này Nếu bạn muốn Flash cung cấp các code mời cho một kiểu object liên quan đó được gán vào một biến, bạn có thể gõ mẹo biến hoặc tên biến sử dụng một hậu tố riêng biệt
Ví dụ, giả sử bạn gõ đoạn code sau:
var CacThanhVien : Array = New Array ();
CacThanhVien
Ngay khi bạn gõ dấu chấm (.), Flash hiện một danh sách các method và các properties sẵn dùng cho các object Array Muốn biết rõ hơn, xem “Viết code mà bắn các code mời” trang 60
Phạm vi và công bố các biến
Một phạm vi của biếnám chỉ vùng mà biến được biết và có thể được tham chiếu Có
ba kiểu biến phạm vi ở ActionScript:
• Các biến cục bộ sẵn dùng bên trong thân function là công khai (phác hoạ bởi các dấu ngoặc nhọn)
• Các biến Timeline là sẵn dùng vào bất cứ script trên Timeline
• Các biến toàn cục và các function có thể trông thấy ở mỗi lầnline và phạm vi trong tài liệu của bạn
Ghi nhớ:
Các class ActionScript 2.0 mà bạn tạo , hỗ trợ các phạm vi public , private , và biến tĩnh static Muốn biết nhiều hơn , xem “ Điều khiển bộ phận truy cập ” trang 164
và “ Tạo Class Members ”trang 165.
Các biến cục bộ Để công bố các biến cục bộ, dùng câu lệnh var bên trong thân của một function Một biến cục bộ thuộc phạm vi khối và hết hiệu lực ở cuối khối Một biến cục bộ không công khai bên trong một khối, hết hiệu lực ở cuối script của nó
Ví dụ, các biến i và j thường dùng như các bộ đếm vòng lặp Trong ví dụ sau, i được dùng như một biến cục bộ; nó tồn tại chỉ bên trong functionTaoNgay ():
function TaoNgay () {
var i ;
for ( i = 0 ; i < MangThang [ month ]; i ++) {
_root Days attachMovie ( NgayHien " , i , i + 2000 );
_root Days [ i ] num = i + 1 ;
_root Days [ i ] _x = column * _root Days [ i ] _width ;
@ActionScript cho Flash6Nguyễn Anh Cường6Ban CNTT Học viện Phòng Không Không Quân@
Trang 40_root Days [ i ] _y = row * _root Days [ i ] _height ;
Thói quen tốt để sử dụng các biến cục bộ trong thân của một function, để function có thể hành động như một mẩu code độc lập Một biến cục bộ chỉ có thể thay đổi bên trong khối code riêng của nó Nếu một biểu thức trong một function dùng một biến toàn cục, cái
gì đó bên ngoài function cũng có thể thay đổi được giá trị của nó, sẽ thay đổi function Bạn có thể gán một kiểu dữ liệu vào một biến cục bộ khi bạn định nghĩa nó, giúp chặn bạn chống việc được quy cho kiểu dạng dữ liệu sai vào một biến đang tồn tại Muốn biết rõ hơn, xem “Việc gõ dữ liệu trực tiếp” trang 34
Các biến Timeline Các biến Timeline là sẵn dùng tới bất cứ script trên Timeline Để công bố các biến Timeline, khởi tạo chúng trên bất cứ frame nào trong Timeline Đừng quên khởi tạo biến trước khi thử truy cập nó trong một script
Ví dụ, nếu bạn đặt code var x = 10 ;trên Frame 20, một script đã gắn tới bất cứ frame trước Frame 20 không thể truy cập vào biến
Các biến toàn cục
Các biến toàn cục và các function có thể trông thấy ở mỗi lầnline và phạm vi trong tài liệu của bạn Để tạo một biến với phạm vi toàn cục, dùngdạng _Global trước tên biến, và không dùng var =cú pháp Ví dụ, đoạn code sau tạo biến toàn cục TenToi:
var _Global TenToi = " NguyenCuong " ;// cú pháp sai
_Global TenToi = " NguyenCuong " ;
Tuy nhiên, nếu bạn khởi tạo một biến cục bộ tên trùng với một biến toàn cục, bạn không thể truy cập vào biến toàn cục trong khi bạn ở trong phạm vi của biến cục bộ:
_Global BoDem = 100 ;
BoDem ++;
trace ( BoDem );// hiện 101
function DemXem (){