1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Làm quen với AS, Your First Look at AS

204 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 204
Dung lượng 370,03 KB

Nội dung

Ví dụ nếu bạn muốn lưu trử tên của người dùng trong biến số thì bạn nên đặt tên biến số đó là userName (mình nghĩ đặt tên tiếng Anh dễ hiểu hơn, vì tiếng việt không dấu cũng dễ bị hiểu[r]

(1)

Giờ thứ 01: Làm quen với AS Giờ thứ 02: Sử dụng Action panel Giờ thứ 03: Học cách lập trình Giờ thứ 04: Viêt code Flash Giờ thứ 05: Điều khiển luồng movie Giờ thứ 06: Điều khiển movie clip

Giờ thứ 07: dịch chuyển thay đổi movie Giờ thứ 08: chọn, kéo thả movie clip

Giờ thứ 09: Lấy thông tin từ người dùng Giờ thứ 10: Tạo Và Điểu Khiển Văn Bản Giờ thứ 11: Làm việc với số Giờ thứ 12: Đối tượng Mảng Giờ thứ 13: Sử dụng Rollovers Giờ thứ 14: Thành phần Scroll

Giờ thứ 15: Các thành phần nhập liệu

Giờ thứ 16: Menu button động (continous) Giờ thứ 17: Liên kết liên lạc với trình duyệt Giờ thứ 18: Gởi thơng tin cho máy chủ

Giờ thứ 19: Dùng XML với Flash Giờ thứ 20 : Ky thuat in (Printing) Giờ thứ 21: Sử dụng component

Giờ thứ 22: Điều khiển âm với ActionScript Giờ thứ 23: Quản lý streaming cho movie

(2)

Giờ thứ 01: Làm quen với AS, Your First Look at AS

AS ngôn ngữ lập trình xây dựng Flash AS giống ngôn ngữ khác Javascript, C++ v.v bạn không cần biết ngôn ngữ khác để học AS (nếu có dễ hơn)

Bắt đâu học AS, coi thử AS gì, làm có quan hẹ với chức khác Flash Trong này, bạn tìm hiểu coi AS đời nào, xem cách viết AS làm sao, tìm hiểu AS làm sau sau xác định nơi lưu trữ AS Flash

Để sát nghĩa tiện cho sau này, không dịch số từ ngữ tiếng việt script, movieclip v.v.

Script gì?

AS ngơn ngữ lập trình, với lệnh sai khiến Flash movie làm việc theo

mình viết (chỉ có viết sai computer khơng làm sai ) Phần nhiều AS làm việc mơi trường Flash, nhiên AS gửi lệnh cho browser, hệ điều hành v.v

Script ngắn gọn vài chữ hay dài trăm trang Script việt gộp lại chổ hay viết rãi rác khắp nơi movie

Xuất xứ AS

AS rât giống ngôn ngữ C++, Java, javascript v.v dựa tiêu chuẩn ECMA (European Computer Manufactuers Association) lập gọi ECMAScript Nhiều người hiểu lầm AS dựa Javascript, thực chất dựa ECMAScript

Lúc đầu viết script Flash đơn giản Flash đuợc phát triển cịn "thơ sơ" với vòng lặp điều kiện "if else" Cho tới Flash dân Flash lập trình gắn liền script với yếu tố movie Sang tới Flash MX AS trở thành ngơn ngữ lập trình tồn diện với 300 câu lệnh, hàm v.v

Nhận biêt AS

(3)

ActionScript

on (press) {

gotoAndPlay ("my frame"); }

Bạn giải nghĩa đoạn mã cách tìm hiểu từ Chữ "press" gới ý người dùng kích chuột vào đó, (và trường hợp nút) Chữ "gotoAndPlay" chữ "go to and play" gộp lại, gợi ý AS lệnh cho Flash tớimột điểm movie bắt đầu chơi từ điểm

AS làm gì?

Flash movie gồm có scence (cảnh), mổi cảnh có timeline (thời giản biểu???) timeline có frame (khung) số Thơng thường Flash chơi từ frame frame cuối scence với tốc độ cố định dừng lại hay lặp lại từ đầu theo người làm Flash

Mục đích AS thay đổi thứ tự cách chơi Flash AS dùng bất frame nào, hay chạy ngườc trở lại frame trước hay nhảy vài frame chơi tiếp Nhưng khơng AS làm AS biến film hoạt hình Flash thành chương trình ứng dụng có tương tác người dùng Dưới mà AS làm:

 Hoạt hình: Bạn khơng cần AS để làm hoạt hình, với AS bạn tạo hoạt hình phức tạp Ví dụ, trái banh tưng xung quanh mành hình mà khơng ngừng, tuân theo định luật vật lý lực hút, lực ma sát, lực phản v.v Nếu khơng có AS cần phải dùng hàng ngàn frame để làm, cịn với AS frame đủ

 Navigation (hông biết dịchlàm cho hay ): thay movie chơi frame theo thứ tự bạn dừng movie ỏ frame nào, cho phép người dùng chơi frame v.v

 Thu nhập thông tin từ người dùng (user input): bạn dùng AS để hỏi người dùng cầu hỏi, dùng thơng tìn movie hay gửi cho server hay làm bạn muốn

(4)

 Tính tốn: AS làm phép tính mà tốn học cho phép

 Thay đổi hình ảnh movie: AS thay đổi kích thước, màu sắc, vị trí movie clip (MC) movie flash bạn Bạn tạo thêm phiên hay xoá bới phiên MC với AS

 Phân tích mơi trường máy tính: Với AS bạn lấy từ hệ điều hành hay địa chơi movie Flash

 Điểu khiển âm flash movie: AS cách tốt để điều khiển âm Flash,AS có chơi chậm, chơi nhanh, ngừng, quay vòng v.v bât kỳ âm Flash

Phát triển khả AS

Điều quan trọng mà AS làm cho bạn chưa nghĩ tới Với AS trí tưởng tượng óc sáng tạo bạn khơng có khơng thể xảy với AS

Mục đích sách, VNFX hướng dẫn bạn hiểu biết Flash để từ bạn tự dùng để làm sản phẩm tuyệt vời mà khơng có

Viết AS đâu

Câu hỏi tìm hiểu AS thường hỏi "Viết AS vào đâu?" Flash có mơi trường làm multimedia phức tạp Nếu bạn dùng Flash hay đọc qua hướng dẫn kèm với Flash, bạn biết yếu tớ timeline, key frame v.v nêu bạn chưa biết khuyên bạn nên tìm hiểu trước tiêp tục Ơ mục Flash Tổng Quá, VNFX có post link để download CD hướng dẫn cho người chưa dùng Flash

Viết AS time line

AS viết vào key frame timeline Để làm vậy, bạn chọn key frame timeline trước bạn mở Action Panel (có thể nhấn F9) để viêt hay xem AS viết Mình khun bạn nên dùng Action Panel dạng Expert Normal, bạn học nhiều lẹ

Khi viết AS vào key frame AS key frame hoạt động mà Flash chơi tới key frame Ví dụ lệnh AS stop() đặt key frame Flash chơi tới key frame dừng lại có lệnh khác cách viết gọi viết vào time line

Một lý viết script vào time line bạn muốn dùng function (hàm), function cho phép tái sử dụng đoạn mã từ nhiều nơi, nhiều level khác

Viêt AS nút

(5)

Nút khơng có tác dụng khơng kèm AS lên Muốn kèm AS vào nút chọn nút stage (sân khấu: diện tích flash movie), sau mở Action panel viết vào ta viết vào key frame

AS viết nút hoạt động chuột bàn phím tác động lên nút mà

Viết AS MC

MC khác với graphic chổ MC đặt tên mang vào stage, MC thường hình ành động, có AS kèm theo MC Để viết AS vào MC tương tự ta làm với nút

AS kèm theo MC điểu khiển MC MC timeline hay timeline movie

Giờ thứ 02: Sử dụng Action panel, Using the Script Editing Window

Nếu dân đồ hoạ coi Timeline nhà dân lập trình với AS coi Action Panel nơi cư ngụ mình, dân AS thay đổi, viết tất lệnh Vì quan trọng bạn dụng quen thuộc Action Panel

Flash MX sử dụng panel để giúp bạn lấy thơng tin movie bạn làm cách dễ dàng Khi bạn cài đặt chay Flash lần đầu tiên, Flash hỏi bạn muốn sử dụng Flash Flash xếp đặt panel cho hợp lý Bạn thay đổi cách xếp đặt theo ý bạn

Nói chung bạn nên xếp đặt panel bạn cho thuận tiện cho bạn nhất, này cần có kinh nghiệm Mình dùng dual monitor, close hết panel giữ lại hình, kéo action panel property panel qua bên monitor, bên stage, cần mở panel dùng phím tắt để mở.

Sử dụng Action panel có cách: bình thường (normal) chuyên dụng (expert) Khi chạy máy lần đầu Action panel set dạng bình thường Ở dạng bình thường bạn khơng đánh trực tiếp câu lệnh, mà phải chọn từ menu bên tay trái panel Với setup bạn khơng phạm phải lỗi viết AS

(6)

tiến được, dùng expert mode lúc đầu mệt bảo đảm bạn học mau và nhớ lâu hơn

Sử dụng Action panel với expert mode bạn có nhiều tự hơn, tự đồng nghĩa với trách nhiệm nên bạn phải cẩn thật viết code Từ normal mode chuyển sang expert mode nhấn phím tắt CONTROL + SHIFT + E, chuyển ngược lại dùng CONTROL + SHIFT + N (nhớ kích chuột vào action panel trước dùng phím tắt) Bạn đổi từ Normal mode sang expert mode lúc nào, đổi ngược lại mà code bạn khơng có lỗi

Action panel có popup menu (mũi tên xuống dưới, nằm góc phải action panel) có nhiều lệnh tốt cho bạn bạn dùng Action panel, Expert mode Bạn tìm thay câu nào, chữ script bạn Phím tắt cho tìm kiếm Control + F cho thay Control + H, nhấn F3 Flash tiếp tục tìm chữ, câu bạn muốn tìm

Một lệnh "Goto Line" giúp bạn tìm câu bạn muốn tìm Lệnh "Check Syntax" rà sốt script bạn tìm lỗi cú pháp Lúc tập viết AS, dùng nên thường xuyên dùng Chech Syntax để check lổi sctipt Lệnh "Auto Format" "Auto Format Options" giúp cho bạn trình bày script bạn cho dễ đọc Bạn thay đổi màu sắc, font chữ v.v cho script bạn bạn dễ đọc code cách vào Edit > Preferences > ActionScript Editor Các phần lại pop-up window cho phép bạn xuất hay nhập AS dạng text file in script giấy

Tuy gọi expert mode thực dùng dễ normal mode Bởi expert mode thi Action panel chẳng khác chương trình "note pad" hay "text pad" Bạn việc viết bạn muốn vào Khi dùng expert mode, bạn tham khảo câu lệnh, cú pháp AS khung bên trái Action Panel Và bạn tơn thủ số quy tắt bạn sử chức "Code Hint" Action Panel, chức tạo nên khung nhỏ nhỏ có câu lệnh AS hợp quy cho bạn lựa chọn

(7)

được

Sau thực hành nho nhỏ, giúp bạn làm quen với Action panel expert mode

1 Tạo movie

2 Chọn key frame (frame số 1) layer (mình khơng dịch chữ layer = lớp dễ trùng với class= lớp)

3 Mở Action panel (có thể dùng phím tắt hay vào phần Window > Action panel

4 Chuyển sang expert mode (dùng phím tắt hày vào pop-up menu Action panel để đổi)

5 Vào chổ để viết AS Viết đoạn code sau:

ActionScript

trace ("I am expert");

Khi bạn thử movie dịng chữ "I am expert" Output panel,

sẽ đề cập đến lệnh trace() vào tới

Giờ thứ 03: Học cách lập trình, Learning to program

Lập trình coi khoa học nghệ thuật Vì lập trình viên giỏi cần có điều kiện kiến thức ngôn ngữ mà họ dùng tính sáng tạo, có trường hợp có cách lập trình cho đề án

Trong trình viết AS, bạn tạo cho riêng phong thái viết code đặc trưng Có thể đầu bạn dùng phong cách viết code viết này, sau bạn từ từ chuyển sang phong cách riêng bạn

Thường khái niệm ngơn ngữ lập trình giống nhau, bàn khái niệm lập trình áp dụng Flash

Cách suy nghĩ computer

(8)

Cịn AS chuổi lệnh, thị cho computer, hay Flash phải làm mơi trường runtime (runtime environment)

Khi viết AS bạn nên tự coi "ngu" computer, đọc lại dòng lệnh AS nghĩ tới kết việc thi hành lệnh Khi tự đặt vào vị trí computer, bạn đốn script bạn làm mơi trường runtime, bạn thấy lỗi mà bạn vơ ý mắc phải Khi mà bạn trở thành diễn viên tuyệt vời vai

computer bạn trở thành lập trình viên tài ba

Lệnh, hàm, phép tính

Lệnh (command) yếu tố AS để thị Flash làm hành động cụ thể Lệnh thi hành tuyệt đối trường hợp khả thi Ví dụ ta viết gotoAndPlay(5) Flash tới frame chơi, movie khơng có frame lệnh khơng thể làm

Hàm (function, dùng từ function nhiều hàm) phần tính tốn phép tính cho (return) kết Ví dụ hàm random() cho số ngẫu nhiên đó, hay hàm sqrt() cho giá trị bình phương số mà hàm nhận truyền cho Lệnh hàm truyền cho hay nhiều thơng số (parameter, dùng từ parameter thay thơng số), thơng số giúp cho hàm lệnh cụ thể Ví dụ gotoAndPlay(5) thơng số, khơng có thơng số lệnh

"gotoAndPlay" khơng biết rõ phải nói Flash đâu hàm sqrt() cần có thơng số giá trị bình phương số

Sự khác biệt hàm lệnh phép tính Phép tính thường dấu +, -, *, / phép so sánh <, == > Hàm có phép tính, lệnh khơng

Biến số

(9)

một thời gian dài hay suốt trình thời gian Flash chơi

Tên biến số thường nhóm từ, hay đơn giản từ, hay chữ Thông thường tên biến số nên rõ ràng dễ hiểu nói lên tính chất thơng tin mà biến số lưu trử Ví dụ bạn muốn lưu trử tên người dùng biến số bạn nên đặt tên biến số userName (mình nghĩ đặt tên tiếng Anh dễ hiểu hơn, tiếng việt khơng dấu dễ bị hiểu lầm), bạn đặt tên biền số "n" ngắn, người đọc script bạn khó hiểu, đặt name dễ trùng với biến số hay từ khố khác (_name đặc tính đối tượng MovieClip)

Khi viết AS, bạn cần lưu ý viết cho dể hiểu dễ đọc Và lập trình viên quy ước tên biến số theo quy tắc sau: tên biến số viết thường chữ đầu tiên, viết hoa chữ cho chữ kế tiếp, ví dụ userName, userLastName, userMotherMaidenName v.v Lưu ý chữ số dùng để đặt tên cho biến số, ln bắt đâu tên chữ

Có nhiều loại biến số để lưu trử nhiều loại thông tin, loại thơng tin có nhiều loại khác Như số (number) loại giá trị biến số, cịn có loại khác số nguyên (integer), số khơng ngun (floating, double) Bạn dùng biến số để chứa chuỗi (chuỗi gọi tắt cho chuỗi chữ cái), chuỗi có chữ cái, nhiều chữ khơng có hết, tất chuỗi sau hợp lệ: "ablsdfjksl", "a", " ", "" Khi viết chuỗi cần dùng dấu ngoặc kép ("") để bắt đầu kết thúc chuỗi

Trong ngơn ngữ lập trình khác Java, C++, hay ActionScript 2.0 Flash MX 2004 bạn phải xac định trước loại thơng tin bạn lưu biến số Nhưng với ActionScript (trong FlashMX) bạn khơng cần làm việc Ví dụ biến số userName lúc đầu chứa chuỗi, sau lại chứa số ngun hợp lệ

Ngồi chuỗi số, cịn có nhiều loại khác đề cập tới vào sau

Điều kiện

Trong trường hợp nên lệnh cho Flash phải làm cho thích hợp với tình ta dùng "điều kiện" để lệnh cho Flash

(10)

nếu user 18 tuổi, user 18 tuổi chơi đoạn phim Trước tiên, Flash so sánh số tuổi user với số 18, số tuổi user thoả mãn điều kiện đặt Flash có giá trị true từ phép so sánh trên, ngược lại false Điều kiện luôn (true) hay sai (false) Một giá trị có hay sai gọi boolean Sau thực phép so sánh có kết từ phép so sánh trên, Flash chọn giải pháp đưa cho trường hợp

Đơi cần có nhiều điều kiện đơn giản "true" hay "false", ví dụ bạn muốn Flash chơi đoạn phim A cho ngừơi 18 tuổi, 18 13 chơi đoạn phim B, 13 chơi đoạn phim C

Vòng lặp

Con người làm computer lười khơng muốn làm nhiều, mà bán cho computer Nhất phải làm làm lại việc nhàm chán Vì vòng lặp (loop) yếu tố quan trọng ngơn ngữ lập trình AS vậy, bạn dùng vòng lặp script

Trong vòng lặp, "điều kiện" quan trọng Mọi vịng lặp cần có điểm bắt đầu điểm dừng điều kiện để báo hiệu điểm dừng vịng lặp Ví dụ bạn muốn cho vịng lặp chạy 10 lần có biến số dùng để đếm vịng lặp, 0, Mỗi vịng lặp chạy biến số tăng thêm Khi tới vòng lặp dừng lại Sau minh hoạ vòng lặp này:

1 Một số lệnh trứơc vòng lặp

2 Bắt đầu vòng lặp, set biến số counter = Làm số lệnh vòng lặp

4 Tăng biến số counter +=1

5 Nếu biến số counter nhỏ 9, trở lại bước thứ Ra khỏi vòng lặp, tiếp tục chương trình

Ở bắt dầu biến số counter = quy ước thơng thường ngơn ngữ lập trình bắt đầu vịng lặp

(11)

lặp Chúng ta ngưng vịng lặp trước điểm dừng nó, điều đề cập tới vào

Làm điều không tưởng

Lệnh, hàm, phép tính, biến số, thơng số, điều kiện, vịng lặp phần ngơn ngữ lặp trình, biết phối hợp lại thành chương trình hồn hảo khó

Chương trình đơn giản tập hợp lệnh cho computer để giải vấn đề Vì trước viết chương trình cần phải xác định "vấn đề" cần phải giải Ví dụ thực tế ngồi đời, mẹ bạn nhờ bạn chợ mua gà Nhưng đơn giản nói chợ mua gà chưa đủ biết mua gà sống hay gà làm mua gà sống mua loại v.v Đó chưa nói tới mua gà chở nào, giá v.v Nếu bạn mẹ nói rõ chợ bến thành, mua gà mái dầu, nặng khoảng kg, với giá khoảng 10000 thật dễ dàng cho bạn phải không?

Biết vấn đề mua gà tìm cách mua gà Bạn phải "lên kế hoạch", nên nhờ bạn chở hay taxi chợ bến thành Nếu taxi hãng nào, tìm số phone để gọi, v.v cịn nhờ bạn chở nhờ tên Rồi nên mặc quần áo chợ Ra đến chợ phải mặc làm sao, trả tiền mặt hay ghi sổ nợ Bạn thấy không, từ chuyện mua gà đơn giản mà tốn ngày trời để lên chương trình

Viết AS, bạn cần phải lưu ý tới tất việc dù nhỏ cách Flash làm theo ý bạn tình Các chương trình có bug khơng phải người viết dỡ mà chưa nghĩ tới hết tình thơi

Tóm lại, điều quan trọng lập trình khả nẳng phân tích vấn đề thành nhiều vấn đề nhỏ khơng cịn nhỏ nữa, sau xây dựng chương trình từ giải quyếy vấn đế nhỏ lên dần vấn đề

Viết mã hoàn chỉnh

(12)

"computer" cho thật giống, đừng suy nghĩ, mà thi hành lệnh script bạn Viết đoạn code nhỏ ráp lại với (vì mà lập trình theo hướng đối tượng sử dụng nhiều nhất)

Nếu script bạn có bug đừng mà nản lịng, khơng có chương trình người làm mà khơng có bug Vì bạn đừng cố gắng viêt code cho tuyệt hảo lỗi Nếu có bug bạn diệt bug thơi Bạn chuẩn bị "chiến đấu" với bug cách viết code cho dễ hiểu dễ đọc, viết nhiều thích cho đoạn mã Đơi diệt bug (debug) đơn giản có kho mà biết bug đâu để diệt Flash có kèm theo vài cơng cụ giúp bạn debug dễ dàng hơn, nói tới cơng cụ tới

Giờ thứ 04: Viêt code Flash, Writing code in Flash

Khi bạn viết script, bạn dùng tất từ khóa, ký hiệu v.v Vậy trước tiên phân tích đoạn script sau Đoạn script gắn vào button

ActionScript

on (press) {

var myVariable = 7;

var myOtherVariable = "Macromedia"; for (var i=0; i<10; i++) {

trace(i);

if (myVariable + == 5) { trace(myOtherVariable); }

} }

Dịng xác định đoạn code sau kích hoạt mà user nhấn vào nút hàm on(press) dụng vào nút mà thơi Ngồi bạn dùng on(release) bạn muốn kích hoạt đoạn mã sau user nhấn nút, buông tay

(13)

đoạn code phụ thuộc vào lệnh hay hàm

Dịng thứ hai lập biến số (mình viết tắt var nhe) tên myVariable, đặt giá trị cho tương tự hàng lập var tên myOtherVariable cho giá trị "Macrmedia" Cả câu kết thúc dấu chấm phẩy ;

Dòng thứ vịng lặp (mình gọi loop cho tiện nhe) for (sẽ nhắc tới loại loop phía dưới) điều kiện loop Nó lặp 10 lần với điều kiện bắt đầu i=0 tăng thêm cho lần lặp lên tới Tương tự on(press), for loop có đoạn code cho riêng nó, đựơc bọc quanh { } đoạn code kích hoạt mà điều kiện for loop thỏa mãn

Dòng thứ lệnh trace(), lệnh viết thông tin output window lúc bạn làm việc với Flash, user không thấy Kế tiếp điều kiện, if từ khoá Flash, kiểm tra kết phép so sánh myVariable + ==5 Nếu mà kết kích hoạt lệnh trace trong, viết output window giá trị myOtherVariable Vậy bạn thấy đoạn script hoàn chỉnh AS Tiếp theo nói đến vài phần khác AS

Output window

Ở có nhắc tới output window, mà khơng nói rõ Output window window software Flash, xuất mà bạn chảy thử movie Nếu Flash

compile movie cho bạn phát lỗi Flash viết output window Trong chạy thử movie, lệnh trace() viết thơng tin output window Output window quan trọng việt "diệt bọ", dùng chung với trace bạn quan sát thơng số, biến số, đối tượng, thuộc tính đối tượng v.v

Trong lúc học AS, bạn viết đọan script ngắn khơng làm để viết thông tin output window, đoạn code

Thực hành: viết thông tin output windown

(14)

1 Tạo file

2 Chọn frame movie, mở Action panel Chỉnh kích thước cho action panel đủ lớn để viết, nhớ dùng expert mode

3 Kích chuột vào phần viết script viết câu sau: trace("hello world"); Chạy thử movie (Control + Enter)

5 Bạn thấy output window? (Nếu output window bạn chưa mở nhấn F2) Giống action panel, output window có pop-up menu nho nhỏ góc phải Bạn dùng đễ copy, xố hay save nội dung output window hay tìm kiếm chữ, v.v Ngồi ra, pop-up menu có phần cho bạn chỉnh chế độ "diệt bọ", bạn chọn khơng cần output window in lỗi (none), hay in lỗi (error), hay in cảnh báo (error) cuối in chi tiết lỗi hay cảnh báo (verbose)

Biến số cục toàn bộ

Ở thứ 3, có nhắc đến variable (biến số) dùng đễ lưu trữ thông tin Và sử dụng variable AS dễ dàng Bạn cần ấn định giá trị cho variable Ví dụ:

myVariable = Chúng ta tạo variable có tên myVariable ấn định giá trị cho (bạn đặt tên cho variable bạn mn)

Bây bạn thử viết đoạn code sau:

ActionScript

var1= 7;

var2= "hello world";

trace ("var1: " + var1+ " /var2: " + var2);

Khi bạn chạy thử movie output window có hàng chữ sau: var1: /var2: hello world Vì số "hello world" chứa var1 var2 in

(15)

thành global variable Flash movie dùng hệ thống level, timeline movie root leve (gốc), cịn movie clip Flash movie nhỏ Flash movie lớn Các hình ảnh, script movie clip level thấp root level

Local variable (biến số cục bộ), khác với global variable, local variable có trể truy cập đoạn code, hay timeline Khi dùng local variable khỏi timeline hay đoạn code Flash xố local variable khỏi nhớ Muốn tạo local variable dùng từ khố var trước tên local variable, ví dụ: var myLocal = "This is local"; Bạn cần dùng từ khố var lần thơi, lần dùng sau cần dùng tên local variable thơi Ví dụ đoạn code:

ActionScript

var myLocal = 9; myLocal = 11; trace(myLocal);

Phép so sánh phép tính

So sánh giá trị AS đơn giản, dùng ký hiệu toán học <, >, =

Khi ấn định giá trị dùng dấu =, khác biệt so sánh dùng == Đoạn code sau xét coi giá trị a có khơng, in kết output window Và test đoạn code sau, bạn thấy true output window

ActionScript

var a = 7; trace(a == 7);

Nếu bạn dùng lộn = với == bị lỗi runtime Flash khơng tìm lỗi cho bạn

Bạn dùng == để so sánh chuỗi mẫu tự:

(16)

var myString = "Hello World."; trace(myString == "Hello World."); trace(myString == "hello world.");

Khi bạn test đoạn code bạn có "true" "false" output window, lần so sánh thứ nhau, lần thứ hai khơng chữ H h khác

Nếu bạn muốn thử coi giá trị có khác khơng dùng ky hiệu !=

ActionScript

var a = 7; trace(a != 9); trace(a != 7);

Hàm trace cho "true" khác 9, thứ hai cho "false" Nếu bạn muốn thử giá trị coi lớn hay nhỏ dùng > <

ActionScript

var a = 7; trace(a < 8); trace(a > 6); trace(a < 1);

Đoạn code cho "true", "true" "false" output window "a" thật nhỏ lớn 6, không nhỏ

Nếu bạn muốn thử giá trị coi lớn hay nhỏ hay dùng ký hiệu >= <=

ActionScript

var a = 7; trace(a <= 9); trace(a >= 5); trace(a >= 7);

Đoạn code cho kết "true"

(17)

nhân (*), chia (/) Ví dụ muốn thêm vào giá trị a viết a = a + AS có cách viết tắt Java, C++ cho dụ này, a += Nếu bạn muốn thêm vào a bạn viết cách a = a +1 a += cách thứ a++ Dấu ++ làm tăng thêm cho giá trị thơi Có cách dùng ++, để sau variable cách trên, cách để trước variable Bây giở thư đoạn code sau:

ActionScript

var a = 7; trace(a++); trace(a);

Ở output window bạn thấy tới Ở dòng thứ 2, hàm trace cho giá trị a trước tăng giá trị a lên thêm Bây xem ví dụ khác:

ActionScript

var a = 7; trace(++a); trace(a);

Ở output window bạn thấy Ở dịng thứ ví dụ này, hàm trace tăng giá trị a trước cho giá trị a Tương tự ++, AS có cách viết tắt cho giãm giá trị variable dấu -, -=, =- Phép tính nhân chia có *, *=, /, /= thơi

Điệu kiện

Trong AS ngôn ngữ khác, if else từ khố điếu kiện Tiếng việt có nghĩa "nếu khơng" Từ khố if dùng kết so sánh để tới định kích hoạt đoạn code Đoạn code sau so sánh giá trị variable a với 7, Flash chơi frame 10

(18)

if (a == 7) {

gotoAndPlay(10); }

Từ khố if ln bắt đầu cho điều kiện so sánh Luôn đặt code so sánh ngoặc đơn () Tất code kích hoạt nều điều kiện thoả mãn để đâu ngoặc móc {}

Từ khố else bổ sung cho if trường hợp bạn muốn thực đoạn code điều kiện if không thỏa mãn Ví dụ:

ActionScript

if (a == 7) {

gotoAndPlay(10); } else {

gotoAndPlay(15); }

Nếu trường hợp cần thỏa mãn nhiều điều kiện dùng cú pháp if else if else Bạn có bao nhiều else if

Nãy ta chi nói tới điều kiện dựa so sánh, AS cho phép dùng so sánh đa hợp (compound comparision) Trong điều kiện Flash ta dùng nhiều so sánh đễ tới kết xác Ví dụ a lớn 10 a phải nhỏ 15 lệnh cho Flash chơi frame 10

ActionScript

if ((a > 10) and (a < 15)) { gotoAndPlay(10);

}

Từ khoá and (cịn viết &&) u cầu phải thoả mãn điều kiện phép so sánh Bạn dùng từ khố or (cịn viết ||)nếu cần thoả mãn điều kiện phép so sánh

(19)

if ((a > 10) or (a < 15)) { gotoAndPlay(10);

}

Vòng lặp

Cú pháp vịng lặp (loop) rắc rối so với cú pháp điều kiên if tương tự C, C++, Java Gồm có loại vịng lặp for loop, while loop do-while loop

for loop coi vịng lặp với từ khố for cú pháp nhìn sau:

ActionScript

for(var i=0;i<10;i++) { trace(i);

}

Nếu bạn cho chạy đoạn code bạn có từ số tới output window for loop tăng giá trị variable i suốt trình thực loop Điều kiện for loop có phần chính, cách biệt dấu chầm phẩy ( Đầu tiên điều kiẹn bắt đầu với việc tạo local variable cho for loop var i=0 phần for loop thực có lần lúc bắt đâu Phần thứ hai điều kiện for loop i<10, thực vòng lặp Nếu điều kiện thoả mãn tiếp tục vịng lặp Và phần cuối phép tính cho tiếp nối for loop vòng lặp, i++ nên giá trị i tăng sau vòng lặp trước vòng lặp bắt đầu phần bỏ vào ngoặc đơn () Còn code thực vòng lặp ngoặc móc {} Bây giả làm computer chạy for loop

1 Tạo local variable ấn định giá trị cho

2 Kiểm tra giá trị i có nhỏ 10 khơng, nhỏ 10 vịng lặp thực code {}, cịn khơng tới bước thứ

(20)

Tới bước thứ giá trị i 10

while loop với từ khoá while có cú pháp nhìn tương tự sau:

ActionScript

while (a > 0) {

// code thực while loop }

Đơn giản for loop, while loop tương tự điều kiện if đơn giản, thực code vòng lặp điều kiện while loop thỗ mãn, bạn dễ dàng vào trường hợp vịng lặp vơ hạn, dẫn đến tình trạng treo máy Trong đoạn code trên, bạn phải làm co lúc a nhỏ hay vòng lặp ngừng lại

Giống while loop, do-while loop có cú pháp nhìn sau:

ActionScript

do {

// code thực do-while loop } while (a > 0);

Chỉ khác với while loop do-while loop thực code vòng lặp trước kiểm tra điều kiện (while loop kiểm tra điều kiện chạy code vòng lặp)

Muốn phá khỏi trình tự hành loại loop dùng lệnh break continue Lệnh break phá khỏi loop hoàn toàn lệnh continue phá khỏi vịng lặp bắt đầu vòng lặp Tạo ví dụ cụ thể phức tạp, nên tạm khoan bàn tới lệnh sau

Hàm

(21)

ActionScript

function myFunction(num) { var newNum = num + 3; return newNum;

}

Fuction khố function, tên function chữ cách bạn đặt tên cho variable, lưu ý cách đặt tên cho fuction để người ta đọc tên biết chức function Theo sau tên function thơng số

(parameter, cho ngằn gọi thơng số param viết này) để ngoặc đơn () Function co

hay nhiều param hay không cần param Param chẳng qua la variable dùng function, variable truyền tự vào function gọi Đoạn code function thực nằm ngoặc móc {} Bây giớ phân tích đoạn code Khi function myFunction gọi, param num truyền vào, sau function myFunction tạo local variable tên newNum, ấn định giá trị newNum giá trị param num cộng với Sau myFunction dùng lệnh return để ấn định giá trị newNum kết myFunction Lệnh return lệnh đặc biệt dùng function mà Lệnh kết thúc function

Để sử dùng function này, dùng lệnh hay hàm AS, giống trace() Đây ví dụ: var a= myFunction(7); Trước tiên tạo local var sau ấn định giá trị local var kết myFunction với param 7, cuối thi local var 10

Một ưu điểm function bạn tái dụng Dưới hàng code dùng chung fuction cho kết khác

ActionScript

trace(myFunction(7)); trace(myFunction(13)); trace(myFunction(2));

(22)

Dot Syntax

Một điều bạn thấy nhiều trình học AS dot syntax (hỗng biết dịch bây giờ) Dot syntax phương pháp dùng lập trình theo hướng đối tượng (oob: object oriented programming)

Đây ví dụ dot syntax Nếu bạn muốn lấy bình phương số, Flash có sẵn function để làm chuyện rồi, hàm thuộc đối tượng toán, tên Math Vậy muốn gọi function trước tiên bạn phải gọi tên đối tượng mà fucntion trực thuộc, Math, theo sau dấu chấm (dot), tới tên function sqrt Cách viết sau:

ActionScript

var a = Math.sqrt(4);

Một cách dùng dot syntax khác để truy cập đặc tính hay variable đối tượng, movie clip

ActionScript

var a = myClip._x;

var a = myClip.myVariable;

Chúng ta đề cập đến đối tượng Math MovieClip tới, cịn quan trọng bạn nắm khái niệm dot syntax

Chú giải

Một đức tính cần có lập trình viên viết code cho dễ đọc dễ hiễu Nhưng nhiều dù viết có cố gắng cách đoạn code khó hiễu cho người xem, cần lời giải Muốn giải AS cần dùng ký hiệu// trước câu giải Nếu giải nhiều vài dịng dùng kiểu

(23)

ActionScript

/*

giải: cộng cho a cộng cho b */

a += 2; // add a // add to b b += 2;

Debugging

Thường thời gian diệt bọ tốn gần 1/3 thời gian phát triển chương trình Nếu bạn nắm vững "nghê thuật" diệt bọ bạn rút ngắn nhiều thời gian Có cách diệt bọ hữu là: phân tích, viết message output window dùng AS debugger

Với loại bọ đơn giản phân tích đoạn code giúp bạn bắt trúng bọ cần diệt Dùng output window để theo dõi đối tượng, vòng lặp, điều kiện, nhờ vào bạn biết chổ code có vấn đề, cuối dùng AS debugger có sẳn Flash Debugger window cho phép bạn coi hết tất moi thành phần movie bạn, cho phép bạn dùng AS bất chổ bạn muốn Tham khảo thêm phần trợ giúp Flash để biết cách dùng debugger

Giờ thứ 05: Điều khiển luồng movie, Control the flow of the movie

Sử dụng AScript cách điều khiển movie đơn gỉản nhất, nhung lại hiệu Chương bạn học cách :

 để dừng Movie frame

 Sao để nhảy từ frame đến frame  tạo nút cho phép điều khiển movie  tạo slide show đơn giản

(24)

Dừng movie

Đây câu lệnh stop:

ActionScript

stop();

Khi bạn dùng câu lệnh , movie tạm dừng frame mà bạn đặt câu lệnh Các animation bên movieClip file đồ họa tiếp tục chạy frame Nhưng animation time line bị dừng

Để cho animation timeline tiếp tục chạy, ta sử dụng lênh đơn giản lệnh play ta bàn đến sau

Ví dụ

Tại frame 1, bạn thả text box viết vào Chữ A Tại frame 2, bạn thả text box viết vào Chữ B Tại frame 3, bạn thả text box viết vào Chữ C

Bây bạn hay đặt câu lệnh stop(); vào Frame 2, bạn se thấy chữ A xuất nhanh đến chữ B, chữ C ko thấy xuất hiện,, Đơn giản câu lệnh stop() dừng

animation timeline Frame

Nhảy từ frame đến frame kia

Một câu lệnh AS câu lệnh gotoAndPlay Câu lệnh giúp bạn nhảy từ frame đến frame mà bạn muốn Bạn sư dụng số thứ tự frame tên frame

ActionScript

gotoAndPlay(7); gotoAndPlay(20);

(25)

bạn sử dụng nhiều movies , hay gọi cảnh(scene) Nếu Câu lệnh gotoAndPlay có tham số, tham số frame Nhưng có tham số,thì tham số đầu tiền tên scene, tham ssố thứ số thứ tự frame hay tên frame

ActionScript

gotoAndPlay("My Scene","My Frame");

Khi bạn dùng gotoandPlay,movies nhảy đến frame mà bạn gọi , tiếp tục chạy, bạn muốn nhảy đến frame dừng lại, bạn co thể sử dụng gotoAndStop Câu lệnh dùng y hệt gotoAndPlay, với lựa chọn tham số hay tham số

Ngồi có thêm câu lệnh họat động giống gotoAndStop , nextFrame and prevFrame

Để hiểu rõ câu lệnh này, ta tiếp phần sau Tạo nút (button)

Nút biểu tượng (symbol) Flash, movie cilps hình Tạo button

Có nhiều cách để tạo nút Một cách chọn Insert, New Symbol từ Menu Một hộp thoại lên hỏi bạn đặt tên lựa chọn biểu tượng bạn loại Movie clip, button, hay đồ họa Bạn chọn Button

Bây cửa sổ Flash thay đổi, timeline button thay timeline movie Có frames timeLine button Chúng có tên Up, Over, Down, HIt CHúng thể trạng thái button, vùng họat động button

(26)

VÙng hoạt động button tương tự

Mặt khác , bạn tạo hiệu ứng khác cho button bạn VÍ dụ bạn đổi mầu vòng tròn màu xanh Frame OVER,có nghĩa bạn đưa chuột qua button, button chuyển sang màu xanh

Khi bạn tạo xong button, bạn trở lai movie timeline Và button bạn sẵn sàng thư viện FLash Bạn viêc bấm F11, tìm button bạn kéo thả vào nơi bạn cần cửa sổ thiết kế

Tạo script cho button

Để đặt script cho button, chọm button Sau vào cửa sổ Action cách bấm chuột phải lên button chọn Action từ menu xuất

Hãy Chắc chắn cửa sổ Action đặt chế đọ Expert Bạn kiểm tra băng popup menu góc bên phải cửa sổ

Đây đoạn mã thơng thường cho button Bạn đặt cửa sổ mã sau kiểm tra movie xem họat động

ActionScript

on (release) {

trace("You clicked the button!") }

on : keyword, gọi để xử lí kiện

Release : Là kiện, người sử dụng click vào button nhả chuột Đoạn mã trace thực thi

(27)

Thực Hành: Tạo Slide Show đơn giản

Có lẽ ko phải diễn tả nhiều Slide Show, bạn tưởng tượng giông Power Point Khi bấm chuột, slide chuyển sang slide khác

1 Mở Flash, chọn New

2 Trong Layer 1, từ Frame đến Frame 4, bạn đăt biểu tượng hay hình ảnh, text khác để phân biệt frame

3 Sau bạn tạo layer mới, đặt button lên layer này.Tiếp theo bạn chọn Frame layer 2, bấm F6 Điều đảm bảo cho button bạn xuất tất Frame Layer

Bây copy đoạn mã sau vào button bạn, ý nhớ copy vào action button, ko phải vào frame

ActionScript

on (release) { nextFrame(); }

Cuối chọn Frame Layer action chèn đoạn code sau

ActionScript

stop();

Hãy chạy thử slide show bạn = cách bấm Ctrl Enter 5) Xây dựng presentation đơn giản:

(28)

down load file FLA để xem easy

Giờ thứ 06: Điều khiển movie clip, Controlling Movie Clips 6th Hour Điều khiển movie clip

Bạn học

1- lệnh cho movie clip 2-Tạo playback cho animation

3-TÌm hiểu đích(target) movie clip 4-Tập viết code cho movie clip

5-Tạo movie clip chạy lùi lại

1) Ra lệnh cho movie clip :

Một movie đơn giản NÓ cần frame movie clip Nhưng thân movie clip lại animation dài Việc dễ dàng thực mà ko cần Actioncript Để điều khiển movie, bạn phải đặt tên cho movie clip Chú ý movies clip có tên, tên sử dụng cho timeline Một tên sử dụng cho actioncript tên đặt trùng tên khác tên

Làm để đặt tên cho movie clip :

Chọn insert -> New Symbol (hoặc bấm Ctrl F8), đặt tên cho movies clip (nhớ lựa chọn option movies clip, ko phải button hay graphic)

Tên sử dụng cho timeline vd: gear animation

Thả movie gear animation vào cửa sổ thiết kế PHía cửa sổ properties, ban thấy box instance name Đặt tên cho movie

tên sử dụng cho Action script , vd : gears

và vậy, bạn lập trình , tên sử dụng gears , ko phải gear animation bạn sử dụng dấu chấm để đưa lênh cho movie bạn ví dụ

(29)

gears.stop();

gears.gotoAndStop(5);

Nhớ movie clip ln có level Nếu đoạn mã đặt movieclip, bạn ko cần sử dụng tên movies, cần gotoAndStop(); Nếu bạn đặt tên movie vào, Flash tìm movie bạn từ timeline Tức phải qua level -> chậm chút

2)Animation Playback Controller

Hãy down load source code từ phần download xem Về bản, làm việc sau:

- Tạo Movie ,đặt tên gear animation - Đặt instance name gear(hướng dẫn trên) - Frame time line chính, chèn code

ActionScript

gears.stop();

-Tạo button Advance, Previous, Play, Stop, and Rewind -Code cho button

Advance

ActionScript

on (release) {

gears.nextFrame(); }

Previous

ActionScript

on (release) {

(30)

Play

ActionScript

on (release) { gears.play(); }

Stop

ActionScript

on (release) { gears.stop(); }

Rewind

ActionScript

on (release) {

gears.gotoAndStop (1); }

3) Target movie

Level Flash time line chính(Level 0) Nếu bạn muốn lệnh cho time line này, bạn dùng code sau

_root.gotoAndStop();

thậm chí bạn đặt code time line chính, bạn ko cần _root Chỉ cần gotoAndStop(); Giả sử bạn có movie time line, tức bạn có level sâu hơn(level 1) Nếu bạn từ time line chính, muốn goi movie gears , bạn phải dùng câu lệnh

gears.gotoAndStop(7);

(31)

this["gears"].gotoAndStop(7);

Cả cách giống Tuy nhiên this có nghĩa level hành VÍ dụ trên, level hành this level Nhưng code đặt movie, level hành level Bạn phải ý

Giả sử bạn có movie khác bên movie, tức bạn có level Nếu bạn muốn từ level gọi đến level 2, bạn phải dùng _parent

Parent dùng giống root, khác chỗ, gọi từ level Còn root gọi từ level (tức level gốc)

Thuận lợi từ việc sử dụng root, this bạn gán biến cho movie clips

ActionScript

var whichClipToUse = "gears"; this[whichClipToUse].stop();

Thuận lợi vịệc sử dụng this nhiều root chỗ , ko phải lúc thứ xảy time line chính, đơi ta muốn xảy level định Bởi this cách tốt để goi level movie Tuy nhiên trương hợp đơn giản, hay đặt tên cho movies

4) Mã cho movie clip

Chúng ta bàn button trên, movie clip script giống button,

ActionScript

onClipEvent (load) {

trace("This clip has been loaded."); }

(32)

load : kiện xảy movie clip xuất lần hình NĨ xảy lần

Nhớ time line bị đừng, movie clip nằm time line tiếp tục chạy Sự kiên enterFrame xảy liên tục bên movie clip đến frame Sự kiện thực thi đoạn mã cách liên tục bị kết thúc

ActionScript

onClipEvent (enterFrame) {

trace("This clip has entered a new frame."); }

bây copy đoạn code vào sổ action timeline run bạn 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ữ tiếp tục bạn tắt movie

Giờ thứ 07: dịch chuyển thay đổi movie, Moving and Changing Movie Clips

Một movie clip (MC) có thuộc tính, cho phép bạn xác định vị trí, phóng to thu nhỏ, quay, chí làm biến

Chương bạn biết cách: -thay đổi vị trí mc

(33)

Mọi thứ Flash có vị trí VỊ trí đo PIXEL Góc bên trái hình vị trí (0,0) Nó vị trí giao hàng ngang cột dọc

Nếu bạn sử dụng movie mặc định, góc bên phải 550,400 Có nghia 550 pixel từ bên trái sang 400 pixel từ bên xuống

(34)

2) Vị trí Mouse:

Cũng movie, mouse xác đinh tọa độ CHú ý thuật ngữ mouse nói đến trỏ (cursor), khơng phải chuột bạn cầm tay ^^

Có hai thuộc tính trỏ , _xmouse _ymouse

(35)

line chính, mặc định góc trái Nếu xmouse ymouse thuộcc tính movie clip, mặc định trung tâm MC

Hầu hết trường hợp thuộc tính liên quan đến movie chính, bạn nên dùng cách _root._xmouse _root._ymouse

Đây đoạn code ví du

CODE

onClipEvent (enterFrame) { trace(_root._xmouse); trace(_root._ymouse); trace("");

}

Khi bạn chạy movie, bạn thấy cặp số in ra, tọa độ x,y mouse Hãy dịch chuyển mouse lên góc trái trên, bạn thấy vị trí mouse 0.0 góc phải dưới, tọa độ 550 400

Chú ý: bạn đưa chuột ngồi Flash window, tọa độ cht xmouse y mouse không thay đổi Nếu bạn di chuyển chuột thật nhanh từ trung tâm cửa sổ cửa sổ, giá trị cũ bạn quay trở lại cửa sổ VÌ vậy, bạn phải lên kế hoạc cẩn thẩn trước dùng xmouse, y mouse

3) Làm movie quay

Một thuộc tính khac thuộc tính _rotation

Thuộc tính rotation chấp nhận giá trị góc độ Một vòng tròn chia 360 độ, miền giá trị thuộc tính rotation -180 180 Bạn sử dụng giá trị integer hoạc floating point Giá trị _rotation ln ln vịng -180 180, ví dụ 179, -179 Nhưng bạn đặt 181, hiểu thành góc độ -179

(36)

CODE

myClip._rotation = 90; myClip._rotation++;

_root["myClip"]._rotation = 45; this._rotation += 0.5;

4) Co giãn đàn hồi MC:

Bạn làm co giãn, thay đổi chiều dài chiều rộng movie clip Scale thuộc tính

THuộc tính để làm việc _xscale cho chiều ngang _yscale cho chiều dọc

Các giá trị gán cho x,y scale phần trăm Có nghĩa giá trị 100 100 phần trăm , thuộc tính mặc đinh cho movie clip gốc Bạn sử dụng số nhỏ 50 để làm movie co lại Hoặc sử dụng số to hơn, 200 để giãn movie Thậm dùng giá trị âm để lật movie

ví dụ 07mousesclae.fla chứa đoạn mã mà chúgn ta gặp nhiều sau Nó kiểm tra tọa độ mouse, Sau xác đinh từ mouse đến trung tâm movie xa Rồi sử dụng khoảng cách ,cả chiều cao chiều rộng để tính phần trăm tỉ lệ cho movie clip

CODE

onClipEvent (load) {

// get the original width and height of the mc origWidth = this._width;

origHeight = this._height; }

onClipEvent (enterFrame) {

// get the distance from the center of the mc to the mouse dx = _root._xmouse-this._x;

(37)

// 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ú ý ta sử dụng thuộc tính mới, _width _height trả chiều cao chiều rộng movie clip Pixel CHúng lưu giú onClipEvent (load) để ta cần lấy lại giá trị gốc movie

Thuộc tính _width, _height

Sự khác scale width,height í scale sử dụng giá trị phần trăm Còn width height sử dụng pixel Movie có giá trị sau: width 75, height 45, scale cho xscale and yscale 100 phần trăm

Dưới ví dụ sử dụng width height thấy 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; }

(38)

onClipEvent(load) gái trị chiều dài chiều cao movie gốc ko cần lưu trữ.Đây ví dụ cho thấy sử dụng width height tiện dụng xscale ,y scale

5) Visibility

Một thuộc tính khác MC thuộc tính _visible , giá trị thuộc tính giá trị boolean true , false

CODE

myClip._visible = false;

hãy xem ví dụ 07visible.fla để rõ

Giả sử ta không muốn movie biến hẳn, mà bị mờ đi, ta sử dụng thuộc tính _alpha Thuộc tính có giá trị từ đến 100

CODE

myClip._alpha = 50;

Thuộc tính alpha kênh màu thứ 4, tên alpha channel kênh red ,green, blue đủ để tạo màu cầu vồng Khi bạn nghe đến đồ họa 32 bit, có nghĩa đủ kênh màu Cịn 24 bit có nghĩa cỏ kênh

Nếu giá trị _visible movie suốt hồn tịan nhìn thấy tất thứ phía sau movie

Nhìn hình sau để xem movieclip với giá trị alpha khác nhau, 10, 50 100 (từ trái sang)

Giờ thứ 08: chọn, kéo thả movie clip, Moving and Changing Movie Clips

1 Selection

(39)

Tạo chọn lựa, có nghĩa user click vào item , khơng có xảy Như vậy, người dùng lựa chọn thay đổi lựa chọn

Chúng ta sử dụng lụa chọn bước để học kéo thả movie Button bên Movie method

Một movie phản ứng với mouse click Không thể sử dụng kiện on (release) hay (Press) ta phải tìm cách đánh lừa Đó sử dụng button bên movie Button xử lý mouse click, miễn có độ lớn đủ để bao trùm movie

Hãy xem ví dụ 08buttoninmc.fla Ta nhìn thấy movie clip hình.nhưng thực chất bên movie clip button

Để tạo khả select, ta phải tạo nhiều frame.Frame chứa button tên offbutton Button có mã

CODE

on (release) {

this.gotoAndStop(2); }

bằng this, button gọi đến movie clip mà nằm Frame thứ chứa nút tương tự nhu frame , tên onbutton, nút có mầu sáng để người dùng nhận chọn

CODE

on (release) {

this.gotoAndStop(1); }

cuối đặt vào frame

(40)

stop();

Bây chạy để xem Phương thức hitTest

Có cách khác để làm movie sử lý mouse click mà khơng cần button, sử dụng kiện onClipEvent(mouseDown) onClipEvent(mouseUp)ví dụ

CODE

onClipEvent (mouseUp) { this.gotoAndStop(2); }

Hãy chạy ví dụ 08twomcs1.fla để xem.Bạn thấy onClipEvent(mouseUp) khác với on (Release) Nếu bạn click vào movie, hai phản ứng.Bởi tất movie clip nhận kiện mouse up gửi đến cho chúng

Quyết đinh movie click

Có cách để click vào movie muốn Đó sử dụng vị trí chuột để xác định Sửa đoạn mã thành sau

CODE

onClipEvent (mouseUp) {

if (this.hitTest(_root._xmouse, _root._ymouse)) { this.gotoAndStop(2);

} }

vậy cách ràng buộc movie clip với mouse location , ta click movie ta muốn VIết mã cho selection:

Chúng ta phải cho phép User click lên movies nhiều lần thay đổi trạng thái MC từ bật sang tắt, hay tắt sang bật

Đoạn mã sau xác định movie trạng thái gửi đến frame khác VIệc thực thuộc tính _currentFrame Thuộc tính đọc giá trị khỉ frame thứ nhất, giá trị frame thứ

(41)

onClipEvent (mouseUp) {

if (this.hitTest(_root._xmouse, _root._ymouse)) { if (this._currentFrame == 1) {

this.gotoAndStop(2); } else {

this.gotoAndStop(1); }

} }

Bây bạn thấy cách để tạo chọn lựa movie Cách thư tiện lợi bạn muốn dùng trang thái khác Over,up , down Cách thứ hai khơng cần nhiều biểu tượng thư viện

Enjoy

2) Kéo movie clip

Bây ta học kéo movie

Có cách để kéo movie, cách thứ sử dụng lệnh Cách dễ sử dụng khơng cho bạn nhiều lựa chọn việc sửa đổi giám sát movie

Cách Drag bản:

2 câu lệnh drag co :startDrag stopDrag bạn dùng startDrag bạn muốn movie bạn theo chuột, stopDrag bạn muốn movie bạn không theo chuột Đây đoạn code :

CODE

onClipEvent (mouseDown) {

if (this.hitTest(_root._xmouse, _root._ymouse)) { this.startDrag();

} }

(42)

if (this.hitTest(_root._xmouse, _root._ymouse)) { this.stopDrag();

} }

Sự kiện onClipEvent nhìn tương tự ta làm Chúng sử dụng hitTest để nhận biết movie click Và sau câu lệnh startDrag stopDrag sử dụng Khi chuột bấm xuống, câu lệnh startDrag thực thi Và ngược lại, chuột thả ra, stopDrag thực thi

Hãy xem movie, bạn thấy với câu lệnh drag, bạn kéo movie cách độc lập Nhưng ý bạn kéo movie lúc Chỉ movie kéo thời điểm Vì bạn nên cần cách drag phức tạp linh động để làm ứng dụng hay game

Note: startDrag có thám số Tham số thứ giá trị True(hoặc False) để định việc trung tâm movie clip có khóa với vị trí chuột hay khơng Các tham số lại left, top, right, bottom Nếu bạn đặt chúng, movie bạn kéo theo ràng buộc

Kéo nâng cao

Bây ta học cách kéo movie mà ko dùng câu lệnh startDrag stopDrag Vậy làm nào??

Bạn cần có phần mã sau movie bạn:

Thứ kiện onClipEvent(load), kiện đặt cho biến global tên dragging giá trị false Khi biến true, tức báo hiệu movie kéo

Thứ hai, ngưịi dùng click vào movie Có nghĩa dragging = true

Thứ ba, trình kéo tiếp tục diễn kiện onClipEvent(enterFrame) Sự kiện đơn giản gán _x _y (thuộc tính movie clip) cho _root._xmouse

(43)

Thứ 4, ngưịi dùng thả chuột , biến dragging gán false Sau đ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; }

(44)

Trong ví dụ 08complexdrag.fla chứa MC Kiểm tra movie, sử dụng MC bên trái Đây MC làm theo đoạn code Chú ý xem trung tâm movie đựơc khóa với vị trí chuột Nó làm movie nhảy bạn click vào

Thơng thường, bạn muốn kéo MC lên hình, bạn khơng muốn nhảy tới để làm khớp vị trí chuột với trung tâm MC Hãy kéo file xung quanh hình.Bạn thấy bạn click chuột vào điểm movie, movie làm khớp vị trí click chuột với trung tâm movie Điều tương tự với câu lệnh startDrag

Để tránh điều này, cần thêm đoạn code nhỏ Khi ngưòi sử dụng bấm chuột, lấy offset, khoảng cách từ chuột trung tâm movie Sau đó, thay việc gán vị trí chuột đến trung tâm movie, ta se thêm vào offset MC luôn xuất offset giá trị người dùng kéo

Tưởng tượng , ví dụ ngưịi dùng click vào điểm cách trung tâm movie pixel Sau ta ln muốn khoảng cách pixel trì Điều làm cho người dùng click vào điểm để kéo movie

Đây code cho movie 2(bên phải)

CODE

onClipEvent (load) {

// start out not dragging dragging = false;

}

onClipEvent (mouseDown) {

if (this.hitTest(_root._xmouse, _root._ymouse)) { // follow the mouse from now on

dragging = true;

(45)

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 biệt đoạn code 3) Kéo thả

Bây ta biết kéo movie, ta thả đâu.?

Vấn đề bạn muốn theo dõi hành động người sử dụng xác đinh người sử dung đặt movie đâu

Basic Drop Zone

(46)

Trong đoạn mã sau, chức hitTest sử dụng để so sánh MC kéo với movie khác tên dragZone 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 sử dụng trước, thay vị trí _x _y movie khác

Loại hitTest so sánh vị trí vùng bao phủ movie clip Trong trường hợp này, so sánh với _parent.dropZone Nếu có movie đè lên nhau, hitTest trả giá trị True Để xác đinh xem MC tồn tại, hình chữ nhật movie sử dụng Điều có nghĩa bạn sử dụng hình trịng, ví dụ, thân vịng trịn khơng chạm vào miễn hình nhật movie dùng

(47)

Có cách sử dụng hitTest Thứ sử dụng tọa độ x,y Chúng ta sử dụng movie clip vị trí x,y, sau sử dụng dropzone movie clip thứ

CODE

if (_parent.dropZone.hitTest(this._x,this._y)) {

Với đoạn code này, thay ví dụ trên, movie clip nằm bên hình chữ nhật vùng dropzone

Chúng ta thêm bước với hittest Bằng cách thêm tham số thứ cho hitTest, dùng hitTest để xem hình dạng xác movie clip xác đinh vị trí x,y Biến thứ cần gán true bạn muốn hành vi Nếu false, se hành động giống chức hitTest bình thường Đây đoạn code

CODE

if (_parent.dropZone.hitTest(this._x,this._y,true)) {

Bây movie kéo thả ta họat động tốt Nếu bạn sử dụng ví dụ 08drop.fla, movie bên phải sử dụng đoạn mã gơc, nằm đè hình chữ nhật dropzone Các movie khác sử dụng đoạn code phức tạp hitTest chúng có trung tâm nàm bên hình dạng gốc dropzone

Giờ thứ 09: Lấy thông tin từ người dùng, Getting input from the user

Cho tới bây giờ, qua làm quen với AS, tất tác động bạn lên flash làm qua chuột Nhưng ngồi chuột, bạn dùng bàn phím để nạp thơng tin vào Flash

Làm để phát người dùng bấm phím

Có cách để phát phím tên bàn phím bị nhấn dùng nút, dùng đối tượng Key, dùng "listener" (chỉ có Flash MX MX 2004)

1 Phát qua nút:

(48)

xử lý kiện on cho đoạn code nút Ví dụ đoạn code sau kích hoạt mà người dùng nhấn phím "a"

ActionScript

on (keyPress "a"){

trace ("Key 'a' pressed"); }

Trong movie mẫu 09keybutton.fla có nút đơn giản nằm hình vài ví dụ Nếu bạn cho chạy thử movie nhấn phím "a" Output window có viết dòng chữ

"Key 'a' pressed." Xử lý kiện on(keyPress) nhớ phải phân biệt dạng chữ (case-sensitive) nên bạn code cho nhận phím "a" khơng thể nhận phím "A" May mà dùng bao nhiều xứ lý kiện

Nếu bạn muốn xữ lý phím khác, phím mũi tên, enter, dài (space bar) bạn phải dùng code dành riêng cho chúng Vì dụ bạn muốn xữ lý phím mũi tên trái (left arrow key) dùng đoạn code sau:

ActionScript

on (keyPress "<Left>") { trace("Left pressed."); }

Và sau code dành cho phím đặc biệt:  <Right>

(49)

 <Tab>

 <Backspace>  <Escape>  <Home>  <Enter>  <Space>

Bạn hợp nhiều kiện lại chung với Ví dụ bạn có nút nút có phím tắt "b" Vậy bạn nhấn nút nhấn phím "b" code nút kích hoạt

ActionScript

on (keyPress "b", release) {

trace("'b' pressed or button clicked."); }

Các ví dụ có movie mẫu 09keybutton.fla

2 Phát qua Đối tượng phím (key object)

Mặc dù nút hữu ích việc phát người dùng nhấn phím, nút lại khơng thể phát trường hợp người dùng nhấn phím khơng tay Ví dụ bạn làm game Flash, người chơi cho thể làm cho nhân vật game di chuyển liên tục họ nhấn phím mũi tên không nhât tay lên

Cho trường hợp vậy, bạn phải dùng đối tượng Key Đối tượng Key tập hợp số hàm (function) số (constant) xây dựng sẳn Flash Bạn dùng hàm số để biêt phím bị nhấn hay khơng Ví dụ, muốn kiểm tra coi phím mũi tên trái có bị đang nhấn hay khơng dùng đoạn code sau:

ActionScript

(50)

Hàm Key.isDown cho kết hay sai phụ thuộc vào thông số có phải phím bị nhấn hay khơng Hằng số Key.LEFT tượng trưng cho phím mũi tên trái mũi tên trái bị nhấn output window cho hàng chữ "The left arrow is down" Dưới số tương tự Key.LEFT đề cập

 Key.BACKSPACE  Key.ENTER  Key.PGDN  Key.CAPSLOCK  Key.ESCAPE  Key.RIGHT  Key.CONTROL  Key.HOME K  ey.SHIFT

 Key.DELETEKEY  Key.INSERT  Key.SPACE  Key.DOWN  Key.LEFT  Key.TAB  Key.END  Key.PGUP  Key.UP

Nếu bạn muốn kiểm tra xem phím bình thường bị nhấn bạn phải dùng

Key.getCode để lấy mã số phím để dùng hàm Key.isDown Đây code mẫu bạn muốn kiểm tra phím "a"

ActionScript

if (Key.isDown(Key.getCode("a")) { trace("The left arrow is down"); }

(51)

3 Key Listener

Key listener dùng để quan sát bàn phím thơng báo cho Flash phím nhấn Ở cách thứ dùng đối tượng Key để kiểm tra coi phím có bị nhấn hay khơng, khơng thể biết xác lúc phím bị nhấn Nếu mà người dùng nhấn phím nhanh, trước onClipEvent(enterFrame) kịp kích hoạt đối tượng key để kiểm tra Flash người dùng nhấn phím Một bất tiện dùng cách thứ bạn muốn người dùng nhấn phím nhiều lần đối tượng Key khơng phân biệt lần nhấn dài nhiều nhấn thật nhanh

Ví Flash MX, MM cho thêm lựa chọn Key listeners bạn dùng "listener" (có thể hiểu quan sát viên) để theo dõi kiện bàn phím thơng báo cho Flash phím nhấn

Listener có phần Phần đầu phần tạo listener Bạn phải lệnh cho listener ý vào kiện bàn phím Đây code cho tạo listener

ActionScript

Key.addListener(_root);

Lệnh Key.addlistner tạo listener cho đối tượng thông số _root Và đối tượng thông báo kiện bàn phím

Trong đoạn code trên, _root đối tượng thông báo kiện bàn phím Nhưng nhận thơng báo _root phải làm gì? Vì cần phải viết code xử lý kiện cho _root Ví dụ đoạn code sau thực _root nhận thơng báo kiện bàn phím

(52)

_root.onKeyUp = function() { trace(Key.getAscii()); }

Khi người dùng nhấn phím, tay lên tạo kiện onKeyUP, kiện thơng báo tới _root (bạn thay _root bắng đối tượng nào) sau hàm Key.getAscii() cho kết mã số ASCII tương ứng với phím vừa nhấn, ví dụ A = 65, B = 66 v.v

Bạn xem fla mẫu 09keylistener.fla, trogn có đoạn code (lưu ý fla hết ngồi đoạn code AS frame đầu tiên)

Nếu bạn muốn biết phím thay ASCII code bạn dùng

String.fromCharCode() đễ cho kết bạn muốn tìm Thay dịng

trace(Key.getAscii()); băng trace(String.fromCharCode(Key.getAscii()));

Thật ngồi cách trên, cách dùng xử lý kiện onClipEven movie clip để theo dỏi kiện keyDown, keyUp, cách khơng cịn dùng Flash MX nữa, bạn cách Flash trước MX thơi

Bài Tập: Dùng phím để di chuyển movie clip Tạo file Flash

2 Tạo movie clip đơn giản

3 Gắn đoạn code vào movie clip

ActionScript

onClipEvent(enterFrame) {

(53)

Đoạn code kiểm tra phím mũi tên di chuyển movie clip theo hướng mũi tên Bạn thử movie coi

4 Thay đổi đoạn code cho hoàn chỉnh hơn: tạo biến [b]x, y[/b] có giá trị tương đương với vị trí ban đầu movie clip, lập giá trị cho biến [b]speed[/b] bắng Mổi frame movie, kiểm tra phím mũi tên điều chỉnh giá trị biến [b]x,y[/b] không điều chỉnh vị trí movie clip, sau phối hợp với biến [b]speed[/b] để tìm vị trí cho movie clip, di chuyện movie clip tới đó:

[code]onClipEvent(load) { x = this._x;

y = this._y; speed = 5; }

onClipEvent(enterFrame) { if (Key.isDown(Key.LEFT)) { x -= speed;

}

if (Key.isDown(Key.RIGHT)) { x += speed;

}

if (Key.isDown(Key.UP)) { y -= speed;

}

if (Key.isDown(Key.DOWN)) { y += speed;

}

this._x = x; this._y = y; }

(54)

chúng ta di chuyển movie clip tới đó, kiểm tra vị trí có hợp lý không (áo dụng rât nhiều game), thứ hai tiện cho thay đổi tốc độ di chuyển movie clip, cần thay đổi giá trị biến speed

Nhập văn bản

Trong Flash, người dùng nhẫp văn vào khung, bạn dùng AS để lấy văn Để cho người dùng nhập văn bản, bạn phải tạo khung input text

và tạo cho varible để tương ứng với gía trị khung input text (nếu bạn chưa biết tạo input text download CD hướng dẫn bên box tài liệu để tham khảo thêm)

Các chức thao tác làm việc với chuỗi ký tự (string

Chúng ta có nhềiu thao tác với chuỗi ký tự:

1 Ghép chuỗi lại với nhau: dùng ký hiệu + Ví dụ bạn có variable tên myVariable có giá trị "Hello", muốn ghép chữ "world" vào sau dùng sau: myVariable =

myVariable + "world" kết có "Hello world" Bạn ghép nhiều chuỗi lại với cách

2 Substrings Substring chuổi ký tự nhỏ chuổi ký tự khác Ví dụ "ell" substring "hello world" "hello" "elle" hay "hell"

Bạn lấy substring string với cú pháp sau: String.substring(start, end)); String đối tượng chuỗi mà bạn muốn trích phần, start số thứ tự ký tự bắt đầu cho chuổi bạn muốn lây, end số thự tự bắt đâu cho phần bạn không muốn lấy Lưu ý rắng ký tự đầu tiê có số thự tự Ví dụ với đoạn code sau, output window cho hàng chữ "lo W"

(55)

var myString = "Hello World."; trace(myString.substring(3,7));

Ngoài cách dùng tương tự cách khác thơng số có cú pháp sau: String.substr(start, length); thông số cho số thứ tự chữ thứ hai cho chiều dài chuỗi Đoạn code sau có kết tượng tự cách

ActionScript

var myString = "Hello World."; trace(myString.charAt(6));

Các hàm đối tượng String

Sau số hàm tiêu biểu đối tượng String

1 indexOf: dùng để tìm số thứ tự ký tự hay chuỗi nhỏ đối tượng String Nếu hàm indexOf tìm khơng thấy ký tự hay chuỗi nhỏ cho kết -1 Đây cú pháp:myString.indexOf(substring,start)); substring ký tự hay chuỗi muốn tìm, start số thự tự bắt đầu tìm đối tượng String Ví dụ:

ActionScript

var myString = "Hello World."; //output:

trace(myString.indexOf("W",0)); //output:

trace(myString.indexOf("llo",0));

2 lastIndexOf: tương tự indexOf tìm ký tự cuối ngược lên tớiký tự

(56)

var myString = "Hello World."; //output:

trace(myString.indexOf("l",0)); //output:

trace(myString.lastIndexOf("l"));

3 toUpperCase/toLowerCase: dùng để đổi chuỗi từ viềt thường sang viết hoa ngược lại

ActionScript

var myString = "Hello World."; //output: HELLO WORLD

trace(myString.toUpperCase()); //output: hello world

trace(myString.toLowerCase());

4 length: đặc tính Sring dùng để tính chiều dài chuỗi

ActionScript

var myString = "Hello World."; //output: 12

trace(myString.length); Bài tập:

1 mở file 09form-noscripts.fla

2 kiểm tra tên variable input text field qua property panel Thêm đoạn mã sau vào nút CLEAR

ActionScript

(57)

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 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); }

}

(58)

Giờ thứ 10: Tạo Và Điểu Khiển Văn Bản, Creating and Controlling Text

Dynamic Text

Bạn hiển thị văn dynamic text field Khác với Input field mà bạn làm quen số 9, dynamic text field cho phép AS thay đổi nội dung văn người dùng Vì nội dung, hình thức văn thay đổi lúc nên gọi dynamic text

Trước tiên bạn tạo dynamic text bẳng dụng cụ text toolbar, thay chọn "Input Text" property panel, bạn chọn "Dynamic Text"

Bước nối nội dung văn dynamic text field với variable cách viết tên variable vào khung Var propery panel Ví dụ bạn đặt variable myText vào khung Var bạn thay đổi giá trị myText văn dynamic text field thay đổi giống giá trị biến myText Ngồi bạn cịn thay đổi số lựa chọn cho dynamic text field "Single", "Multiline", or "Multiline No Wrap" để xử lý trường hợp nội dung văn dài cònn nhiều lựa chọn khác (Nếu bạn chưa nắm vững phần tham khảo thêm sử dụng Flash CD post box tài liệu)

Định dạng văn theo HTML (HTML format)

Để định dạng văn kiểu HTML, phải cho phép dynamic text field chấp nhận định dạng HTML (click vào HTML icon property panel) sau bạn dùng thẻ HTML để định dạng văn bạn Ví dụ đoạn code tạo văn sau:

CODE

myText = "This text is <B>bold</B>.<BR>"; myText += "This text is <I>italic</I>.<BR>";

myText += "This text is <U>underlined</U>.<BR>";

(59)

myText += "This text is <FONT FACE='Arial Black'>Arial Black</FONT>.<BR>"; myText += "This text is <FONT SIZE='24'>large</FONT>.<BR>";

myText += "This text is <A HREF='link.html'>linked</A>.<BR>";

QUOTE

This text is <B>bold</B>.<br> This text is <I>italic</I>.<br>

This text is <U>underlined</U>.<br>

This text is <FONT COLOR='#FF0000'>red</FONT>.<br>

This text is <FONT FACE='Arial Black'>Arial Black</FONT>.<br> This text is <FONT SIZE='24'>large</FONT>.<br>

This text is linked

Siêu liên kết (hyper link) có tác dụng giống HTML khác điều khơng có gạch

Sau thẻ HTML dùng Flash MX  <B></B>: viết đậm

 <I></I>: viết nghiêng  <U></U>: gạch

 <FONT FACE='Arial Black'></FONT>: kiểu chữ  <FONT SIZE='24'></FONT>: cỡ chữ

 <FONT COLOR='#XXXXXX></FONT>: màu chữ  <A HREF=''></A>: link

 <P></P>: Đọan văn  <BR>: Xuống hàng

Đối Tượng TextFormat

(60)

điều này, bạn cần phải tạo biến từ đối tượng TextFormat Sau bạn định giá trị cho thuộc tính Ví dụ bạn muốn kiểu chữ Arial Black, cỡ 26, màu đỏ dùng đọan code sau:

CODE

myFormat = new TextFormat(); myFormat.font = "Arial Black"; myFormat.size = 36;

myFormat.color = 0xFF0000;

textInstance.setTextFormat(myFormat);

Bạn dùng đối tượng TextFormat stylesheet file HTML, bạn tạo bạn dùng chổ movie

Bạn coi đọan code file mẫu: 10formattext.fla Variable ngồi Flash

Bạn lấy biến từ trang HTML vào Flash để thay đổi nội dung Flash hay dùng vào chuyện Ví dụ bạn phải làm 30 banner Flash cho 30 trang web, bạn làm banner thôi, thay đỗi nội dung tuỳ theo trang web Muốn nhập văn hay giá trị biến từ HTML, bạn cần thêm vài chữ vào sau tên movie phần <object> <embed> HTML Đoạn mã HTML sau nhập giá trị biến txtName vào Flash

HTML

<PARAM NAME=movie VALUE="10banner.swf?txtName=Dominico Savio!"> thẻ <embed> bạn thêm phần variable giá trị vào sau tên file

HTML

src="10banner.swf?txtName=Dominico Savio!">

Khi movie load tự tạo variable "txtname" đặt giá trị cho biến

"Dominico Savio" Bạn xem trang 10banner.html, 10banner.fla source file để xem chi tiết

(61)

txtName=Dominico Savio!&gender=male"

Ngoài lấy biến từ HTML, bạn cịn lấy biến từ text file Cách thích hợp bạn có nhiều biến để nhập vào Flash, hay giá trị biến dài để gắn vào thẻ HTML Bạn cần dùng lệnh loadVariables() để làm điều Ví dụ:

CODE

loadVariables("10external.txt", _root);

Bạn coi thêm cách dùng loadVariables() bên box ActionScript [Bài Tập

Một ví dụ đơn giản áp dụng điều mà bạn vừa học làm "news ticker" dây:

<giong Marquee>

Dòng chữ chạy từ bên phải qua bên trái cho suốt tin Bạn tham khảo source fla: 10ticker.fla test để có khái niệm thêm "news ticker"

1 Tạo movie

2 Tạo dynamic text field, với độ cao vừa hàng, dài chiều ngang stage, dễ nhận, bạn viết vài chư đó, "text goes here"

3 Tạo variable cho text field text

4 Chọn font, nên dùng kiểu chữ tương tự Courier New, cho bề ngang chư

5 Con text field nhấn F8 để đổi thành Movie Clip, đặt cho tên tuỳ bạn

6 Sau gắn đoạn script sau vào movie

CODE

onClipEvent(load) { // đặt tin

tickerText = "News Alert: ";

(62)

tickerText += "The first manned flight to Mars prepares to leave Earth orbit "; tickerText += "Your favorite sports team wins championship ";

tickerText += "Scientists find cure for major diseases "; firstChar = 0; // bắt đầu chữ

lineLength = 50; // số chữ tối đa news ticker // thêm khoảng trống vào trước dòng tin

for(var i=0;i<lineLength;i++) { tickerText = " " + tickerText; }

}

onClipEvent(enterFrame) { // phát tin

text = tickerText.substr(firstChar,lineLength); // thêm chữ kê tiếp

firstChar++;

// phát lại tin sau lần kết thúc if (firstChar > tickerText.length) { firstChar = 0;

} }

Trước tiên bạn tạo biến tickerText để chứa văn news ticker, biến firstChar để chứa giá trị chữ thấy news ticker, lineLenght số chữ xuất lúc news ticker Và tất đểu cho vào sử lý kiện onLoad

Trong onEnterFrame, Flash lấy 50 chữ bỏ vào biến text (ở dynamic text field) hiển thị lên hình Sau di chuyển sang chữ thứ câu firstChar++;, sau kiểm tra, tin phát hết phát lại từ đầu. Bạn thay đổi giá trị lineLenght giá trị văn tickerText để hiểu biến

(63)

khơng Nếu khơng trở lại hỏi nhe Happy flashing

Giờ thứ 11: Làm việc với số, Chương hay bổ ích!

Chúng ta nghiên cứu text strings chương trước Bây nghiên cứu số Bạn phải đụng độ với số Action Script nhiều trường hợp, bạn cần phải hiểu để sử dụng chúng

Những phép toán (operator) hàm (function) số

Những phép toán đơn giản

Chúng ta học qua phép toán đơn giản Bây xem lại Dấu + dấu - thực phép toán cộng trừ, dấu * thực phép nhân, dấu / thực phép chia

Ngồi ra, bạn sử dụng phép toán +=, -=, *=, /= để làm đơn giản cho code bạn Lấy ví dụ hai câu lệnh thực công việc cộng thêm biến a

CODE

a = a + 7; a += 7;

Những phép so sánh

Những phép toán so sánh == để so sánh hai số xem có khơng, > (lớn hơn), < (nhỏ hơn), <= (nhỏ bằng), >= (lớn bằng) Trong Action Script so sánh số nguyên với số thực Ví dụ 7.2 lớn

Math.abs

(64)

CODE

trace(Math.abs(-7));

Math.round

Nếu bạn có số thực, bạn lại muốn hiển thị cho người dùng xem dạng số nguyên thay phải cho họ xem số phần thập phân, bạn sử dụng hàm Math.round Thử nhé:

CODE

trace(Math.round(7.2));

Math.ceil, Math.floor

Hai hàm khác dùng để làm tròn số thực thành số nguyên Math.ceil Math.floor Hàm Math.ceil làm tròn số lên Math.floor làm tròn số xuống Thử nhé:

CODE

trace(Math.ceil(7.2)); trace(Math.floor(8.3));

Math.min, Math.max

Các bạn sử dụng hai hàm để tìm số lớn số nhỏ hai số Ví dụ hàm Math.min(4, 5); trả 4, Min.math(4, 5); trả

Math.pow

Đây hàm để lấy lũy thừa, đơn giản thôi, tham số thứ số, tham số thứ hai lũy thừa Ví dụ bạn muốn lấy luỹ thừa viết

CODE

Math.pow(4, 3);

(65)

căn sử dụng

CODE

Math.pow(4, 5);

Math.sqrt(4);

Cả hai cách kết

Hàm số lượng giác

Những hàm object class mà bạn biết dễ học Nhưng cịn hàm lượng giác sin, cosin “khó nuốt” nhiều Mặc dù bạn bỏ qua hàm hàm lượng giác hữu ích hay việc tạo ứng dụng Flash Vậy tìm hiểu cách làm việc nhé!

Hàm sin cosin sử dụng qua Math.sin Math.cosin, biểu diễn mối quan hệ đường thẳng với đường cong đường tròn

(66)

Bây bạn tưởng tượng vòng tròn đường thẳng Bắt đầu từ điểm “a” có toạ độ 1,0 đến điểm 0,-1 qua -1,0 qua 0,1 cuối trở 1,0

Trong Flash, ngôn ngữ lập trình khác, định vị vật toạ độ x, y chúng Vì thế, việc chuyển điểm đường thẳng thành điểm có toạ độ x, y đường trịn hữu dụng Đó mà hàm sin cosin thực Ví dụ đặt điểm “a” điểm bắt đầu đường thẳng đường tròn, bạn có sử dụng hàm sin cosin để tính toạ độ x, y điểm “a” đường tròn Tất nhiên, Math.cos(0) trả giá trị 1, Math.sin(0) trả giá trị Kết trả toạ độ điểm “a” 1,0

Vậy điểm “c” nằm đâu đường tròn? Nếu duỗi đường trịn có độ dài 6.28 lần bán kính, bán kính nên độ dài 6.28 Đây xuất xứ số pi Pi 3.14, nửa độ dài đường tròn

Độ dài đường tròn 6.28 phần tư độ dài đường trịn 1.57 Điểm tương ứng với điểm “c” Hàm Math.cos(1.57) trả giá trị nhỏ, gần Hàm

Math.sin(1.57) trả giá trị gần -1 Chỉ gần khơng số pi khơng xác 3.14, gần

(67)

Trong đoạn code đây, cộng thêm n, movie clip chuyển động dọc theo đường trịn Hàm Math.cos tính giá trị x hàm Math.sin tính giá trị y, chúng nhân thêm với giá trị radius để tăng kích thước đường trịn

Giá trị centerX centerY cộng thêm cho toạ độ x, y, tâm đường trịn khơng cịn 0,0 mà 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) số (number)

Có nhiều cách để chuyển đổi từ chuỗi sang số ngược lại Ví dụ trường hợp người dùng nhập số vào text field, bạn nhận giá trị cộng thêm Hãy xem đoạn code sau đây, num biến giá trị text field

CODE

b = num + 1;

(68)

phép cộng num với có nghĩa cộng ký tự “1” vào chuỗi num có giá trị “42” Để làm cho Flash hiểu num số, bạn sử dụng hai hàm sau để chuyển chuỗi thành số Hàm parseInt chuyển chuỗi thành kiểu số nguyên, hàm parseFloat chuyển chuỗi thành kiểu số thực Ví dụ hàm parseInt(“42”) trả giá trị 42, sử dụng parseInt(“42.9”) nhận giá trị 42 hàm parseInt khơng làm trịn số, lấy phần ngun mà thơi Cịn sử dụng hàm

parseFloat(“42.9”) bạn nhận giá trị 42.9, muốn làm tròn bạn sử dụng hàm Math.round(parseFloat(“42.9”)) Hàm parseFloat trả nguyên tham số truyền vào chuỗi số nguyên Ví dụ parseFloat(“42”) cho ta số 42 Trừ trường hợp bạn muốn trả giá trị số ngun, cịn khơng bạn nên sử dụng hàm parseFloat

Một nét đặc biệt hay hàm parseInt chuyển chuỗi thành số thành nhiều dạng hệ số khác Hãy xem ví dụ cho dễ hiểu:

CODE

parseInt(“FF”, 16);

Hàm trả giá trị 255, ý nghĩa chuyển chuỗi chứa số FF số hexa hệ số 16 thành số hệ nguyên hệ số 10

Ngược lại, để chuyển từ số sang chuỗi, sử dụng hàm toString Hàm hoạt động khác với hàm parse, hoạt động bên biến, gọi hàm sau dấu chấm (.) Xem ví dụ nhé:

CODE

a = 135;

trace(a.toString() + 1);

Kết 1351

Chúng ta sử dụng hàm toString để chuyển số thành chuỗi chứa số hệ số khác Ví dụ a.toString(16) trả kết chuỗi “ff”

(69)

Tạo số ngẫu nhiên phần quan trọng công việc thiết kế game số hoạt hình Bởi khơng có sơ ngẫu nhiên đoạn phim bạn chạy giống nhau, khơng cịn thú vị nữa!

Để tạo số ngẫu nhiên, bạn sử dụng hàm Math.random() Hàm trả giá trị từ 0.0 đến 1.0 thường khơng trả giá trị 1.0

Hãy xem ví dụ đây, bạn nhận số ngẫu nhiên cửa sổ OutPut

CODE

trace(Math.random());

Kết trả giống 0.023268056102097, lần lại khác

Một ví dụ khác bạn cần tạo số ngẫu nhiên từ đến 10, việc đơn giản, cần nhân thêm số ngẫu nhiên cho 10 Đoạn code sau cho ta số ngẫu nhiên từ 0.0 đến 10.0

CODE

trace(Math.random() * 10);

Nhưng cần số ngẫu nhiên từ 1.0 đến 10.0 từ 0.0 đến 10.0, thế, cộng thêm

CODE

trace(Math.random() * 10 + 1);

Bây kết trả 1.0 đến 11.0 khơng có kết 11.0 Hãy sử dụng hàm Math.floor để làm tròn xuống

CODE

trace(Math.floor(Math.random() * 10 + 1));

(70)

biểu thức phức tạp, rất phức tạp mà khơng thể đốn Kết trả cho kết dường ngẫu nhiên Kết đưa hàm tính lần lưu lại thành số chuẩn để tính ngẫu nhiên cho lần

Hãy nghĩ điều này, số ngẫu nhiên đời sống thật không thật ngẫu nhiên Nếu giữ mặt xúc xắc, theo hướng thật xác, có kết

Được rồi, thử tạo số ngẫu nhiên từ đến Làm đây? Ah, có thủ thuật cho bạn đây:

CODE

trace(Math.floor(Math.random() * + 3);

Trong phạm vi từ đến có tất số nguyên 3, 4, 5, 6, Thế cịn phạm vi từ 50 đến 100

CODE

trace(Math.floor(Math.random() * 51 + 50);

Là số 51 phạm vi từ 50 đến 100 có 51 số, cịn từ 51 đến 100

CODE

trace(Math.floor(Math.random() * 50 + 50);

Một cách để thử xem phạm vi bạn có ý khơng, thử với số nhỏ số lớn thay cho Math.random() Giá trị nhỏ hàm Math.random() 0, thử với số

CODE

trace(0 * 51 + 50);

Giá trị lớn Math.random() khơng xác 1.0 mà gần bằng, thử với giá trị 0.9999

(71)

trace(.9999 * 51 + 50);

Hãy thử xem có khơng nhé!

Dưới ví dụ thú vị, movie clip bạn nhảy đến vị trí

CODE

onClipEvent(enterFrame) { this._x = Math.random()*550; this._y = Math.random()*400; }

Luyện tập: Tạo chương trình máy tính đơn giản

Hãy bắt tay vào việc thiết kế chương trình máy tính đơn giản

- Mở movie Flash Movie giống hình

Chúng ta có 10 nút để nhập 10 số từ đến 9, nút phép tốn, phím =, dấu chấm thập phân, phím C để xóa hình Một text field đặt để hiển thị số người dùng bấm, text field liên kết với biến display

- Trong movie clip nút bấm, chèn đoạn code sau

CODE

on (release) {

_parent.keyPressed(this._name); }

Khi nút nhấn hàm keyPressed gọi level mà level root Hàm truyền tên movie clip

- Quay trở lại level root, movie clip phải có tên riêng, khơng trùng Đặt tên movie clip theo số nó, ví dụ nút số có tên 5, dấu chấm thập phân có tên “.” Dấu cộng, dấu trừ, dấu nhân, dấu chia, dấu bằng, nút C đặt tên plus, minus, multiply, divide, equals, clear

- Ok, bắt đầu viết code nhé! Code nằm movie frame

(72)

// trước tiên, xố hình cũ clearAll();

function clearAll() {

display = "0"; // giá trị mặc định memory = 0; // nhớ

operation = "none"; // chưa có phép toán

newNum = true; // đánh dấu nhập xong số }

Biến display chuỗi (string), liên kết với text field hiển thị nội dung người dùng bấm Nó bắt đầu với giá trị 0, có nghĩa người dùng bật máy lên mặc định số

Biến memory lưu lại số trước để thực phép tính Điều cần thiết, ví dụ bạn bấm số 5, +, số nhập vào, bạn bấm dấu cộng, hình xóa số lưu vào memory, số nhập tiếp thực phép tính

Phép toán người dùng chọn cần lưu vào nhớ Khi người dùng nhấn 5, +, rồi, sau bấm dấu = phép tốn khác chương trình gọi lại phép tốn cũ đựơc lưu biến operation để thực phép toán trước với

Biến newNum biến cờ hiệu để báo cho chương trình biết kết thúc phép tốn Ví dụ người dùng bấm 5, +, sau bấm phép tốn khác kết lưu lại để tính tốn tiếp, lúc phép tốn chưa kết thúc, newNum = false Cịn người dùng bấm dấu = hình kết kết thúc ln phép tốn để

chuyển sang phép toán mới, newNum = true

- Phần hàm keyPressed để xử lý nút nhấn Hàm keyPressed sử dụng cấu trúc switch thay cho cấu trúc if, then, else Cả hai cách hoạt động tương tự cách viết khác, bạn xem nhé:

CODE

// hàm gọi nút nhấn function keyPressed(keyName) {

(73)

switch (keyName) {

case "clear" : // nhấn nút C clearAll();

break;

case "plus" : // phép toán cộng, trừ, nhân, chia operate(keyName);

break; case "minus" :

operate(keyName); break;

case "multiply" : operate(keyName); break;

case "divide" :

operate(keyName); break;

case "equals" :

operate(keyName); break;

default : // số

if (newNum) { // hiển thị số hình display = keyName;

newNum = false;

if (display == "0") newNum = true; // số không bắt đầu với số } else {

display += keyName; // nối thêm số vào hình }

break; }

(74)

Khi người dùng nhấn nút C hàm clearAll() gọi, tương tự người dùng nhấn phép tốn hàm operate đựơc gọi

- Hàm operate thực tính tốn Nó tìm phép tốn số trướcđó số thời, sử dụng hàm parseFloat để chuyển chuỗi thành số.Operation có giá trị none nhập số sau thực xong phép toán hình xóa

CODE

// thực phép toán trước function operate(keyName) { switch (operation) {

case "none" : // số

memory = parseFloat(display); // lưu lại số trước break;

case "plus" : // thực 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 {

(75)

}

display = memory.toString(); // display result newNum = true; // prepare for next number }

Luyện tập: Làm hành tinh bay quanh quỹ đạo

Trong ví dụ lượng giác phần trước, bạn biết cách làm movie clip quanh quay vòng tròn Bây áp dụng kiến thức để làm movie hành tinh xoay quang mặt trời, hành tinh thứ có vệ tinh

- Tạo movie Flash

Tạo movie clip vòng tròn, đặt tên sun, mercury, venus, earth, mars, and moon, đặt instance name chúng giống Hãy làm cho kích thước khác chút nhé!

- Đặt movie clip sun (mặt trời) vào hình Các hành tinh khác quay quanh mặt trời Vị trí movie clip hành tinh khác khơng quan trọng, điều khiển vị trí chúng Action Script

- Đặt đoạn code sau vào movie clip mercurcy:

CODE

onClipEvent(load) { speed = 4; radius = 40; orbit = 0; }

onClipEvent(enterFrame) { orbit += speed;

(76)

Trong event load thiết lập tốc độ quay hành tinh, khoảng cách hành tinh với mặt trời Biến speed điều khiển tốc độ quay hành tinh, có nghĩa số vịng quay frame Nếu speed = 6.28 hành tinh quay vòng frame, speed = đoạn code sau hành tinh quay vòng quỹ đạo 15.7 frame (6.28/.4)

Trong lần event enterFrame xảy orbit (quỹ đạo) cộng thêm với speed thời, hành tinh di chuyển đến vị trí Toạ độ x, y hành tinh hiệu chỉnh theo vị trí mặt trời, tâm quỹ đạo hành tinh mặt trời

- Chạy thử movie Lúc này, hành tinh đứng yên, có mercurcy di chuyển Nếu quỹ đạo bị nghiêng bạn phải xem lại xem mặt trời có nằm quỹ đạo hay không

- Đặt đoạn code tương tự vào movie clip venus, earth, and mars movie clips, mà bạn thay đổi giá trị hai biến speed radius để làm cho hành tinh xa gần mặt trời Gợi ý cho bạn nhé, speed hành tinh mercury, venus, earth, and mars 4, 2, 1, 05, radius cho hành tinh 40, 90, 150, 210

- Chạy thử lại movie Bây bốn hành tinh chuyển động, moon chưa chuyển động chưa viết code điều khiển

- Bây viết code cho moon, moon có speed nhanh radius nhỏ hơn, moon quay quanh earth thay quay quanh sun

CODE

onClipEvent(load) { speed = 5; radius = 15; orbit = 0; }

onClipEvent(enterFrame) { orbit += speed;

(77)

- Bây chạy thử movie bạn lần Bây tất hành tinh quay rồi, vấn đề Earth khơng xác nằm quỹ đạo moon, thế? Bởi moon quay trước earth, moon nằm layer layer earth Chúng ta cần phải làm cho earth quay trước đến moon Để làm vậy, chọn movie clip moon, chọn Modify -> Arrange -> Send to Back

Luyện tập: Làm tuyết rơi

Đây ví dụ hữu ích cho việc tạo số ngẫu nhiên Bạn khơng cần phải dùng Action Script lúc bạn phải làm hàng trăm movie clip tuyết, chuyển động theo đường

Bằng cách sử dụng Action Script số ngẫu nhiên, bạn làm cho bơng tuyết rơi với tốc độ hướng rơi ngẫu nhiên Bắt tay vào làm nhé!

- Tạo movie Flash

- Tạo movie clip mới, đặt tên Snowflake đặt tên instance snowflake - Đặt đoạn code sau vào movie clip Snowflake Đoạn code khởi tạo giá trị ban đầu vị trí bơng tuyết, tốc độ rơi, tốc độ bị thổi ngang, độ xoay tuyết

CODE

onClipEvent(load) {

this._x = Math.random()*550; // to 550 this._y = Math.random()*400; // to 400 speed = Math.random()*3+3; // to drift = Math.random()*2-1; // -1 to rotate = Math.random()*6-3; // -3 to }

onClipEvent(enterFrame) { this._y += speed;

this._x += drift;

this._rotation += rotate;

(78)

if (this._y > 400) this._y = 0; // kiểm tra hai biên

if (this._x < 0) this._x = 550; if (this._x > 550) this._x = 0; }

Khi event enterFrame xảy tuyết điều khiển rơi xuống speed bị dạt theo hướng ngang drift Bông tuyết bị xoay theo giá trị rotate Tiếp theo kiểm tra xem tuyết rơi xuống đất cho rơi lại, bơng tuyết bị dạt qua bên phải đưa quay lại bên trái…

- Chạy thử movie bạn Các tuyết rơi tự Hãy click vào cuối movie xem sao, tuyết rơi lại

- Đựơc rồi, làm cho tuyết nhiều nhiều tí đoạn code sau, đặt vào timeline nhé!

CODE

// tạo 50 bơng tuyết for(var i=0;i<50;i++) {

snowflake.duplicateMovieClip("snowflake"+i,i); }

(79)

-Thang Tran

-.NET Developer Xtreme Biz

www.xtremebiz.biz

Giờ thứ 12: Đối tượng Mảng, Objects and Arrays

Cho đến bây giờ, biến chứa liệu riêng lẻ, biến chứa liệu Đối với chương trình nhỏ đơn giản khơng có để nói, đến bạn cần sử dụng thật nhiều biến Cũng có lúc bạn gặp khó khăn nhận bạn cần lưu rất nhiều liệu, biến bình thường muốn làm khơng phải dễ

ActionScript cung cấp cho ta hai thứ để lưu loại nhiều liệu Một Custom Object (Đối tượng), với Custom Object bạn nhóm liệu riêng lẻ lại với Cách khác Array (Mảng), phần ngôn ngữ lập trình cao cấp Trong thứ 12 này, học:

- Cách tạo Custom Object

- Cách sử dụng đối tượng ActionScript dựng sẵn - Tìm hiểu Array (Mảng)

(80)

- Tạo vật thể chạy theo trỏ chuột hình

Tạo Custom Object

Chắc hẳn bạn quen thuộc với tên x y để điều khiển vị trí movie clip Có bạn cảm thấy nhàm chán với chữ x, y hay muốn thay chữ khác positionX, positionY hay bạn thích khơng? Việc q đơn giản, cần tạo biến bạn gán giá trị cho biến bạn thơi Nhưng dù biến riêng lẻ thôi, với tên khác

Trong phần này, không muốn cho bạn làm điều mà nói cách tạo custom variable Object Ví dụ, bạn lưu biến x, y sau:

CODE

pos = {x:10, y:20};

Bằng cách sử dụng hai dấu ngoặc nhọn, bạn tạo object Bạn truy cập liệu cách:

CODE

trace(pos.x);

Bạn sử dụng biến khác

Hãy tưởng tượng đến cấu trúc phức tạp nhiều record sở liệu Ví dụ ta có custom object tên record, có property name, address, phone…

Bạn tạo object bước một, tạo thêm property Xem ví dụ nhé:

CODE

(81)

record.state = "Colorado"; trace(record.name);

Cũng với mục đích làm cho liệu dễ tổ chức hơn, custom object giống đối tượng dựng sẵn Hai ví dụ đối tượng dựng sẵn Color đối tượng Date

Đối tượng Color

Có thể dùng ActionScript để đổi màu movie clip cách sử dụng câu lệnh setRGB Đó cách dễ không thực instance movie clip Thay vào đó, chuyển đến đối tượng Color movie clip Thực cách hàm new Color(), sau sử dụng câu lệnh setRGB để thay đổi màu

Dưới ví dụ, sử dụng setRGB từ đối tượng Color movie clip để đặt lại màu cho movie clip sang màu 0xFF0000 (màu đỏ)

CODE

circleColor = new Color("circle"); circleColor.setRGB(0xFF0000);

Chúng ta lấy màu movie clip Sử dụng hàm getRGB() để lấy màu movie, nhớ sử dụng hàm toString(16) để chuyển thành giá trị hexa

CODE

circleColor = new Color("circle");

trace(circleColor.getRGB(0xFF0000).toString(16));

(82)

Đầu tiên, tạo đối tượng custom variable Rồi tạo property ra, ga, ba, aa, rb, gb, bb, ab Các ký tự r, g, b, a đại diện cho từ red, green, blue alpha Còn ký tự thứ

hai a b đại diện cho cột bên trái bên phải

Thay sử dụng setRGB sử dụng setTransform ví dụ đây:

CODE

circleColor = new Color("circle"); myObject = new Object();

myObject = {ra:100, rb:255, ga:0, gb:0, ba:0, bb: 0, aa: 100, ab: 0}; circleColor.setTransform(myObject);

Đối tượng Date

Một đối tượng dựng sẵn khác đối tượng Date Đối tượng xem biến bình thường, đại diện cho thời điểm thời gian

Đối tượng Date chia phần: năm (year), tháng (month), ngày (date), (hour), phút (minute), giây (second) phần trăm giây (milisecond) Bạn tạo đối tượng Date cách cung cấp cho thơng tin

CODE

myDate = new Date(2002,3,29,10,30,15,500);

(83)

CODE

Mon Apr 29 10:30:15 GMT

Rất dễ hiểu, khơng nào? Nhưng mà cịn vấn đề: tháng Apr truyền tham số vào cho tháng 3, phải March chứ!?

Đối tượng Date Flash hoạt động tương tự đối tượng Date ngơn ngữ lập trình khác Tháng quy định từ đến 11, đặc biệt, ngày quy định từ đến 31 Nhưng dù bạn phải làm quen

Bạn lấy thành phần từ đối tượng Date Ví dụ lấy năm

CODE

myDate.getYear()

Bạn lấy cách đơn giản tạo đối tượng Date rỗng Giờ đưa vào đối tượng Ví dụ:

CODE

myDate = new Date(); trace(myDate);

Chú ý: Flash lấy đồng hồ hệ thống máy bạn Vì đồng hồ máy tính bạn chạy sai lấy sai

Mảng (Array)

Mảng phần quan trọng lập trình Bạn gặp mảng hầu hết ngơn ngữ lập trình cơng cụ cần thiết cho ngơn ngữ lập trình phức tạp Mảng (Array) dãy liệu Trong liệu có kiểu liệu với nhau, là tên movie clip vị trí movie clip

(84)

Dưới ví dụ mảng Sử dụng dấu ngoặc vuông dấu phẩy để tạo mảng:

CODE

myArray = [36,23,63,71,25];

Mảng myArray có chứa phần tử số nguyên Muốn lấy giá trị phần tử mảng sử dụng sau:

CODE

trace(myArray[0]);

Phần tử mảng luôn đánh số Vì vậy, ví dụ có phần tử phần tử thứ chứa giá trị 36 phần tử thứ mang giá trị 25

Một cách khác để tạo mảng sử dụng new Array()

CODE

myArray = new Array();

Muốn thêm phần tử vào cuối mảng, sử dụng câu lệnh push Ví dụ tạo mảng giống mảng ví dụ trên:

CODE

myArray = new Array(); myArray.push(36); myArray.push(23); myArray.push(63); myArray.push(71); myArray.push(25);

(85)

Để kiểm tra xem mảng có phần tử bạn sử dụng thuộc tính length

CODE

myArray = [36,23,63,71,25]; trace(myArray.length);

Còn muốn lấy phần tử cuối mảng bỏ phần tử khỏi mảng sử dụng câu lệnh pop

CODE

myArray = [36,23,63,71,25]; trace(myArray);

a = myArray.pop(); trace(a);

trace(myArray);

Đoạn code ví dụ trace phần tử mảng myArray Sau đó, lấy phần tử cuối mảng tức 25 đưa vào biến a, đồng thời bỏ phần tử 25 khỏi mảng Cuối trace phần tử mảng myArray, lúc phần tử

Sử dụng kết hợp push pop để tạo hệ thống vào sau trước (last in first out), thường gọi stack Hãy tưởng tượng đến chồng sách, để sách xuống, chồng lên sách thứ 2, thứ 3, thứ 4… Khi muốn lấy sách phải lấy trước, tức chồng lên cuối

Ngược lại với pop shift Nó bỏ phần tử mảng Đoạn code làm giống đoạn không bỏ phần tử 25 mà bỏ phần tử 36:

CODE

myArray = [36,23,63,71,25]; trace(myArray);

a = myArray.shift(); trace(a);

(86)

Ngược lại với shift unshift Nó chèn thêm phần tử vào đầu mảng

Nếu bạn muốn lấy phần mảng sử dụng hàm slice Đối số truyền vào vị trí vị trí cuối phần cần lấy mảng

CODE

myArray = [36,23,63,71,25] trace(myArray.slice(1,3));

Đoạn code trả 23, 63 khơng kể phần tử thứ Nếu khơng có đối số thứ lấy đến cuối mảng

Một hàm khác hàm splice Hàm thay số phần tử mảng phần tử khác Sử dụng hàm này, đối số vị trí phần tử mảng, đối số thứ hai số phần tử muốn xóa kể từ phần tử đối số Truyền đối số thứ số khơng muốn xóa phần tử Những phần tử danh sách phần tử muốn chèn vào mảng Nói khó hiểu nhỉ, xét ví dụ Ví dụ xóa phần tử 23 63 chèn vào phần tử 17

CODE

myArray = [36,23,63,71,25]; myArray.splice(1,2,17); trace(myArray);

Sắp xếp mảng

Chúng ta xếp mảng câu lệnh sort Ví dụ cho ta mảng xếp theo thứ tự số:

CODE

myArray = [36,23,63,71,25]; myArray.sort();

trace(myArray);

(87)

CODE

myArray = ["Gary","Will","Jay","Brian"]; myArray.sort();

trace(myArray);

Câu lệnh reverse để đảo vị trí xếp mảng Ví dụ:

CODE

myArray = ["Gary","Will","Jay","Brian"]; myArray.reverse();

trace(myArray);

Muốn xếp mảng theo vị trí giảm dần sử dụng sort sử dụng reverse

Sử dụng câu lệnh concat để nối hai mảng lại với Nó khơng làm thay đổi mảng cũ, mà tạo mảng

CODE

myArray = [36,23,63,71,25] otherArray = [58,97,16];

newArray = myArray.concat(otherArray); trace(newArray);

Chuyển đổi chuỗi mảng

Chúng ta sử dụng câu lệnh join để đổi từ mảng thành chuỗi Câu lệnh cần đối số ký tự ngăn cách phần tử mảng chuỗi Nếu bạn khơng truyền tham số vào ký tự mặc định dấu phẩy Ví dụ trả 36:23:63:71:25

CODE

(88)

Câu lệnh join sử dụng khơng cần thiết lắm, hàm split lại hữu dụng Nó chuyển đổi từ chuỗi sang mảng Ví dụ chuyển chuỗi

“36,23,63,71,25” thành mảng ví dụ đây:

CODE

myString = "36,23,63,71,25"; myArray = myString.split(","); trace(myArray);

Hãy nghĩ đến chuyện có câu nói lưu chuỗi muốn chuyển sang mảng, phần tử mảng chứa chữ Xem ví dụ nhé:

CODE

myString = "This is a test"; myArray = myString.split(" "); trace(myArray);

Làm chữ chuyển động

Trong ví dụ này, lấy chữ câu dài hiển thị vào textfield - Tạo movie Flash

- Tạo text field dynamic, cho font chữ to, khoảng 64 Cho text field nằm hình canh cho text field Đặt variable = text

- Vẽ shape chọn Insert -> Convert to Movie Clip Đặt tên cho instance Actions kéo vùng hiển thị

- Chèn đoạn code sau vào movie clip Đầu tiên sử dụng hàm split để tách chữ câu vào mảng Sau khai báo thêm biến Biến wordNum lưu số số thứ tự chữ hiển thị Biến frameDelay lưu số frame để chữ Biến frameCount đếm số frame mà chữ qua

CODE

onClipEvent(load) { // get the words

(89)

// set up variables wordNum = 0; frameDelay = 6;

frameCount = frameDelay; // prime for first word }

onClipEvent(enterFrame) { // time for new word

if (frameCount == frameDelay) {

_root.text = wordList[wordNum]; // display word wordNum++; // next word

if (wordNum >= wordList.length) wordNum = 0; frameCount = 0;

}

frameCount++; }

- Nào, xong rồi, chạy thử xem

Giờ thứ 13: Sử dụng Rollovers, Rollovers

Tạo hình dáng trỏ theo ý thích

Việc thay trỏ mặc định trỏ theo ý thích đơn giản, cần sử dụng hàm Mouse.hide() đặt movie clip vào vị trí trỏ xong Con trỏ hình dáng được, hình mũi tên, hình bàn tay hay movie clip

(90)

Nếu bạn muốn sử dụng lại trỏ mặc định cần gọi Mouse.show()

Một điều cần lưu ý phải movie clip làm trỏ phải tất movie clip khác Chúng ta chọn Modify -> Arrage ->Bring To Front để đưa movie clip lên đầu movie clip layer mà thơi Cho dù bạn có để movie clip lên layer bị che khuất movie clip load vào duplicateMovie attachMovie Vì vậy, sử dụng

swapDepths() để đưa movie clip lên

Câu lệnh swapDepths() đưa movieclip lên level mới, level số nguyên 0, 1, 2… 9999 Vì sử dụng lệnh

Cursor.swapDepths(9999);

để đưa movieclip lên Luyện tập: Tạo trỏ tĩnh

- Tạo movie

- Tạo movie clip để thay cho trỏ

- Quay trở lại movie đầu tiên, thay trỏ cách

CODE

(91)

// bring this movie clip to the front this.swapDepths(99999);

}

- Tiếp theo gắn vị trí movie clip vào vị trí trỏ

CODE

onClipEvent(enterFrame) { // follow the mouse

this._x = _root._xmouse; this._y = _root._ymouse; }

- Sau cùng, phục hồi lại trỏ cũ kết thúc movie

CODE

onClipEvent(unload) {

// show the real cursor again Mouse.show();

}

- Cuối việc chạy thử movie Luyện tập: Tạo trỏ động

- Chúng ta sử dụng lại movie trước

- Tạo button root Hãy thử làm cho button có thay đổi over down để thấy khác biệt

(92)

- Đặt tên hai frame normal over button

- Đặt câu lệnh stop(); vào frame movie clip - Kéo thả button vào root

- Đặt tên movie clip làm trỏ cursor - Thêm đoạn code sau vào button

CODE

on (rollOver) {

cursor.gotoAndStop("over button"); }

on (rollOut) {

cursor.gotoAndStop("normal"); }

(93)

Rollovers

Một kỹ thuật thông dụng để hiển thị thông tin dài sử dụng Rollovers để đưa thơng tin thay sử dụng button để người dùng click vào sang trang khác

Ý tưởng kỹ thuật người dùng đưa chuột lướt vùng Mỗi vùng hiển thị cho người dùng xem thơng tin hình

Trong ví dụ sau, có vùng thế, vùng tên hành tinh (ở bên trái) Khi đưa trỏ chuột qua vùng bên phải xuất thơng tin hành tinh Khi đưa trỏ chuột ngồi thơng tin biến

Chúng ta sử dụng AS để làm Rollovers nhiều cách Rollovers sử dụng button

Chúng ta sử dụng hai event button on(rollOver) on(rollOut) để viết code xử lý việc hiển thị thông tin Hãy xem ví dụ đây:

(94)

on (rollOver) {

information.gotoAndStop("information 1"); }

on (rollOut) {

information.gotoAndStop("none"); }

Rollovers sử dụng movie clip

Flash khơng có hàm onClipEvent(mouseOver), sử dụng hàm khác Hàm hitTest cho biết trỏ chuột có movie clip hay khơng Và làm sau

CODE

onClipEvent (enterFrame) {

if (this.hitTest(_root._xmouse,_root._ymouse, true)) { _root.information.gotoAndStop("information 1"); } else {

_root.information.gotoAndStop("none"); }

}

(95)

nó mang giá trị true false Đối với frame, sử dụng hàm hitTest để kiểm tra vị trí trỏ chuột Nếu vị trí trỏ đối lập với over xảy thay đổi Chúng ta xem đoạn code sau:

CODE

onClipEvent (load) { over = false; }

onClipEvent (enterFrame) {

// kiểm tra xem liệu trỏ chuột có di chuyển qua movie clip không testOver = (this.hitTest(_root._xmouse,_root._ymouse, true));

if (testOver and !over) {

_root.information.gotoAndStop("information 1"); over = true;

}else if (!testOver and over) {

_root.information.gotoAndStop("none"); over = false;

} }

Rollovers sử dụng frame

Như nói trên, có nhiều cách để làm rollovers Ở đây, bàn cách khác

Thay sử dụng movie clip cho thông tin cần hiển thị, sử dụng timeline để lưu thơng tin Frame frame none, frame chứa thông tin

(96)

Ví dụ sử dụng button cho hotspot, lưu ý button xuất tất frame, thông tin cần hiển thị xuất vài frame Bây công việc viết code gần giống làm rollovers button Nhưng không cần phải gọi hàm gotoAndStop từ movie clip information

CODE

on (rollOver) {

gotoAndStop("information 1"); }

on (rollOut) {

gotoAndStop("none"); }

Lợi việc sử dụng cách thay đổi thơng tin frame dễ dàng, mổ xẻ vào movie clip Nếu bạn quen sử dụng nhiều frame cách tốt cho bạn

Lưu ý ba cách cho kết nhau, khơng có khác biệt Ở đây, chúng tơi muốn trình bày cho bạn thấy cách làm khác mà thôi!

(97)

Nào, bạn thử sử dụng hiểu biết cách thay đổi trỏ rollovers để làm chương trình xem nào! Chương trình hiển thị thơng tin hành tinh

Chúng ta có hotspot, hotspot hành tinh, hotspot hiển thị hộp thông tin đưa trỏ chuột ngang qua Mỗi hotspot button, người dùng click vào để di chuyển đến frame khác để xem thơng tin hành tinh

(98)

Đặt 10 button bên trái, cho hành tinh Một movie clip summary xuất để hiển thị thông tin vắn tắt hành tinh đưa trỏ chuột ngang qua Movie clip chứa 10 frame: frame trống frame chứa thông tin hành tinh

Chúng ta phải ý việc sử dụng layer quan trọng, ví dụ sử dụng layer movie clip summary đặt layer

- Đặt lệnh stop(); vào frame đầu tiên, đặt frame movie clip summary

- Nào, viết code nhé!

CODE

on (rollOver) {

summary.gotoAndStop("mercury"); }

on (rollOut) {

summary.gotoAndStop("none"); }

- Những button đưa người dùng đến frame khác để xem thông tin hành tinh, lại viết code cho button

CODE

on (release) {

gotoAndStop("mercury"); }

Lưu ý có hai frame tên mercury, frame timeline movie clip summary

- Tạo movie clip để thay trỏ chuột, viết code sau

(99)

onClipEvent(load) { Mouse.hide();

this.swapDepths(99999); }

onClipEvent(enterFrame) { this._x = _root._xmouse; this._y = _root._ymouse; }

onClipEvent(unload) { Mouse.show(); }

- Tiếp theo làm cho trỏ chuột thay đổi đưa trỏ ngang qua button Hãy thêm đoạn code sau vào phần code button

CODE

on (rollOver) {

summary.gotoAndStop("mercury"); cursor.gotoAndStop("over button"); }

on (rollOut) {

summary.gotoAndStop("none"); cursor.gotoAndStop("normal"); }

on (release) {

(100)

}

Bây movie bạn xong Bạn chạy thử xem

Giờ thứ 14: Thành phần Scroll, Scrolling

Mặc dù scrollbar quen thuộc ứng dụng Mac, Windows, trình duyệt web… hiểu hoạt động Lý đơn giản là thành phần trực quan, dễ xây dựng mà không cần phải viết code nhiều Mọi người sử dụng khơng suy nghĩ nhiều

Kết nhà phát triển sử dụng Flash để tạo scrollbar riêng họ gặp khó khăn Vì vậy, tìm hiểu thành phần

scrollbar tìm hiểu scrollbar

Hình cho thấy thành phần scrollbar là: mũi tên lên, mũi tên xuống, trượt khay trượt

Thanh trượt (Slider)

(101)

Như nói, trượt kẹp chặt trượt khay trượt Khi kéo trượt trượt khay trượt khối văn cập nhật vị trí thích hợp

Mới đây, scrollbar có thêm đặc tính Thay kích thước trượt bị gắn sẵn với giá trị kích thước thay đổi tùy vào độ dài văn Vì thế, vị trí trượt ứng với dòng văn vị trí cuối ứng với dịng cuối Ví dụ textbox có scrollbar hiển thị 10 dịng văn có 100 dịng chiều cao trượt 10% so với khay trượt Nhưng không bàn vấn đề

Khay trượt (Bar)

Khay trượt có chức chứa trượt cho trượt trượt Chiều dài khay trượt phụ thuộc vào độ dài văn Khay trượt cịn có chức ta click vào khay trượt khối văn di chuyển trang Khi click vào phần trượt khối văn di chuyển đến trang trước, click vào phần trượt khối văn di chuyển đến trang sau

Các mũi tên

Mũi tên lên xuống hai thành phần đơn giản scrollbar, có chức cho người dùng di chuyển khối văn dịng

Những thuộc tính chung

Scrollbar có số thuộc tính chung mà cần phải xem xét Đầu tiên, thành phần scrollbar hoạt động click vào, tiếp tục hoạt động thả nút chuột Lấy ví dụ: người dùng click vào mũi tên xuống để di chuyển khối văn khối văn di chuyển dịng thả nút chuột

Một vấn đề vị trí trượt phải cập nhật liên tục thành phần khác kích hoạt

Scroll văn bản

(102)

đây, đặt tên cho text field scrollText

Sau đó, viết code cho lấy liệu vào Nhưng trước hết cần đặt cho text field scroll

Khi chọn vào text field bạn thay đổi kích thước text field cách kéo hình vng góc bên phải text field Cịn khơng đặt kích thước text field vừa đủ để hiểu thị nội dung bên

Thay điều chỉnh hình vng màu trắng lúc đó, chiều cao text field tự điều chỉnh theo kích thước nội dung bên trong, có nghĩa văn bên text field có nhiều dịng làm cho text field vài dịng để scroll Muốn xuất scroll giữ phím Shift click vào hình vng trắng để trở thành hình vng đen, lúc điều chỉnh kích thước text field theo ý muốn Như kích hoạt scroll cho text field Cịn số thuộc tính khác lien quan đến scroll

Thuộc tính scroll cho biết dòng văn xuất VD scroll = dịng hiển thị đầu tiên, scroll = dịng thứ hai hiển thị lúc dịng khơng thấy

Thuộc tính maxscroll cho biết giá trị lớn scroll

Thuộc tính scroll bottomscroll cho biết xác dịng văn đầu dòng cuối

Để scroll văn lên hay xuống bạn cần phải tăng giảm giá trị scroll Thế xong!

Luyện tập: Thiết kế chương trình scroll văn đơn giản

(103)

- Tìm đoạn văn để dán vào text field (tìm đoạn dài dài tí ) - Bây tạo movie Flash

- Sử dụng công cụ Text Tool để tạo text field

- Mở phần Properties đặt tên cho text field scrollText Đặt thuộc tính Mutiline Show Border Around Text

- Dán đoạn văn mà bạn chuẩn bị vào text field

- Tạo hai button giống hai hình vẽ Một button để điều khiển lên, để xuống

- Nhập đoạn code sau cho button lên:

CODE

on (press) {

scrollText.scroll ; }

- Và nhập đoạn code cho button xuống:

CODE

(104)

scrollText.scroll++; }

- Ok, bạn chạy thử movie xem Bạn thử click vào button để scroll văn

Giờ thứ 15: Các thành phần nhập liệu

Các bạn tạo nhiều thành phần nhập liệu Action Script, hẳn bạn gặp thành phần thể HTML Trong chương này, bạn học cách làm checkbox, radiobutton Action Script Bạn học cách để chuyển từ thành phần sang thành phần khác form cách nhấn nút TAB, để hạn chế nội dung người dùng nhập vào

Các nội dung chương này: - Cách tạo checkbox

- Cách tạo radiobutton

- Sử dụng TAB để chuyển từ thành phần sang thành phần khác - Hạn chế nội dung nhập liệu

Tạo Checkbox

Trong Hour 8, bạn biết cách tạo selectable movie clip CheckBox Selectable movie clip giống với checkbox chuẩn sử dụng hệ điều hành Mac Windows

Để tạo Checkbox bạn cần button movie clip Button thể trạng thái Off Checkbox, có nghĩa checkbox chưa chọn Một button thể trạng thái On, có nghĩa checkbox chọn

(105)

Check box chọn, thứ chưa chọn, thứ người dùng chuẩn bị chọn

Các bạn có biết cách thành phần checkbox hoạt động chung không? Rất đơn giản, button Off đưa vào movie clip riêng đặt frame đầu tiên, bấm F6 để tạo frame đặt button On vào frame thứ Đặt tên frame Off, frame On Tiếp theo, cho câu lệnh stop(); vào frame để dùng movie clip lại Trong button có đoạn code gọi hàm time line movie clip có chứa button để xử lý nút nhấn

CODE

on (release) { pressButton(); }

Ngồi ra, frame Off (frame 1) cịn chứa đoạn code câu lệnh stop();

CODE

state = false;

function pressButton() { state = !state;

if (state) {

gotoAndStop("on"); } else {

gotoAndStop("off"); }

(106)

Biến state để kiểm tra trạng thái checkbox Khi click button hàm pressButton gọi Trong đó, đổi lại trạng thái state, có nghĩa lúc đầu false (chưa chọn), sau click thành true (đã chọn) Tiếp theo, hàm pressButton kiểm tra giá trị biến state để đưa người dùng đến frame thích hợp Nếu state = true nhảy đến frame On, cịn state = false nhảy đến frame Off

Tạo RadioButton

Việc tạo Radiobutton phức tạp chút so với checkbox Các Radiobutton gom vào nhóm có quan hệ với

Checkbox sử dụng trường hợp chọn lựa khơng có tính loại trừ, có nghĩa người dùng chọn nhiều checkbox Ngược lại, Radiobutton sử dụng trường hợp có tính loại trừ, có nghĩa nhóm Radiobutton có checkbox chọn thời điểm, khơng có chuyện Radiobutton chọn Nếu bạn chọn RadioButton, bạn chọn qua Radiobutton khác chọn lựa cũ tự động đi, chuyển qua Radiobutton

Hình nhóm Radiobutton

RadioButton chọn, người dùng chuẩn bị chọn RadioButton thứ 2, người dùng chọn RadioButton khác RadioButton tự động chọn lựa

Một RadioButton đơn giản tương tự Checkbox, movie clip có frame để chứa button biểu trạng thái RadioButton Frame chứa vòng tròn rỗng, frame thứ vòng tròn với dấu chấm tròn

Điểm khác Checkbox RadioButton code chúng Code RadioButton phức tạp code CheckBox

(107)

CODE

stop();

// kiểm tra có phải RadioButton nhóm hay không if (_parent.radioButtons == undefined) {

// tạo array RadioButton

_parent.radioButtons = new Array();

// RadioButton mặc định chọn gotoAndStop("on");

state = true; } else {

// RadioButton khác không chọn state = false;

}

// chèn array RadioButton level ngồi _parent.radioButtons.push(this);

Khi người dùng click vào button, hàm turnOn gọi Điều hàm turnOn duyệt qua tất RadioButton (các movie clip), gọi hàm turnOff cho RadioButton Nói đơn giản có nghĩa click vào RadioButton trước tiên tất RadioButton nhóm quay trạng thái Off, sau chuyển trạng thái RadioButton chọn thành On

CODE

function turnOn() {

// chuyển tất thành OFF

for(var i=0;i<_parent.radioButtons.length;i++) { _parent.radioButtons[i].turnOff();

(108)

// chuyển RadioButtond chọn thành ON gotoAndStop("on");

state = true; }

Tiếp theo đoạn code cho hàm turnOff()

CODE

function turnOff() { gotoAndStop("off"); state = false;

}

Tiếp theo xây dựng hàm getValue()để kiểm tra xem RadioButton chọn Hàm movie khác gọi Hàm đơn giản, duyệt qua tất RadioButton array RadioButton xem chọn

CODE

function getValue() {

// duyệt tất RadioButton

for(var i=0;i<_parent.radioButtons.length;i++) { // tìm RadioButton chọn

if (_parent.radioButtons[i].state) {

return(_parent.radioButtons[i]._name); }

}

// khơng có chọn trả chuỗi rỗng “” return "";

(109)

Luyện tập: Chương trình trắc nghiệm

Bây áp dụng thứ học CheckBox RadioButton để làm chương trình trắc nghiệm đơn giản Mỗi frame chứa câu hỏi riêng

Ví dụ frame chứa câu hỏi hình đây, có câu trả lời

Bắt đầu

- Tạo movie Flash

- Tạo Checkbox học

- Rồi sau kéo tạo movie clip checkbox vào, đặt tên là: Flash, Director, Fireworks, Freehand, and Dreamweaver

- Tạo câu trả lời static text kế bên Checkbox hình - Tạo button Next để chuyển đến câu hỏi

- Chèn đoạn code sau vào frame

CODE

(110)

Đoạn code có nhiệm vụ tạo mảng results để lưu kết câu trả lời, đồng thời dùng movie

- Khi nhấn nút Next chuyển sang câu hỏi lưu câu trả lời thời vào mảng results

CODE

on (release) {

if (Flash.state) results.push("Flash"); if (Director.state) results.push("Director"); if (Fireworks.state) results.push("Fireworks"); if (Freehand.state) results.push("Freehand");

if (Dreamweaver.state) results.push("Dreamweaver"); nextFrame();

}

(111)

- Tạo RadioButton phần trước đưa vào movie tên: Windows, Macintosh, and Linux

- Chèn nội dung câu trả lời vào hình

- Copy nút Next vào frame thay đoạn code đoạn code khác

CODE

on (release) {

results.push(Windows.getValue()); nextFrame();

}

Đoạn code sử dụng hàm getValue để kiểm tra xem RadioButton chọn - Ok, đến bạn tự làm tiếp câu hỏi nhé, tương tự Nhưng mà nhớ tên thành phần phải khác Các bạn sử dụng hàm trace để đưa kết câu trả lời cửa sổ Output để xem

- Trong Hour 18, bạn học cách đưa liệu lên server, bạn cải tiến chương trình để đưa câu trả lời lên server để kiểm tra

Sử dụng Tab để chuyển từ thành phần sang thành phần khác

Những người sử dụng Flash than phiền việc sử dụng tab để chuyển đổi thành phần Công việc chuyển đổi cách nhấn phím Tab gọi Tab Order, thường thấy việc hầu hết chương trình chun nghiệp, ví dụ trình duyệt web, điều mang lại nhiều thuận tiện cho người sử dụng, chuyển đến thành phần logic chương trình

(112)

May mắn đặt lại Tab order cho thành phần cách đặt lại thuộc tính tabIndex Nếu có text field hình trên: text1, text2, text3, text4 sử dụng đoạn code sau:

CODE

text1.tabIndex = 1; text2.tabIndex = 2; text3.tabIndex = 3; text4.tabIndex = 4;

Điều ý sử dụng tabIndex phải ý đến label textfield tránh sử dụng lại số nhiều lần, điều làm cho Flash bị lẫn lộn

Một điều cho dù mặc định Flash bạn sử dụng tabIndex Flash khơng tự động đặt focus cho thành phần đầu tiên, thế, bạn phải tự làm điều Để làm vậy, bạn sử dụng lệnh đối tượng Selection để báo cho Flash biết thành phần mặc địnhđược đặt focus

CODE

Selection.setFocus(text1);

Bạn sử dụng lệnh Selection.setFocus lúc để chuyển đến thành phần mong muốn Việc quan trọng, bạn đặt trỏ vào textfield thay bắt người dùng phải click vào textfield trước gõ

Bạn sử dụng Selection.getFocus để kiểm tra xem thành phần focus Đoạn code ví dụ Khi người dùng chuyển focus sang thành phần khác bạn biết người dùng chuyển đến đâu

CODE

Selection.addListener(this);

this.onSetFocus = function(oldFocus, newFocus) { trace(oldFocus+","+newFocus);

(113)

Hạn chế nhập liệu

Khi người dùng nhập liệu vào textfield, có lúc bạn muốn hạn chế việc nhập liệu Ví dụ ô năm sinh, bạn muốn người dùng nhập số vào, khơng cần phải nhập chữ Bạn hạn chế ký tự phép nhập vào textfield cách đặt giá trị thuộc tính restrict textfield Nếu khơng đặt giá trị textfield nhận tất ký tự Nhưng thuộc tính restrict textfield chuỗi ký tự có ký tự chuỗi chấp nhận Dưới ví dụ hạn chế nhập liệu, người dùng nhập số mà thơi

CODE

text1.restrict = "01234567890";

Cịn ví dụ nhập liệu email

CODE

text2.restrict = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";

Một điều ý ký tự in hoa in thường đựơc chấp nhận text2

Bạn hạn chế số ký tự phép nhập vào textfield Cái bạn khơng cần phải dùng AS, đặt thuộc tính trực tiếp khung Properties

CODE

text1.restrict = "01234567890"; text1.maxChars = 4;

Luyện tập: Kiểm tra liệu nhập

Bây làm chương trình gồm form nhập liệu, yêu cầu nhập vào tên, năm sinh, email Và kiểm tra thông tin nhập vào

(114)

khoảng 100 năm trước đến Còn email phải có ký tự có dạng a@b.c, a, b tuỳ ý c phải có ký tự bắt buộc phải có ký hiệu @ Đó yêu cầu Nào, bắt đầu nhé!

- Tạo movie

- Tạo textfield cho nội dung nêu trên, đặt tên userName, userYear, userEmail Đặt variable tương ứng userNameText, userYearText, and userEmailText Bạn cần phải tạo dynamic textfield liên kết với variable feedback Tạo nút Submit Movie bạn giống hình

- Đặt đoạn code sau vào frame để dừng lại thiết lập thuộc tính để hạn chế nhập liệu

CODE

stop();

// hạn chế chiều dài tối đa tên 64 ký tự userName.maxChars = 64;

// năm sinh phải có số

userYear.restrict = "01234567890"; userYear.maxChars = 4;

// hạn chế liệu email

(115)

- Tiếp theo đặt trỏ vào text field userName lúc movie bắt đầu

CODE

Selection.setFocus(userName);

- Để kiểm tra người dùng nhập liệu xong, thêm listener để bắt event đoạn code

CODE

Selection.addListener(this);

Nó báo cho biết xảy event onSetFocus

- Tiếp theo đặt giá trị biến ignoreSetFocus False, sử dụng đến biến sau

CODE

ignoreSetFocus = false;

- Tiếp theo viết hàm onSetFocus để bắt event

CODE

this.onSetFocus = function(oldFocus, newFocus) { // this is a focus reset, so ignore

if (ignoreSetFocus) { ignoreSetFocus = false; return(0);

}

// use the appropriate check function if (oldFocus == userName) {

ret = checkUserName();

} else if (oldFocus == userYear) { ret = checkUserYear();

(116)

ret = checkUserEmail(); }

if (!ret) {

// ignore this focus change and go back ignoreSetFocus = true;

Selection.setFocus(oldFocus); }

}

Hàm nhận hai đối số Đối số thứ textfield trứơc chuyển focus đối số thứ hai textfield sau chuyển focus Hàm checkUserName kiểm tra tên người dùng

CODE

// tên phải có ký tự function checkUserName() { if (userNameText.length < 3) {

feedback = "Bạn phải nhập ký tự" return(false);

}

// quay trở lại feedback feedback = "";

return(true); }

Hàm checkUserYear kiểm tra năm nhập vào

CODE

// năm phải từ khoảng 100 năm đến function checkUserYear() {

(117)

today = new Date();

thisYear = 1900+today.getYear(); // kiểm tra nhập

if (parseInt(userYearText) == Math.NaN) { feedback = "Bạn phải nhập năm sinh."; return(false);

// năm sinh sớm (không thật)

} else if (parseInt(userYearText) < thisYear-100) {

feedback = "Bạn phải nhập năm sinh, từ 100 năm trước đến nay"; return(false);

// năm sinh tương lai :)

} else if (parseInt(userYearText) > thisYear) { feedback = "Bạn phải nhập năm sinh"; return(false);

}

// quay trở lại feedback = ""; return(true); }

Tiếp theo hàm chechUserEmail để kiểm tra email

CODE

// kiểm tra email

function checkUserEmail() { if (userEmailText.length < 7) { feedback = "Email ngắn"; return(false);

(118)

feedback = "Thiếu ký tự @"; return(false);

} else if (userEmailText.indexOf(".") == -1) { feedback = "Thiếu dấu chấm (.)";

return(false);

} else if (userEmailText.indexOf("@") > userEmailText.indexOf(".")) { feedback = "@ dấu chấm không đúng";

return(false);

} else if (userEmailText.lastIndexOf(".") > userEmailText.length-3) { feedback = "Domain không hợp lệ"

return(false); }

// quay trở lại feedback = ""; return(true); }

- Thế kiểm tra liệu xong Bây sử dụng hàm để kiểm tra liệu nhập vào xuất kết Hàm sau kiểm tra ô nhập liệu, ô sai trả kết false, cịn hết true

CODE

function checkAll() { if (!checkUserName()) { return(false);

} else if (!checkUserYear()) { return(false);

} else if (!checkUserEmail()) { return(false);

}

(119)

}

- Bây viết code cho nút Submit Khi nhấn nút Submit gọi hàm CheckAll đưa sang frame với lời cám ơn

CODE

on (release) { if (checkAll()) { nextFrame(); }

}

Giờ thứ 16: Menu button động

Menu hệ thống quen thuộc với chương trình máy tính Hệ điều hành Flash có hệ thống menu đầu Menu cách tốt để đưa nhiều lựa chọn cho người dùng mà lại tốn diện tích hình

Trong thứ 16 này, học về: - Cách làm menu đơn giản

- Sử dụng menu movie

- Tạo menu xổ xuống click vào nút - Cách tạo button động

- Sử dụng button động movie

Cách làm menu đơn giản

Những bạn làm quen với AS thường muốn biết cách tạo menu Thật để tạo menu đơn giản, biết qua rồi, bạn khơng để ý

(120)

Khi đưa trỏ ngang qua nút About Us loạt button khác xuất hình bên phải Như vậy, cần có frame movie clip làm menu Frame thứ chứa button About Us, frame thứ hai chứa button About Us button lại Ở frame thứ nhất, người dùng đưa trỏ ngang qua button About Us nhảy sang frame thứ dừng lại frame người dùng đưa trỏ chuột ngoài, trở frame Nếu để ý, bạn thấy cách giống học Giờ thứ 13 RollOver Chúng ta dùng hàm hitTest để kiểm tra xem vị trí trỏ chuột có nằm button không Dưới đoạn code xử lý việc Chúng ta xem nhé!

CODE

onClipEvent(load) { previouslyOver = false; }

onClipEvent(enterFrame) { // kiểm tra vị trí trỏ

currentlyOver = this.hitTest(_root._xmouse,_root._ymouse,true); // kiểm tra thay đổi

if (!previouslyOver and currentlyOver) { previouslyOver = true;

this.gotoAndStop("on");

} else if (previouslyOver and !currentlyOver) { previouslyOver = false;

this.gotoAndStop("off"); }

(121)

Hãy ý, bạn sử dụng AS để quản lý thành phần khác đựơc đặt chung frame, bạn phải đưa menu lên cách sử dụng hàm swapDepths Luyện tập: Làm menu

Nào, bắt tay vào làm thử menu đơn giản nhé! Menu có phần: About Us, Products Store, menu lại chứa nhiều menu

- Việc tạo movie Flash

- Tạo button đơn giản thôi, button khơng nên có chữ, nhớ chừa chỗ trống để đưa chữ vào sau

- Tạo movie clip mới, đặt tên About Us Menu Tạo hai layer, Label Buttons

- Trong layer Buttons, kéo button vừa tạo vào Đặt dòng chữ About Us lên

- Layer Label trải frame Nhưng frame layer Buttons khác nhau, frame đầu đặt tên off, frame đặt tên on

(122)

Quay trở lại level root, kéo movie clip About Us Menu từ Library vào, đặt tên aboutUsMenu, chèn đoạn code sau:

CODE

onClipEvent(load) {

previouslyOver = FALSE; }

onClipEvent(enterFrame) {

currentlyOver = this.hitTest(_root._xmouse,_root._ymouse,true); if (!previouslyOver and currentlyOver) {

previouslyOver = true; this.gotoAndStop("on");

} else if (previouslyOver and !currentlyOver) { previouslyOver = false;

this.gotoAndStop("off"); }

(123)

- Bây chạy thử movie bạn xem Đưa trỏ vào button About Us xem điều xảy ra!

- Phần việc cịn lại bạn Làm tương tự cho menu lại! Tạo menu xổ xuống click vào nút

Có nhiều cách để làm menu xổ xuống, có nhiều cách menu hoạt động Chúng ta biết cách ví dụ phần trước, người dùng đưa trỏ ngang qua button loạt button khác xuất dọc bên tạo thành menu, đơn giản frame

Menu xổ xuống hoạt động theo cách khác: người dùng click vào button, loạt menu xuất người dùng phải chuột kéo trỏ để chọn menu con, muốn chọn menu thả chuột menu Chúng ta nghiên cứu mổ xẻ menu xổ xuống nhé!

Chúng ta tạo frame trước, frame đầu chứa button tiêu đề menu, frame hai chứa button xếp dọc xuống thành hệ thống menu tiêu đề menu click Tuy nhiên cách viết code khác đi!

Đây code cho button làm tiêu đề cho menu

CODE

on (press) { expandMenu(); }

on (release, releaseOutside) { collapseMenu();

}

Khi người dùng click vào button gọi hàm expandMenu(), người dùng thả chuột gọi hàm collapseMenu()

(124)

CODE

on (dragOver) { rollOverMenu(); }

on (dragOut) { rollOutMenu(); }

Button tiêu đề gọi hàm expandMenu(), collapseMenu(), rollOverMenu(), rollOutMenu(), viết hàm này, đặt chúng frame nhé! Hàm expandMenu() đặt giá trị cho biến expanded true nhảy sang frame thứ hai

CODE

function expandMenu() { expanded = true; gotoAndStop("on"); }

Hàm collapseMenu() làm ngược lại

CODE

function collapseMenu() { expanded = false; gotoAndStop("off"); }

(125)

CODE

function rollOverMenu() { if (expanded) {

gotoAndStop("on"); }

}

function rollOutMenu() { if (expanded) {

gotoAndStop("off"); }

}

Chúng ta viết code tiếp cho menu xổ xuống Chúng button, viết event on(release) cho chúng để bắt kiện người người thả chuột button đó, có nghĩa người dùng chọn menu Khi đó, gọi hàm collapseMenu() thực cơng việc mình, đơn giản gọi hàm trace Chúng ta viết event on(dragOver) on(dragOut) cho button để giữ menu lại người dùng giữ chuột kéo qua button thu menu lại người dùng thả chuột kéo

CODE

on (release) { collapseMenu();

trace("History Button Pressed"); }

on (dragOut) { rollOutMenu(); }

(126)

Cịn có nhiều cách để làm menu, phụ thuộc vào mục đích sử dụng bạn khả sử dụng AS người

Button động

Một cách khác tương tự để làm menu xổ xuống sử dụng button động Chúng ta làm menu xổ xuống mà không cần phải làm cách button trước, tự sinh AS , thú vị

Điều cần phải làm tạo button mẫu Tiếp theo, đặt button vào movie clip, movie clip có hai thành phần, button hai dynamic text button, dynamic text liên kết với biến buttonLabel Trong cửa sổ Library, click chuột phải lên tên movie clip chọn Linkage Nhớ chọn mục Export for Actionscript đặt tên cho buttonMovieClip Đựơc rồi, có button mẫu, sử dụng AS để sử dụng button Việc đơn giản, sử dụng lệnh attachMovie để tạo instance movie clip đặt lại giá trị cho dynamic text movie clip, đặt lại vị trí cách đặt cách thuộc tính _x, _y

CODE

function createButton(buttonLabel, x, y) {

this.attachMovie("buttonMovieClip","button"+buttonLevels,buttonLevels); bmc = this["button"+buttonLevels];

bmc.buttonLabel = buttonLabel; bmc._x = x;

bmc._y = y; buttonLevels++; return(bmc); }

Đựơc rồi, thử movie bạn xem

(127)

mỗi button gọi hàm khác nhau, điều có nghĩa chúng thực việc khác

Luyện tập: Sử dụng button động để tạo menu - Tạo movie Flash

- Tạo button mẫu phần trước, đặt đoạn code sau vào button

CODE

on (rollOver) {

_parent.buttonRolloverAction(thisAction,buttonLabel); }

on (release) {

_parent.buttonClickAction(thisAction,buttonLabel); }

Điều có nghĩa button gọi hàm buttonRollOverAction đưa chuột qua, gọi hàm buttonClickAction click chuột Hai đối số giúp báo button click - Dưới hàm createButton để tạo button động, lần tạo loạt button từ mảng lưu sẵn

CODE

function createButton(buttonLabel, x, y, buttonAction) {

this.attachMovie("buttonMovieClip","button"+buttonLevels,buttonLevels); bmc = this["button"+buttonLevels];

bmc.buttonLabel = buttonLabel; bmc._x = x;

bmc._y = y;

bmc.thisAction = buttonAction; buttonLevels++;

(128)

}

// Tạo loạt button từ mảng

function createButtonList(buttonList, x, y, direction) { for (var i=0;i<buttonList.length;i++) {

ret = createButton(buttonList[i].label,x,y, buttonList[i].action); buttons[i].mc = ret;

if (direction == "down") { y += 20;

} else if (direction == "across") { x += 100;

} } }

- Còn cách tạo mảng để tạo button

CODE

mainButtonList = new Array();

mainButtonList.push({label:"About Us", action:"aboutUsButtonList"}); mainButtonList.push({label:"Products", action:"productsButtonList"}); mainButtonList.push({label:"Store",action:"storeButtonList"});

- Công việc gọi hàm createButtonList để tạo button

CODE

buttonLevels = 1;

createButtonList(mainButtonList,100,100,"across");

(129)

buttonRollOverAction để xử lý

CODE

function buttonRolloverAction(thisAction,thisLabel) { if (thisAction == "aboutUsButtonList") {

deleteAllButtonLists();

createButtonList(aboutUsButtonList,100,120,"down"); } else if (thisAction == "productsButtonList") {

deleteAllButtonLists();

createButtonList(productsButtonList,200,120,"down"); } else if (thisAction == "storeButtonList") {

deleteAllButtonLists();

createButtonList(storeButtonList,300,120,"down"); }

}

- Hàm buttonRollOverAction gọi hàm createButtonLists với đối số khác mảng định nghĩa

CODE

aboutUsButtonList = new Array();

aboutUsButtonList.push({label:"History", action:"goto"}); aboutUsButtonList.push({label:"Clients", action:"goto"}); aboutUsButtonList.push({label:"Partners", action:"goto"}); productsButtonList = new Array();

productsButtonList.push({label:"Widgets", action:"goto"}); productsButtonList.push({label:"Toys", action:"goto"});

productsButtonList.push({label:"Power Tools", action:"goto"}); storeButtonList = new Array();

(130)

storeButtonList.push({label:"Find a Store", action:"goto"}); storeButtonList.push({label:"Request Catalog", action:"goto"}); storeButtonList.push({label:"Track Shipment", action:"goto"}); storeButtonList.push({label:"Return Item", action:"goto"});

- Hàm deleteAllButtonLists làm biến button tạo, có nghĩa tất menu mảng vừa tạo biến xuất mảng thời điểm mà Hãy tưởng tượng menu Flash, đưa trỏ đến menu File menu File xổ xuống, đưa sang Edit menu File thu lại menu Edit xổ xuống…

Trước đó, phải có đoạn code sau để menu đến mảng menu

CODE

allButtonLists = new Array();

allButtonLists = [aboutUsButtonList,productsButtonList,storeButtonList];

Tiếp theo viết hàm deleteButtonList deleteAllButtonLists

CODE

function deleteButtonList(buttons) { for (var i=0;i<buttons.length;i++) { buttons[i].mc.removeMovieClip(); }

}

function deleteAllButtonLists() {

for(var i=0;i<allButtonLists.length;i++) { deleteButtonList(allButtonLists[i]); }

}

(131)

Giờ thứ 17: Liên kết liên lạc với trình duyệt, Browser Navigation and Communication

Khi thiết kế Flash, bạn có sử lưa chọn, nhúng vào trang web làm application tự chạy riêng Nếu bạn nhúng vào trang web movie bạn liên lạc với trình duyệt để báo cho trình duyệt cần phải làm

Trong thứ 17, bạn học được: - Cách load trang web

- Tìm hiểu cách liên lạc với JavaScript - Mở cửa sổ trình duyệt từ movie - Sử dụng JavaScript gởi thông điệp đến movie - Lưu thông tin người dùng vào JavaScript cookies - Tạo movie sử dụng JavaScript

- Những câu lệnh đặc biệt cho application tự chạy

Load trang web

Ngày Flash sử dụng nhiều website Nó sử dụng để làm trang chủ để tạo liên kết (navigation bar)… Cũng có lúc, cần load trang web từ movie Flash

Cách đơn giản

Bạn load trang web cách sử dụng câu lệnh getURL Nó hoạt động giống thẻ <a href…> HTML Dưới ví dụ nhấn button load trang web thay cho trang tại:

CODE

on (release) {

(132)

Ở ví dụ trang anotherpage.html load Bạn thay URL hoàn chỉnh (như http://www.yahoo.com) để liên kết đến website khác đường dẫn tương đối để liên kết đến trang website

Không cần sử dụng AS, tạo liên kết cách đặt thuộc tính hypertext links TextField, thật giống hệt thẻ <a href…> HTML Cách nâng cao

Cách bạn sử dụng hàm getURL với cách khác để xác định nơi load trang web lên frame window Như biết frame window có tên, truyền tên vào đối số thứ hàm getURL

Trong ví dụ đây, trang web bạn có nhiều frame, có frame tên Main, trang web load frame Main

CODE

on (release) {

getURL("summary.html","Main"); }

Bạn sử dụng đoạn code để load trang web vào window tên Main Ngồi ra, bạn cịn sử dụng đối số đặc biệt để truyền vào thay cho tên: - _blank : mở window load trang web vào window

- _parent : load trang web vào frame cha frame

- _top : load trang web vào window cũ, không kể frame mà thay tất frame window

Nếu bạn muốn thay đổi thiết lập window kích thước… bạn phải sử dụng JavaScript Chúng ta nói vấn đề sau

Luyện tập: Làm liên kết (navigation bar)

Bây bạn đủ khả làm liên kết Flash sử dụng AS, bạn cần phải có thêm kiến thức khác HTML

(133)

nội dung

Movie làm Flash chứa số button để liên kết sang trang web khác

- Đầu tiên tạo trang HTML chứa frame, trang tên navigation.html

CODE

<HTML><HEAD>

<TITLE>Flash Navigation Example</TITLE> </HEAD>

<BODY BGCOLOR="#FFFFFF"> <FRAMESET cols="120,*">

<FRAME name="navigation" src="navbar.html" scrolling="no"> <FRAME name="content" src="content1.html" scrolling="auto"> </FRAMESET>

</BODY> </HTML>

- Trang HTML tạo frame, frame chứa trang HTML khác Bây tạo trang HTML Chúng ta chưa cần phải làm trang HTML cho frame bên trái, tạo publish movie thành HTML Còn trang HTML frame bên phải có nhiều thay đổi

Bây tạo trang HTML đơn giản tên content1.html, content2.html, content3.html chứa dòng chữ đơn giản

CODE

<HTML><HEAD>

<TITLE>Content 1</TITLE> </HEAD>

<BODY BGCOLOR="#FFFFFF"> Content

(134)

- Bây công việc làm với Flash Tạo movie rộng 100px, cao 400px Tạo button viết code cho nút để liên kết đến trang content1.html, content2.html, content3.html tương tự sau:

CODE

on (release) {

getURL("content1.html","content"); }

- Lưu movie lại với tên navbar.fla - Publish movie thành file html

- Tiếp theo đưa tất file vào thư mục Các file là: navigation.html, content1.html, content2.html, content3.html, navbar.html, and navbar.swf

- Hãy mở trang navigation.html để thử xem

ActionScript JavaScript

Nếu bạn quen sử dụng JavaScript bạn vui biết JavaScript liên lạc với ActionScript Tuy nhiên, cách không hoạt động tốt tất loại trình duyệt

Việc liên lạc xây dựng công nghệ Một công nghệ LiveConnect xây dựng phiên trình duyệt Netscape trước phiên 6.0 Công nghệ thứ hai ActiveX dùng để liên lạc Flash Internet Explorer

Nhưng bạn thiết kế cho người dùng sử dụng trình duyệt Windows cách tốt

Gởi thông điệp đến JavaScript

Gởi thông điệp từ ActionScript đến JavaScript cần viết code ActionScript thay đổi nội dung trang HTML bạn

(135)

Để hiểu rõ cách làm việc mổ xẻ file html mà Flash tạo

Đầu tiên, ý đến thẻ OBJECT/EMBED, có số phần để chấp nhận liên lạc Tham số ID thẻ OBJECT giống với tham số NAME thẻ EMBED Hai tham số đặt tên cho movie trang web để JavaScript gọi Ngồi cịn có tham số khác thẻ EMBED, tham số swLiveConnect phép phiên bạn Netscape trước phiên 6.0 liên lạc với Flash công nghệ LiveConnect

CODE

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/ [ic:cc]flash/swflash.cab#version=5,0,0,0"

ID=flashmovie WIDTH=120 HEIGHT=120>

<PARAM NAME=movie VALUE="17astojs.swf"> <PARAM NAME=quality VALUE=high> <PARAM

NAME=bgcolor VALUE=#FFFFFF> <EMBED src="17astojs.swf" quality=high bgcolor=#FFFFFF

WIDTH=120 HEIGHT=120

swLiveConnect=true NAME=flashmovie TYPE="application/x-shockwave-flash" PLUGINSPAGE="http:

//www.macromedia.com/shockwave/download/ index.cgi? P1_Prod_Version=ShockwaveFlash"></

EMBED> </OBJECT>

Trước đoạn code thẻ OBJECT/EMBED có đoạn script Phần hàm JavaScript với tên movie ID thẻ OBJECT nối tiếp với _DoFSCommand Như ví dụ tên hàm flashmovie_DoFSCommand

(136)

document.flashmovie Hãy xem đoạn code xem nhé:

CODE

<script LANGUAGE=JavaScript>

function flashmovie_DoFSCommand(command, args) { if (navigator.appName.indexOf("Microsoft") != -1) { var flashmovieObj = flashmovie;

} else {

var flashmovieObj = document.flashmovie; }

alert(command); alert(args); }

Trong Internet Explorer, Flash khơng liên lạc với JavaScript mà cịn liện lạc với VBScript Đoạn code viết JavaScript thay cho đoạn JavaScript trên:

CODE

if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 &&

navigator.userAgent.indexOf("Windows 3.1") == -1) { document.write('<script LANGUAGE=VBScript\> \n'); document.write('on error resume next \n');

document.write('Sub flashmovie_FSCommand(ByVal command, ByVal args)\n'); document.write('call flashmovie_DoFSCommand(command, args)\n');

document.write('end sub\n'); document.write('</SCRIPT\> \n'); }

(137)

Vậy phần ActionScript phải Xin trả lời cần dịng mà thơi

CODE

fscommand ("alert", "This is alert 1."); Nhận thông điệp từ JavaScript

Nhận thơng điệp từ JavaScript dễ Nhưng bạn phải nhớ đặt tham số ID thẻ OBJECT tham số NAME thẻ EMBED, nhớ đặt giống tên Và nhớ đặt swLiveConnect=true thẻ EMBED

Bây sẵn sàng để truyền thông điệp từ JavaScript cho movie Hãy xem ví dụ nhé, ví dụ sử dụng hàm gotoFrame để di chuyển movie sang frame thứ hai

CODE

<FORM NAME="flashControlForm">

<INPUT NAME="gotoFrame1" TYPE=Button VALUE="Frame 1" onClick="window.document.flashmovie.GotoFrame(1);"> </FORM>

Chắc đến bạn tự hỏi di chuyển sang frame thứ hai mà lại sử dụng gotoFrame(1), khơng nào? Bởi hệ đếm số (zero-based) Vì vậy, frame 0, frame 1, frame 2…

Có 24 câu lệnh Flash movie Tuy nhiên khơng cần phải dành nhiều thời gian để tìm hiểu nói cách liên lạc hoạt động tốt tất loại trình duyệt

Bạn sử dụng hàm GetVariable SetVariable để điều khiển biến timeline movie Câu lệnh Zoom dùng để kéo dãn movie Hai hàm isPlaying percentLoaded dùng để kiểm tra movie hoạt động Play dùng để play movie ngừng

(138)

Có lẽ yêu cầu thường gặp người sử dụng Flash Bạn làm điều cách sử dụng hàm getURL JavaScript

Tuy nhiên, sử dụng JavaScript có nhiều đặc điểm hay hơn, bạn đặt lại thuộc tính window Nào, làm thử nhé:

- Tạo movie

- Đặt vào movie button

- Chèn đoạn code sau cho button vừa tạo

CODE

on (release) {

fscommand ("newwindow", "content.html"); }

- Trong phần Publish Settings, chọn để publish file HTML với Flash movie Trong phần HTML, nhớ chọn vào mục Flash with FSCommand

- Publish movie bạn

- Mở file HTML mà Flash vừa tạo trình soạn thảo được, NotePad chẳng hạn Hãy tìm phần để chèn JavaScript, chèn đoạn code sau vào:

CODE

if (command == "newwindow") {

window.open(args,"","width=320,height=240,location=no,toolbar=no, menubar=no"); }

- Tạo thêm file HTML đơn giản đặt tên content.html

- Mở file HTML bạn trình duyệt nhớ trình duyệt phải hỗ trợ

JavaScript nha Khi nhấn vào button cửa sổ xuất hiện, khơng có toolbar, kích thước 320x240

(139)

dụng JavaScript

Quay trở lại file HTML mà Flash tạo, chèn đoạn code JavaScript sau vào cuối đoạn code ta chèn vào lúc trước

CODE

function initComm() {

window.document.newWindowMovie.SetVariable("jsCommOK","OK"); }

Đoạn code thử đặt giá trị cho biến jsCommOK OK Nếu trình duyệt có hỗ trợ JavaScript jsCommOK mang giá trị OK cịn khơng biến jsCommOK undefined

- Để chạy hàm initComm bạn sửa lại phần BODY trang HTML sau:

CODE

<BODY bgcolor="#FFFFFF" onLoad="initComm();">

Điều có nghĩa hàm initComm gọi sau trang load xong - Bây quay trở lại file Flash bạn, sửa đoạn script button thành:

CODE

on (release) {

if (jsCommOK == "OK") {

fscommand ("newwindow", "content.html"); } else {

getURL ("content.html", "_blank"); }

}

(140)

Trong phần này, làm file Flash ActionScript mà điều khiển JavaScript

- Tạo movie Flash với frame nhiều Nội dung frame khơng quan trọng, bạn muốn để đựơc lời khuyên frame nên khác để theo dõi thay đổi

- Đặt câu lệnh stop() vào frame - Publish file HTML

- Mở file HTML trình soạn thảo văn

- Truyền tham số ID thẻ OBJECT NAME thẻ EMBED, hai mang giá trị slideshow

- Nhớ đặt swLiveConnect=true thẻ EMBED - Tạo button file HTML đoạn code sau:

CODE

<FORM NAME="flashControlForm">

<INPUT NAME="next" TYPE=Button VALUE="Next" onClick="nextFrame();"> <INPUT NAME="prev" TYPE=Button VALUE="Previous" onClick="prevFrame();"> </FORM>

- Mỗi button gọi hàm Cả hai hàm sử dụng TcurrentFame(“/”)biết frame thứ mấy, sử dụng gotoFrame để di chuyển tới lui

CODE

<script LANGUAGE="JavaScript"> function nextFrame() {

var frameNum = window.document.slideshow.TCurrentFrame("/"); window.document.slideshow.GotoFrame(frameNum+1);

}

function prevFrame() {

var frameNum = window.document.slideshow.TCurrentFrame("/"); window.document.slideshow.GotoFrame(frameNum-1);

(141)

</SCRIPT>

Công việc bạn cịn nhớ khơng: CHẠY THỬ

Giờ thứ 18: Gởi thông tin cho máy chủ, Sending Information to the Server

Cho đến tận bây giờ, movie làm hầu hết chạy (stand alone) Có nghĩa chạy máy khách (client-side) khơng có liên lạc với máy chủ (Server) Nên nhớ Flash gởi trả thơng tin cho Server giống form HTML Vậy thứ 18 này, tìm hiểu vấn đề

Trong thứ 18, học: - Tìm hiểu đối tượng LoadVars

- Tạo chương trình server-side đơn giản - Sử dụng Flash để gởi liệu cho Server

Đối tượng LoadVars

Rất may mắn có Flash MX, phiên Flash trước đây, muốn làm điều phải làm movie clip khó khăn Đối với Flash MX, sử dụng đối tượng LoadVars

Đối tượng LoadVars bao gồm tập hợp câu lệnh biến đặc biệt để gởi liệu cho Server giống post form HTML Chúng ta tạo đối tượng giống tạo đối tượng khác Hãy xem thứ 12 nhé!

Lấy liệu

Dưới ví dụ Thay sử dụng new Object() new LoadVars Sau đối tượng LoadVars tạo

(142)

myVars = new LoadVars();

Với đối tượng LoadVars, làm việc, gởi lấy liệu Để lấy liệu, sử dụng câu lệnh load Cái cần đường dẫn đến nơi chứa liệu:

CODE

myVars.load("myURL.txt");

Ví dụ hoạt động giống câu lệnh LoadVariables thứ 10 Tuy nhiên, câu lệnh LoadVariables lấy thay liệu level với câu lệnh mà thơi Hãy tưởng tượng, có file chứa liệu sau:

CODE

name=George&ID=47

Gởi liệu

Với đối tượng LoadVars, gởi liệu lên Server Trước hết, đưa liệu vào đối tượng LoadVars, sau sử dụng câu lệnh send để gởi liệu

CODE

myVars = new LoadVars(); myVars.name = "George"; myVars.ID = 47;

myVars.send("serverprogram.cgi", "_self");

Đoạn code tạo đối tượng LoadVars tên myVars, đưa hai thuộc tính vào đối tượng myVars Sau đó, gởi liệu lên Server, xác đến chương trình CGI tên echo.cgi

(143)

có thể thay giá trị khác biết

Nhưng câu lệnh sendAndLoad Câu lệnh ghép câu lệnh send load Có nghĩa đối tượng LoadVars gởi liệu lên Server, sau lấy giá trị trả

CODE

mySendVars = new LoadVars(); myLoadVars = new LoadVars(); mySendVars.name = "George"; mySendVars.ID = 47;

mySendVars.sendAndLoad("serverprogram.cgi", myLoadVars);

Trạng thái lấy liệu

Hãy nhớ câu lệnh send load khơng lấy liệu tức Có thể phải đợi thời gian ngắn dài Vì vậy, có nhu cầu theo dõi trạng thái lấy liệu Chúng ta sử dụng liệu sau câu lệnh load sendAndLoad, mà cần phải kiểm tra xem lấy liệu xong chưa

Cách đơn giản dùng movie clip lặp lặp lại để kiểm tra Cũng sử dụng getBytesLoaded getBytesTotal với liệu lớn Dưới ví dụ để kiểm tra việc lấy liệu:

CODE

myLoadVars.onLoad = function(success) { if (success) {

gotoAndStop("load done"); } else {

gotoAndStop("load problem"); }

}

Như đoạn code đối số success nhận hai giá trị true false biết việc nhận liệu xong hay chưa

(144)

Càng ngày XML trở nên thông dụng ứng dụng tin học, Flash, học điều sau:

 XML

 Đối tượng XML Flash

 Phân tích xử lý XML theo phuơng pháo đệ quy (recursive) XML Căn bản

XML đơn giản văn để chứa liệu XML tương tự HTML, dùng thẻ Tuy nhiên, XML khác HTML thẻ HTML ấn định trước cho chức khác nhau, cịn XML khơng

Với XML, bạn tự tạo cho thẻ theo ý bạn để phù hợp cho mục đích riêng bạn

Có thể tạo XML file với trình biên tập văn (như Notepad, Textpad ) đơn giản software chuyên để viết XML (XMLSpy, Epic )

Với Flash MX, bạn dễ dàng truy cập liệu trữ XML, đối tượng XML Flash tự động phân tích văn XML

Trong VNFX có nhiều viết XML (ví dụ giới thiệu XML Flash-Lee) bạn tham khảo thêm

Đối tượng XML

Đối tượng XML Flash gồm có nhiều hàm vằ đặc tính dùng để giúp bạn lấy phân tích kiện XML file cách dễ dàng Bước dùng đối tượng XML tạo phiên XML trước:

CODE

(145)

Phân tích sử lý văn thành XML

Sau tạo phiên XML trên, phiên chưa có cả, nhiên bạn nhanh chóng tạo tài liệu XML cách dùng lệnh parseXML Lệnh nhập chuổi văn bản, phân tích xử lý thành tài liệu XML

CODE

myXML = new XML();

myXML.parseXML("<user><name>Gary</name><ID>47</ID></user>"); Hay bạn viết trực tiếp sau

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>");

Nếu mà chuổi nhập vào tạo thành XML hồn chỉnh bạn dùng đặc tính status để kiểm tra

CODE

myXML = new XML("<user><name>Gary</name><ID>47</user>"); trace(myXML.status);

Output window cho -9 chạy đoạn code -9 có nghĩa thiếu thẻ đóng (end tag), thiếu thẻ </ID> Nếu output window cho -10 bạn thiếu thẻ mở (start tag), có nghĩa việc hồn chỉnh

Lấy liệu từ đối tượng XML

Có nhiều hàm để làm việc Ví dụ, bạn dùng firstChild để lấy nút (node) đối tượng XML:

(146)

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.firstChild);

Output window cho <user><name>Gary</name><ID>47</ID></user> Vì nút đối tượng XML Nếu xâu vào lần với firstChild

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.firstChild.firstChild);

Kỳ output window cho <name>Gary</name>, phần tử name nút user

Ngoài cách ra, cách dùng childNodes, ma trận của nút Cùng ví dụ dùng sau với chidlNodes

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.childNodes[0].childNodes[0]);

Dưới nút name, nút nút name, dùng cách để lấy nút đó:

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.childNodes[0].childNodes[0].childNodes[0]);

và output window cho chữ Gary Đây nút văn (text node) nút name Nhìn tưởng tận rồi, xuống sâu nữa, nút cuối cùng, bạn muốn lấy giá trị chuổi văn bạn thêm bước sau:

(147)

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue);

Nếu bạn muốn lấy ID nút thứ thay đổi sau:

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); trace(myXML.childNodes[0].childNodes[1].childNodes[0].nodeValue);

* Để giải thích thêm đoạn code trên, bạn dùng childNodes kết sẻ đối tượng, cịn bạn dùng nodeValue chuỗi Bạn thử bẳng đoạn code viết

CODE

myXML = new XML("<user><name>Gary</name><ID>47</ID></user>"); myVar1 = myXML.childNodes[0].childNodes[0].childNodes[0];

myVar2 = myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue; trace ("myVar1: " +typeof(myVar1));

trace ("myVar2: " +typeof(myVar2));

và output window cho bạn thấy rõ, law đối tượng chuỗi

Tự tạo XML từ "tay trắng"

Không biết dịch câu cho nghĩa với "Creating XML from Scratch" đành dịch

(148)

Để minh hoạ, tạo XML tương tự với lệnh vừa đề cập

CODE

myXML = new XML();

newElement = myXML.createElement("user"); myXML.appendChild(newElement);

newElement = myXML.createElement("name"); myXML.childNodes[0].appendChild(newElement); newText = myXML.createTextNode("Gary");

myXML.childNodes[0].childNodes[0].appendChild(newText); newElement = myXML.createElement("ID");

myXML.childNodes[0].appendChild(newElement); newText = myXML.createTextNode("47");

myXML.childNodes[0].childNodes[1].appendChild(newText);

Nếu bạn muốn thay đổi giá trị text node, bạn cần dùng nodeValue

CODE

myXML.childNodes[0].childNodes[1].childNodes[0].nodeValue = 53; Thuộc tính

Các thành phần XML có thuộc tính (attribute) Trong gặp rắc rối cách dịch attribute property, chữ tiếng việt dịch thuộc tính, đặc tính mà tiếng anh khác thật rắc rối xin dùng tiếng Anh nhe. Attribute gồm có từ khố giá trị từ khố đó, dùng để định rõ thành phần Ví dụ, đoạn XML dây với attribute type làm rõ nghĩa thành phần name hơn, ("alias" bí danh)

CODE

<user>

(149)

<ID>47</ID> </user>

Nếu bạn muốn đưa đoạn code vào XML object phải đổi dấu " (ngoặc kép) thành dấu ' (ngoặc đơn)

CODE

trace(myXML.childNodes[0].childNodes[0].attributes.type); Còn cách cho kết dùng []

CODE

trace(myXML.childNodes[0].childNodes[0].attributes["type"]);

Và bạn thay đổi giá trị attribute, hay thêm attribute sau:

CODE

myXML.childNodes[0].childNodes[0].attributes["type"] = "real"; Với câu trên, attribute type chưa có tạo

(trong sách đoạn code tác giả viết lộn type alias, bạn so sánh sách và thấy khác biệt, source file khơng xác, các bạn cần kiểm tra lại)

Khác với node, attribute truy cập ma trận (array) nên bạn dùng lệnh length hay dùng [] với index number Nhưng bạn dùng vịng lặp for in để truy cập attribute node.

CODE

myXML = new XML("<user><name type='alias' validity='verified'>Gary</name> <ID>47</user>");

(150)

trace(attr+": "+myXML.childNodes[0].childNodes[0].attributes[attr]); }

output window cho ra: alias verified Thêm vài AS XML

Bạn cần biết thêm số điều đối tượng XML Nhất điểm sau, phần đối tượng XML đối tượng XML riêng biệt Ví dụ bạn lấy node đối tượng XML quy thành biến

CODE

myXML = new XML("<user><name>Gary</name><ID>47</user>"); thisUser = myXML.childNodes[0];

thisUserName = thisUser.childNodes[0];

thisUserNameText = thisUserName.childNodes[0].nodeValue; thisUserID = thisUser.childNodes[1];

thisUserIDText = thisUserID.childNodes[0].nodeValue;

Bạn biết số node trong node khác bẳng thuộc tính length childNodes Ví dụ, user node có node trong, bạn biết với đoạn code sau:

CODE

myXML = new XML("<user><name>Gary</name><ID>47</user>"); trace(myXML.childNodes[0].childNodes.length);

Ngồi việc có tểh tìm giá trị node văn nodeValue, bạn bíết tên thành phần (hay thẻ) với nodeName Ví dụ bạn lấy tên thành phần (thẻ) user name sau:

CODE

(151)

Bạn biết node thành phần XML node văn (text node) với thuộc tính nodeType Nếu nodeType có thành phần XML có nhiều thành phần node đó, node node văn

Giờ thứ 20 : Kỹ thuật in

Không phức tạp trình duyệt Server Cominucation, in ấn cách mà FLash truyền liệu

Khả in ấn FLash hữu ích cho phép xây dựng văn mà người sử dụng in nội dung từ file flash bạn.Đây thường lựa chọn tốt dựa vào hàm in ấn trình duyệt

Trong thứ 20 :

- Học cách thiết lập movie bạn cho việc in ấn - Học cách sử dụng lệnh in

- Tạo biểu mẫu in I> Thiết lập cho movie có khả in:

1-Bạn cần làm vài việc với movie trước sử dụng lệnh in Action Script Thật không may,những lệnh in không linh hoạt Nếu sử dụng chúng mà khơng có chuẩn bị , Flash in toàn nội dung movie, frame

Và thường điều mà bạn khơng muốn Có bạn muốn in frame tại, frame movie riêng, đoạn gồm nhiều frame Nhưng bạn muốn in hết toàn

2 - Đặt tên cho frame

Bạn định frame in ký hiệu "#p" Nếu ký hiệu khơng đặt lên frame Flash in tồn movie bạn Ngược lại, bạn đặt từ hai ký hiệu trở lên movie bạn flash in tất frame

(152)

*Chú ý: Khi bạn đặt từ hai ký hiệu in trở lên, test movie, Flash xuất lời cảnh báo : "WARNING : Duplicate layer "

Đó điều rủi ro xảy ra, không ảnh hưởng đến movie bạn bạn sử dụng label "#p" câu lệnh "gotoAndStop" lệnh tương tự

3- Lên kế hoạch in

Bạn cần phải suy nghĩ lên kế hoạch cho movie bạn muốn movie có khả in Vì khơng thể in frame nên bạn

cần tạo frame có khả in Chú ý thứ tồn movie bạn in Nó bao gồm nút Print ( để nhấn vào thực lệnh in), movie có tồn

Vì cần phải có frame chứa nút Print, frame khác tương tự khơng có nút Print yếu tố khôgn

cần thiết khác Frame thứ hai dặt nhãn "#p"

Bạn bố trí cách sử dụng timeline Ví dụ bạn có menu nút Prin hai layer riêng biệt, mà cần có

trong nội dung biểu mẫu in Những layer bạn không muốn in khơng cần kéo chũng sang frame có nhãn "#p"

(153)

Ngược lại, hình hai nội dung mà người duyệt web không thấy được, hình Frame đặt tên "#p"

bạn thấy timeline.Layer Buttons không sử dụng keyframe giống frame Ngồi việc chặn nút Print khơng đựoc in ra,

(154)

Bây bạn biết làm để chuẩn bị cho biểu mẫu in, học AS cần thiết

II> Các câu lệnh

Có hai lệnh in sử dụng Chúng có khác biệt nhỏ, hoạt động giống

1- Print

Lệnh thứ

QUOTE

Print

Lệnh bao gồm hai tham số Tham số thứ đối tượng để in Thương timeline chính, "_root" Bạn sử dụng

(155)

Tham số thứ hai ba tuỳ chọn sau :

QUOTE

bframe

QUOTE

bmovie

QUOTE

bmax

Các tham số giúp FLash co dãn văn in theo ý người sử dụng Flash co dãn văn in tới kích thước

của trang giấy mà khơng bóp méo văn Ví dụ frame in có kích thước 550x400, chiều ngang phóng to tới kích thước 550px

chiều dọc scale theo tỷ lệ

Khi sử dụng tuỳ chọn "bframe", frame tự scale để lấp đầy kích thước trang Nếu frame thứ có nội dung với kích thước 550x400

nhưng frame thứ hai chứa nội dung có kích thước 275x200, frame thứ hai tự động scale gấp đơi kích thước ban đầu

khi sử dụng tuỳ chọn "bmax", Flash kiểm tra toàn frame in để xác định xem frame có kích thước lớn Các frame

cịn lại scale dựa kích thước frame lớn nhất, tính theo tỷ lệ Điều taọ nên frame có kích thước tỷ lệ với

Ví dụ, frame lớn có kích thước 550x400, lấp đầy trang in Frame khác có kích thước 275x200, chiếm nửa trang in

Tuỳ chọn cuối "bmovie", trường hợp bạn cần phải làm thêmm việc nhỏ nữa, tạo frame có chưa khung

Khung xác định kích thước lớn in văn (bằng kích thứoc khung) Bạn phải đặt tên frame với ký hiệu

"#b" Và flash sử dụng kích thước khung để scale tồn frame cịn lại Nếu có phần văn nằmg khung in

(156)

Sau ví dụ lệnh "Print" :

QUOTE

on(release) {

print(this,"bframe"); }

Như bạn thấy, tuỳ chọn coi chuỗi đặt dấu "" 2-PrintAsBitmap

Câu lệnh làm việc tương tự lệnh Print với hai tham số tương tự

Điều khác biệt lệnh Print gửi đối tượng đồ hoạ font chữ tới máy in Sau đó, máy in xây dựng lại vector nội dung để in

Ngược lại, PrintAsBitmap chuyển toàn nội dung thành ảnh bitmap lớn gửi tới máy in

Điểm thuận lới PrintAsBimap độ suốt văn in Nếu bạn có đối tượng đồ hoạ bán suốt,

chắc có ưu điẻm chắn bạn cần đến chức in này, đồng thời hoạt động tốt với nhiều loại máy in

Lệnh in văn in có tính thẩm mỹ cao, đường cong smooth chữ rõ ràng in Nó nhanh

khi in qua mạng

Nguyên tác chung sử dụng lệnh PrintAsBitmap bạn thật chắn kết giống nội dung hiển thị hình

Sử dung Print văn khơng cần độ xác cao bạn xây dựng movie để điều khiển môi trường mạng nội

Chú ý: Nếu bạn sưe dụng movie qua internet, lệnh in làm việc tất frame movie load xuống

Thao tác : Tạo biểu mẫu in

(157)

điền vào, gửi Chúng ta sử dụng máy tính, lại phải kiếm bút bàn để viết ?

Vì không tạo biễu mẫu cho phép điền thơng tin vào, sau in vời đầy đủ nội dung nhập vào

Chúng ta làm ví dụ đơn giản này, thấy chúng thuận tiện nhiều so với biêt mẫu html yêu cầu người sử dụng in toàn nội dung site

Bạn hồn tồn điề khiển in ra, thứ linh tinh trang web bỏ qua yếu tố email address thêm vào 1- Tạo movie

(158)

3-Đặt tiêu đề cho trường lên phía nhập liệu

4-Tạo tiêu đề cho Form Chú ý,hai loại tiêu đề đặt hai layer riêng biệt 5-Tạo nút Print đặt layer tên Buttons

6-CHèn đoạn mã sau cho button :

QUOTE

on (release){

print (this, "bmax"); }

7- Thêm Frame thứ hai cho movie, kéo Title Bar Content sang frame

(159)

thứ hai

8- Trong frame thứ hai layer Title, đặt tiêu đề khác Ví dụ, frame thứ "Fill out that application" frame thứ hai cần Appilcation

(160)

10- Thêm layer tên Signature Đặt keyframe frame thứ hai layer Thêm đường ngăn cách địa frame Nếu làm frame layer khơng có gì, nội dung tồn frame

11- Thêm layers tên Frame Labels Đặt hai keyframe Keyframe thứ 2, đặt ký hiệu "#p" Keyframe thứ chèn code

QUOTE

stop();

(161)

Tóm tắt

Để in frame movie bạn cần phải đặt label cho chúng "#p" Bạn đặt tên cho nhiều frame movie

Mọi thứ frame "#p" in Bạn trang trí tuỳ thích biểu mẫu in ra, trừ yếu tố menu

Bạn dụng lệnh "Print" để in frame sử dụng vector shape để gứi tới máy in Tuy nhiên, cần in đối tượng đồ hoạ bán suốt chắn

tất biểu mẫu in giống nhau, bạn sử dụng lệnh PrintAsBitmap Giờ thứ 21: Sử dụng component, Using component

ActionScript cho Component kèm Flash

Có component gắn liền kèm theo chương trình Flash: CheckBox, ComboBox, ListBox, PushButton, RadioButton, ScrollBar, ScrollPane

Để thêm component vào movie bạn, bạn click đúp lên component bảng Component, nhấn kéo component vào stage

PushButton

Click kéo component PushButton vào stage tạo instance (thể hiện) component PushButton stage Khi bạn thêm số phần tử Library vào movie Rất may phần tử cất folder gọn Library (thư viện), chúng không ảnh hưởng đến công việc bạn

Component PushButton stage trông đơn giản: khung với từ "PushButton"

Bạn nhớ bật tính Live Preview (xem trước) Flash cách chọn Control ->Enable Live Preview

(162)

(nút nhấn)

Ngoài bạn đặt cho component instance name (tên minh họa) testButton (kiểm tra nút)

Bây tất công việc phải làm viết hàm buttonPressed Dưới ví dụ đơn giản Hàm gửi vài dòng text cửa sổ Output:

ActionScript

function buttonPressed(buttonInstance) { if (buttonInstance == testButton) { trace("Test Button Pushed."); } else {

trace(buttonInstance._name); }

}

Mỗi hàm quản lý nút chuyển tham số: tham chiếu đến nút gọi hàm Vì bạn kiểm tra instance có phải có tên testButton hay khơng Hàm ví dụ chuyển thông báo "Test Button Pushed" nút nhấn testButton, in tên minh họa nút nút bị nhấn testButton

Bạn xem ví dụ mẫu movie 21pushbutton.fla

CheckBoxes

Component CheckBox (hộp kiểm) tương tự mà tạo 15 (anh em dịch sau nhé)

(163)

Trong ví dụ movie 21checkboxes.fla, tơi tạo hộp kiểm (CheckBoxes) Nếu bạn chọn component chúng mở bảng Properties, bạn thấy có nhiều thơng số so với component PushButton

Bổ sung vào thông số Label Change Handler, bạn có Initial Value (giá trị ban đầu) Label Placement (sắp xếp nhãn) Thông số Initial Value true false, tùy thuộc vào việc bạn muốn hộp kiểm ban đầu đánh dấu hay không Thông số Label Placement cho phép bạn xếp nhãn bên phải trái (right left) so với ô kiểm Right xếp mặc định Nếu bạn chuyển thành left, dòng chữ ghi nhãn hộp kiểm xuất bên trái ô

Trong movie mẫu, đặt tên cho instance CheckBox option1, option2, option3 Tôi đặt nhãn (label: phần text bên cạnh ô kiểm) Option One, Option Two, Option Three Thông số Change Handler instance đổi thành changeOptions

Tơi đặt hàm changeOptions timeline Hàm thực thi hộp kiểm CheckBox click vào Nó gửi tên trạng thái CheckBox cửa sổ Output

ActionScript

function changeOptions(checkBoxInstance) {

trace(checkBoxInstance._name+": "+checkBoxInstance.getValue()); }

Trong 21checkboxes.fla, thêm vào component PushButton Nút đặt tên doneButton gọi hàm buttonPressed Hàm lặp lặp lại với tất CheckBox gửi trạng thái chúng (được đánh dấu hay chưa) cửa sổ Output

ActionScript

(164)

trace("Option One: "+option1.getValue()); trace("Option Two: "+option2.getValue()); trace("Option Three: "+option3.getValue()); }

}

Thay gửi kết cửa sổ Output, hầu hết bạn muốn sử dụng chúng dạng khác Ví dụ, bạn đặt chúng đối tượng LoadVars để chúng gửi tới server

RadioButtons

RadioButtons giống CheckBoxes, ngoại trừ việc chúng xếp thành nhóm Tại thời điểm, bạn chọn nút RadioButton nhóm

File mẫu 21radiobuttons.fla có ba component RadioButtons Nếu bạn chọn nút mở bảng thuộc tính (Properties panel) cho nút, bạn nhìn thấy component có nhiều thơng số so với component CheckBox hay PushButton

Thêm vào thông số bạn thấy component CheckBox hai thông số Group Name (tên nhóm) Data (dữ liệu) Thơng số Group Name xác định xem RadioButton thuộc nhóm Trong movie mẫu, ba RadioButtons thiết đặt thông số firstGroup Nếu có nhóm nút thứ hai với tên khác, hai nhóm xem độc lập với định RadioButton bật

Thông số Data tùy chọn bạn sử dụng đoạn mã Bạn truy cập (access) hàm getData() Bạn lưu trữ lệnh mà đoạn mã bạn thực thi nút radio chọn

Trong movie mẫu, ba RadioButtons đặt tên choice1, choice2, choice3 Nhãn ba nút Choice One, Choice Two, Choice Three

(165)

nào thiết lập Đoạn script lặp lặp lại với ba nút để tìm kiếm nút trả true từ hàm getState() Điều nghĩa nút RadioButton bật

ActionScript

function buttonPressed(buttonInstance) { if (buttonInstance == doneButton) { var choice = "none";

for(i=1;i<=3;i++) {

if (this["choice"+i].getState()) { choice = this["choice"+i]._name; }

}

trace("Choice: "+choice); }

}

ListBox

Một ListBox (hộp danh sách) phương pháp đơn giản cho phép người dùng lựa chọn nhiều tùy chọn Một ListBox đặt thiết lập CheckBoxes RadioButtons Nó đặc biệt hữu ích bạn có nhiều lựa chọn khoảng trống hình có hạn

Một khung danh sách trường text cuộn thực tế Mỗi dòng tương ứng với lựa chọn riêng biệt người sử dụng Nếu có nhiều lựa chọn vùng mà khung danh sách hiển thị người dùng cuộn lên cuộn xuống để xem hết mục danh sách

(166)

Thêm vào đó, bạn phải thiết đặt thơng số Labels (nhãn) Tuy nhiên, giá trị đơn mà mảng giá trị Flash có giao diện đặc biệt (special interface) cho việc nhập giá trị Khi bạn click tham số Labels bảng Properties, bạn bắt gặp hộp thoại cho phép bạn nhập vào mảng mục (item) cho thơng số khác

Bạn có tham số Data (dữ liệu) để tạo mảng liệu Thông số Data này, giống thông số data dùng với nút radio, cho phép đoạn mã bạn lấy thông tin bổ sung lựa chọn mà người dùng chọn Tuy nhiên, thông số khơng bắt buộc phải có

Trong movie mẫu 21listbox.fla, đặt component ListBox với ba lựa chọn hình Chúng thiết đặt chọn nhiều dòng Khi người dùng click lên dòng, hàm listBoxChange gọi Điều xác định thơng số Change Handler Hàm cho bạn biết dòng (lựa chọn nào) vừa chọn:

ActionScript

function listBoxChange(listBoxInstance) { trace(listBoxInstance.getValue()); }

Trong movie mẫu có component PushButton Khi click, thực thi hàm Nó sử dụng hàm getSelectedItems() để lấy mảng lựa chọn (choices) chọn list box Mỗi mục chọn mảng đối tượng với thuộc tính label data Vì khơng sử dụng thuộc tính data hộp danh sách (list box), nên thay vào lấy nhãn (label)

ActionScript

(167)

for(var i=0;i<items.length;i++) { trace(items[i].label);

} } }

Bạn thêm bớt dịng từ list box cách sử dụng ActionScript Ví dụ, addItem thêm lựa chọn bổ sung vào list box

ActionScript

myListBox.addItem("Choice Four");

Bạn dùng addItemAt, removeItemAt, replaceItemAt để thay đổi list box ActionScript

ComboBox

Một combo box giống menu kéo xuống (pull-downl menu) người dùng gõ vào giá trị

May thay, bạn tắt tùy chọn hiệu chỉnh giá trị Khi combo box menu pull-down bình thường Thơng số để làm điều Editable (có thể hiệu chỉnh) hộp thoại Properties Bổ sung cho tham số đó, bạn cung cấp mảng chứa nhãn (Labels) liệu (Data)

Một thông số khác combo box Row Count (số dịng) Các combo box nhỏ list box Khi người dùng click vào, chúng trải rộng thành danh sách lựa chọn Nếu số lựa chọn vượt giá trị Row Count, cuộn xuất bên phải cho phép người dùng cuộn lên xuống để lựa chọn

(168)

lớn số dịng hiển thị xuất thêm cuộn

Khi người dùng chọn lựa chọn combo box, quản lý Click Handler gọi Dưới hàm đơn giản cho bạn biết nhãn combo box chọn:

ActionScript

function comboBoxChange(comboBoxInstance) { trace(comboBoxInstance.getValue());

}

Bạn dùng getSelectedIndex() để lấy mục (tính từ 0) mục chọn

Movie mẫu 21combobox.fla ví dụ component ComboBox

ScrollPane

Hai component khác hẳn so với component Chúng không dùng phép người dùng lựa chọn, dùng để hiển thị lượng thông tin lớn khoảng nhỏ (cuộn mà lị)

Component ScrollPane (ơ cuộn) gồm có cuộn dọc, cuộn ngang vùng hiển thị hình chữ nhật Thơng số component Scroll Content (cuộn nội dung) Đây tên liên kết (Linkage name) cho movie clip Khi bạn chạy movie, movie clip copy từ Library đặt vào vùng hiển thị cuộn Sau cuộn cho phép người dùng nhìn thấy phần khác movie clip

Bạn xem ví dụ file 21scrollpane.fla

(169)

Mặc dù component ScrollPane khơng địi hỏi ActionScript để làm việc, có nhiều hàm mà bạn dùng để xác định xem phần movie clip xem để thay đổi chiều rộng (width) chiều cao (height)

Bạn dùng bảng Properties để thay đổi chiều rộng chiều cao cuộn Khi bạn làm việc đó, ô cuộn trông bị méo mó Flash, no star where, ngon lành bạn chạy movie

Một lệnh ActionScript hữu ích loadScrollContent Lệnh sử dụng địa URL hiển thị movie clip ngồi vào cuộn

ActionScript

myScrollPane.loadScrollContent("myMovieClipFile.swf");

Ơ cuộn dùng trình duyệt hình ảnh

ScrollBar

Component cuối ScrollBar Component thêm cuộn vào trường text Bạn dùng component mà không cần dùng code ActionScript Chỉ việc kéo thả component ScrollBar vào trường text (text field), tự thêm vào trường text

Component ScrollBar có thuộc tính Actionscript sử dụng Ví dụ, bạn sử dụng getScrollPosition() để lấy vị trí cuộn setScrollPosition() để thay đổi

Thực hành với Components

Bây phối hợp component khác để tạo form nhập liệu: CheckBox, RadioButton, ComboBox, ListBox, PushButton components

(170)

Tạo ba component CheckBox Đặt tên cho chúng checkbox1, checkbox2, checkbox3 Nhãn chúng là: Macintosh, Windows, Linux

Tạo ba component RadioButton Đặt tên cho chúng radiobutton1, radiobutton2, radiobutton3 Nhãn chúng

Tạo ComboBox component Đặt tên cho combobox Thêm vài nhãn (label) vào để người dùng chọn lựa

Tạo ListBox component đặt tên listbox Thêm nhãn vào tuỳ bạn Đừng lo lắng thứ tự chúng xếp lại sau Thiết đặt thông số ListBox Multiple Selections thành false Dùng bảng Properties để tạo cho khung danh sách (list box) rộng 200 cao 200 pixel

Thêm PushButton component Đặt cho nhãn Done thơng số điều khiển Click Handler buttonPressed

Thêm dòng sau vào frame script Nó xếp lại nhãn mục component ListBox

ActionScript

listbox.sortItemsBy("label","Asc");

Lệnh sortItemsBy làm việc tốt với component ComboBox Bạn dùng "label" "data" cho thơng số Điều tùy thuộc vào nhãn (label) hay trường liệu (data) sử dụng để xếp Thơng số thứ hai "Asc" (sắp xếp theo thứ tự tăng dần) "Desc" (giảm dần)

Component PushButton gọi hàm buttonPressed Chúng ta tạo hàm theo đoạn nhỏ để xử lý phần form

(171)

getValue() có phải true khơng Nếu true, nhãn check box thêm vào mảng Khi vịng lặp kết thúc, mảng own chứa lựa chọn mà người dùng làm với check box

ActionScript

function buttonPressed(buttonInstance) { if (buttonInstance == doneButton) {

// sưu tập mảng CheckBoxes chọn own = new Array();

for(var i=1;i<=3;i++) {

if (this["checkbox"+i].getValue()) {

own.push(this["checkbox"+i].getLabel()); }

}

trace("Computers Owned: "+own);

Đoạn mã kiểm tra tất component RadioButton ghi nhớ xem component bật (đã chọn):

ActionScript

// xác định RadioButton lựa chọn favorite = "none";

for(var i=1;i<=3;i++) {

if (this["radiobutton"+i].getState()) {

favorite = this["radiobutton"+i].getLabel(); }

}

trace("Favorite: "+favorite);

(172)

ActionScript

// lấy giá trị ComboBox ComboBox nextPurchase = comboBox.getValue(); trace("Next Purchase: "+nextPurchase);

Để check (kiểm) nhiều lựa chọn list box, bạn cần lặp từ đầu đến cuối mảng trả getSelectedItems() Sau bạn cần xem xét thuộc tính label mục chọn (item)

Đoạn mã sau làm điều xây dựng mảng chứa nhãn lựa chọn:

ActionScript

// sưu tập lựa chọn ListBox uses = new Array();

items = listbox.getSelectedItems(); for(var i=0;i<items.length;i++) { uses.push(items[i].label); }

trace("Uses: "+uses); }

}

Nếu thực bạn làm điều này, nên sử dụng đối tượng có tính cấu trúc sử dụng lệnh trace Cho ví dụ, bạn tạo đối tượng LoadVars để sau gửi thơng tin đến máy chủ

Thay đổi kiểu dáng (Style) Component

Các component Flash vốn trông đẹp Nhưng tất nhà phát triển Flash bắt đầu sử dụng chúng, tất Flash movie trông na ná

(173)

component cách sử dụng ActionScript

Global Customization (tuỳ biến chung)

Sử dụng đối tượng globalStyleFormat, bạn tùy chỉnh giao diện cho tất

component lần Đây ví dụ thay đổi màu chữ tất text tất component thành màu xanh da trời (blue):

ActionScript

globalStyleFormat.textColor = 0x0000FF; globalStyleFormat.applyChanges();

Lệnh applyChanges chấp nhận thay đổi Ngồi ra, bạn thiết đặt nhiều thuộc tính khác Dưới số thay đổi chi tiết:

ActionScript

globalStyleFormat.textColor = 0x0000FF; globalStyleFormat.textFont = "Arial"; globalStyleFormat.textSize = 18; globalStyleFormat.textBold = true; globalStyleFormat.applyChanges();

Bạn thay đổi thành nhiều giá trị font chẳng hạn Số mục thay đổi kiểu dáng component dài để liệt kê hết Bạn thay đổi màu sắc kiểu dáng dấu kiểm CheckBoxes, hình trịn RadioButton, mũi tên cuộn ScrollBars, màu nền, màu sắc vùng tô sáng (highlight colors), màu sắc mục chọn, v.v Hãy xem chương trình Flash bạn để biết đầy đủ thông tin danh sách

Grouped Customization (tùy chỉnh theo nhóm)

(174)

bạn tạo cho đối tượng bạn kiểu dáng (style) riêng biệt dùng vài component mà bạn định

Bạn thực điều cách tạo đối tượng FStyleFormat Khi bạn làm điều này, đối tượng bạn có thuộc tính giống đối tượng globalStyleFormat

Ví dụ, bạn tạo đối tượng kiểu dáng (style object) thiết đặt màu sắc thành đỏ tươi đây:

ActionScript

myStyle = new FStyleFormat(); myStyle.textColor = 0xFF00FF;

Các yếu tố khác style khơng thiết đặt xác đối tượng style Vì bạn áp dụng style cho component, mà diện mạo style không thay đổi

Để áp dụng kiểu dáng style vào component, sử dụng lệnh addListener:

myStyle.addListener(radiobutton1);

Bạn nghĩ kỳ quặc sử dụng với addListener, Hãy hiểu rằng: bạn báo cho component để tiếp nhận (listen) đối tượng style

Single Component Customization (tùy chỉnh component riêng lẻ)

Bạn thiết đặt cách xác thuộc tính style Tuy nhiên, bạn khơng thể làm điều cách sử dụng cú pháp chấm (dot) gọn đẹp bạn mong muốn Thay thế, bạn cần phải dùng lệnh setStyleProperty Lệnh đặt thuộc tính style dạng chuỗi tham số giá trị mà bạn muốn thiết đặt cho tham số thứ hai

(175)

checkbox1.setStyleProperty("textColor",0xFF0000);

Bằng cách sử dụng ba phương pháp thiết đặt style cho component, bạn tùy chỉnh component theo mong muốn

Giờ thứ 22: Điều khiển âm với ActionScript

Có hai cách để bạn cho âm vào đoạn phim Flash Cách thứ đặt vào timeline Việc không cần phải sử dụng mã Cách thứ hai sử dụng

ActionScript để chơi đoạn nhạc lưu trữ Library Tìm hiểu cách truy xuất âm với ActionScript:

Việc kết nối chơi nhạc:

Điều mà bạn cần trước chơi đoạn nhạc với ActionScript kết nối đến Bạn "Import" file nhạc vào Library, bấm phải chuột chọn "Linkage", đánh dấu vào phần export Bạn đặt tên "Identifier" khác cho đoạn nhạc thay để tên file nhạc

Ví dụ, bạn "import" file nhạc "mysound.wav", xuất Library với tên mysound.wav Khi bạn chọn Linkage, đánh dấu export, đặt tên "Identifier" "mysound.wav", bạn sửa thành tên gi bạn muốn(vd: nhac1) Đó tên mà bạn sử dụng ActionScript

Để chơi đoạn nhạc ActionScript, bạn phải làm ba bước: Đầu tiên tạo đối tượng "Sound" :

ActionScript

mySound = new Sound();

Thứ hai, bạn cần gắn đoạn nhạc thư viện vào đối tượng "Sound" này:

(176)

"Identifier"

Cuối cùng, bạn lệnh cho đối tượng "Sound" bạn chơi đoạn nhạc:

ActionScript

mySound.start();

Và đoạn đơn giản đặt vào Button để chơi đoạn nhạc từ Library:

ActionScript

on (release) {

mySound = new Sound();

mySound.attachSound("poof.wav"); mySound.start();

}

Bạn tham khảo ví dụ đơn giản file "22playsound.fla" kèm theo sách

Bạn xem qua phương pháp phức tạp tí file

"22playsoundfunction.fla" Trong file Flash này, có function tên "playsound" đặt timeline "function" bao gồm tất mã mà bạn cần để chơi đoạn nhạc đơn giản

ActionScript

function playSound(soundName,balance) { var mySound = new Sound();

mySound.attachSound(soundName); mySound.start();

}

(177)

function này:

ActionScript

on (release) {

playSound("poof.wav"); }

Câu lệnh "start"

Câu lệnh "start" ví dụ sử dụng nhiều cách Bạn thêm hai tham số vào để thay đổi cách mà đoạn nhạc chơi

Tham số thứ bạn thêm gọi "offset" Nó giúp bạn chơi nhạc từ vị trí bạn muốn chơi lại từ đầu Ví dụ, dịng lệnh bắt đầu chơi từ vị trí thứ 1000 miligiây đoạn nhạc(1 giây sau bật):

ActionScript

mySound.start(1000);

Tham số thứ hai câu lệnh "start" số lần lặp lại đoạn nhạc Ví dụ, bạn muốn bắt đầu nhạc vị trí sau giây lặp ba lần, câu lệnh sau:

ActionScript

mySound.start(1000,3);

Bắt đầu nhạc vị trí từ đầu lặp ba lần:

ActionScript

mySound.start(0,3);

(178)

(Identifier) đoạn nhạc Nếu không, lệnh "stop" ngừng tất đoạn nhạc chơi

ActionScript

mySound.stop("poof.wav"); Điều chỉnh âm lượng

Bạn sửa đổi đoạn trước chơi số câu lệnh Các câu lệnh điều chỉnh âm lượng đoạn nhạc, tất loa hay

Lệnh "setVolume" cách điều chỉnh đơn giản nhất, bạn cần cho tham số từ đến 100 bạn vặn to, nhỏ đoạn nhạc:

ActionScript

mySound.setVolume(50);

Trong file "22playsoundvolume.fla" bao gồm nút Play bốn nút khác để điều chỉnh âm lượng lần từ 0, 10, 50 cuối 100 Nút Play chơi đoạn nhạc 100 lần nên bạn thử điều chỉnh âm lượng lúc chơi nhạc

Chú ý việc bạn điều chỉnh âm đoạn nhạc không liên quan đến đoạn nhạc khác Vì bạn điều chỉnh âm khác nhạc tiếng động

Đối tượng "Sound"

Đối tượng "Sound" có hai thuộc tính mà bạn nên biết đến Thứ "duration" độ dài đoạn nhạc tính miligiây Thứ hai "position" vị trí mà đoạn nhạc chơi, tính miligiây

(179)

Trong file "22tracksound.fla" thể cách dùng "position" "duration" để thể đoạn nhạc Sau bắt đầu, vạch đen chạy theo vị trí đoạn nhạc

ActionScript

onClipEvent(enterFrame) {

// tính xem chơi đoạn nhạc (giá trị từ 0.0 đến 1.0) percentPlayed = thisSound.position/thisSound.duration;

// lấy độ dài

barWidth = _root.bar._width; // đặt vị trí dấu vạch

_root.mark._x = _root.bar._x + barWidth*percentPlayed; }

Khi đoạn nhạc kết thúc:

Bạn sử dụng thuộc tính "position" "duration" để kiểm tra đoạn nhạc hết hay chưa, hai giá trị Tuy nhiên đoạn nhạc lặp nhiều lần hai giá trị cuối đoạn nhạc

Một cách tốt để kiểm tra đoạn nhạc kết thúc dùng "onSoundComplete" Đây function thực thi đoạn nhạc kết thúc hẳn

ActionScript

mySound = new Sound();

mySound.attachSound("mySound.aif"); mySound.onSoundComplete = function () { trace("sound done!");

}

mySound.start();

(180)

Bạn điều chỉnh âm lượng loa to loa khác thông qua lệnh "setPan" Điều giống giàn máy stereo Bạn đặt giá trị từ -100 đến 100 Nếu bạn để -100, tất âm phát bên loa trái, 100 loa phải

ActionScript

mySound.setPan(-100);

Bạn tham khảo file "22monopan.fla" Khi bạn bấm nút "Play" bên trái, loa trái phát ra, bấm nút "Play" bên phải, loa phải phát

Giờ thứ 23: Quản lý streaming cho movie, Managing Movie Streaming

Trong 23 tiến hành bước sau:  Tìm hiểu, giám sát movie load

Làm loader đơn giản

Làm loader phức tạp với loading bar

Load media movie bên vào flash (sound, image) Chúng ta bắt đâu với bước :

Các Movie Flash có tính chất stream Điều có nghĩa frame movie bắt đầu nạp xuống, ko phụ thuộc vào việc frame cuối load xong hay chưa

Bạn ko muốn việc xảy Ví dụ movie bạn đoạn animation ngắn, bạn ko muốn bắt đầu movie load hồn tồn từ web

Có vài cách để bắt movie đợi loading xong Cách thông dụng ta tạo loader frame Đó frame movie Nó quan sát tính chất movie xác định xem nao movie kết thúc việc loading

(181)

Bạn sử dụng điều số trường hợp đơn giản Ví dụ bạn đặt frame lệnh stop();

Ở ta tạo button cho phép người sử dụng tiếp túc Khi người sử dụng click vào btn bạn dùng đoạn script tương tự sau để xác định xem phải làm tiếp theo:

CODE

on (release) {

if (_root._framesLoaded == _root._totalFrames) { play();

} else {

textDisplay = "Wait a few seconds and press again."; }

}

Nếu movie chưa load hết text field mà ta liên kết qua var textDisplay thông báo cho user

Bạn sử dụng kĩ thuật phần movie dài Ví dụ btn nằm Frame 50 để người sử dụng tiếp tục mà 50 frames sẵn sàng Ta dùng đoạn code sau để thực hiện:

CODE

onClipEvent(load) {

_root.textDisplay = "Waiting for the next sequence to load."; _root.stop();

}

onClipEvent(enterFrame) {

if (_root._framesLoaded >= 100) { _root.play();

(182)

Đây phần đầu loader script Tuy nhiên có cách khác xác để giám sát việc loading tính số frames Bạn sử dụng getBytesLoaded and getBytesTotal để tính tổng số file số file load

Đây đoạn script đặt vào mc frame movie Ở frame bạn ý đặt thêm lệnh stop();

CODE

onClipEvent(enterFrame) {

if (_root.getBytesLoaded() == _root.getBytesTotal()) { _root.play();

} }

Ở lần enterFrame điều kiện kiểm tra thỏa mãn tức movie load hồn tồn movie play tiếp tục

Chúng ta tiếp tục tiến hành làm loader đơn giản toàn movie load trước vượt qua frame :

1.Mở file

2.Ở frame đầu ta tạo keyframe 3.Tạo thêm kf frame

Để test loader cách rõ ràng frame nên chứa movie tối thiểu 100 K Cách tốt để tăng dung lượng ta import video

4.Trở lại frame 1, muốn có movie chờ tồn movie load trước tiép tục sang frame -> cho lệnh stop(); vào frame

Ta tạo shape đơn giản convert sang mc tống cổ sang góc hình mà người xem ko nhìn thấy (chuối rừng) Ta cho đoạn script sau vào:

(183)

onClipEvent(enterFrame) {

bytesLoaded = _root.getBytesLoaded(); bytesTotal = _root.getBytesTotal()

percentLoaded = Math.round(100*bytesLoaded/bytesTotal); _root.displayText = "Loading: "+percentLoaded+"%";

if (bytesLoaded == bytesTotal) { _root.play();

} }

đoạn script kiểm tra getBytesLoaded để xem liệu movie kết thúc việc loading chưa Ở ta tính số phần trăm load (percentLoaded) cho hiển thị số qua biến displayText root level

Bạn đừng quên tạo dynamic text field đặt var cho displayText nhe

Sẽ khó kiểm tra bạn test movie với Flash player máy movie bạn chạy nhanh quá, ko kịp nhìn loader Bởi nên publish lên trang web rùi test Hoặc bạn giả thiết lập cai modem 56 K

Nào goto website test bạn thấy trình loading số phần trăm text field Khi đạt đến 100% movie tiếp tục play

Bạn kiểm tra movie bạn với file: 23simpleloader.fla

3.Để cho loader thêm đẹp, tiến hành bước làm loader phức tạp có thêm progess bar :

các bước làm sau: 1.Bắt đầu movie

2.Vẽ hình chữ nhật rộng với border

3.Chọn tồn hình chữ nhật đặt chúng vào mc cách chọn insert convert to mc

4.Click vào mc để edit

5.Tách riêng phần fill border hình chữ nhật làm layer

(184)

trước layer có chứa hình chữ nhật cũ nằm sau

7.Chọn hình chữ nhật này(cai fill) chọn cho màu tối đăt vị trí khớp với border, phía hình chữ nhât cũ

8.Bây ta convert sang mc đặt instance name barFill

Double click vào mc ta chỉnh reg point cho góc tận bên trái

Trở lại movie chính, ta tạo thêm layer Và đặt dynamic text Đặt var cho displaytext, bạn nhớ chọn font chữ đẹp dẹp màu đẹp đẹp chút

Ở movie timeline ta đặt đoạn code sau vào mc chúng ta:

CODE

onClipEvent(load) { // initialize variables bytesLoaded = 0;

bytesTotal = _root.getBytesTotal(); }

Đoạn code enterFrame phải làm nhiều việc Nó có nhiệm vụ theo dõi số bytesLoaded bytesTotal liên tục Frame Biến percentLoaded có giá trị từ đến 100 Và sử dụng để thay đối _xscale Bar Bạn nhớ ta mặc định điểm reg point Bar góc bên trái ko? Chính mà bar dài theo giá trị biến percentLoaded sang phía bên phải

Khi mà số bytesLoaded = số bytesTotal display text thơng báo: "Loading Complete" chuyển movie sang frame

CODE

onClipEvent(enterFrame) { // if there is more to load

if (bytesLoaded < bytesTotal) { // get current amount loaded

(185)

// calculate percentage

percentLoaded = Math.round(100*bytesLoaded/bytesTotal); // if there is still more

if (bytesLoaded < bytesTotal) { // display text

displayText = "Loading: "+percentLoaded+"%"; // set scale of bar

barFill._xscale = percentLoaded; // no more left

} else {

// display complete

displayText = "Loading Complete."; // fill out bar

barFill._xscale = 100; // go to next frame _root.nextFrame(); }

} }

Ko biết hướng dẫn bạn hình dung cách làm chưa Nếu bạn chưa hiểu cbt post thêm hình minh họa vào

Timeline tôt nên phân sau nha:

(186)

-Layer thứ gồm có keyframes fr1 fr2 Ở kf lệnh stop();

Layer thứ ta cho button Người sử dụng click vào button để xem tiếp phần lại movie

Trong btn cho đoạn code sau:

CODE

on (release) { play(); }

-Layer thứ frame thứ chứa movie cần load bạn Các bạn xem thêm file : 23complexLoader.fla

Có lúc bạn cần tạo movie lớn có media ta ko cần phải tạo movie đầy file media mà load file media có sẵn từ bên ngồi Nhờ bạn xây dựng trình diễn lớn cách sử dụng file bên

Để làm điều tìm hiểu bước sau: Thế chỗ movie thời

Cách đơn giản để làm điều bạn chia cắt movie thành phần riêng Khi movie kết thúc ta chuyển đến movie khác Tất bạn cần dùng lệnh loadMovie

Ví dụ, bạn có frame cuối movie dài Khi người xem đến đó, họ click vào button xem movie khác Đoạn code đơn giản sau:

CODE

on (release) {

loadMovie("animation2.swf"); }

(187)

movie có buttons chứa movie khác Việc tạo liên kết movie quan trọng cho user trở lại movie cũ ban đầu

Bạn xem ví dụ file 23movie1.fla để biết thêm làm để trình bày tác phẩm bạn với files có sẵn

Loading a Movie Clip

Với lệnh loadMovie bạn thay chỗ mc mc khác Ví dụ để thay chỗ myMovieClip file otherMovie.swf bạn cần làm:

CODE

myMovieClip.loadMovie("otherMovie.swf);

Khi sử dụng loadMovie bạn dùng getBytesTotal and getBytesLoaded functions để thông báo cho người dùng text progess bar mà làm trình load

Nếu muốn preload movie clip để sẵn sàng lúc cần hiển thị, tạo movie trống, khơng có ngoại trừ câu lệnh stop() Sau load mc vào mc trống (ko hiển thị stage) Khi load hồn tồn movie sẵn sàng frame

Movie file nằm sẵn sàng browser cache user Bây đến đoạn có sử dụng mc lệnh loadMovie làm việc Lúc nhanh file download hồn tồn Sau sử dụng lệnh gotoAndPlay(2) để qua frame

Loading a JPEG

myMovieClip.loadMovie("picture.jpg");

Flash MX cho phép ta khả load file JPEG vào

(188)

địa file JPEG ok:

CODE

myMovieClip.loadMovie("picture.jpg");

mc myMovieClip thay chỗ mc có chứa bitmap image Bạn kiểm tra xem ví dụ file 23loadipeg.fla

Loading a Sound

Có cách để play sound từ file bên Cả sử dụng sound object lệnh loadSound Các sound file cần dạng phổ biến mp3

Sau ví dụ cho cách thứ 1, để chơi event sound Ở toàn sound load vào nhớ trước sau chơi có lệnh start();

CODE

on (release) {

mySound = new sound();

mySound.loadSound("mysound.mp3",false); mySound.start();

}

Flash ghi nhớ lệnh start đưa chí sound bắt đầu download Khi sound load xong play

CODE

on (release) {

mySound = new sound();

mySound.loadSound("mysound.mp3",true); }

(189)

vẫn tiếp tục load Nếu người dùng có kết nối mạng tốt nghe toàn sound load

Ghi bạn ko cần phải sử dụng lệnh start với streaming sound Tuy nhiên bạn cần phải ý sử lí file MP3 Ví dụ bạn sử dụng file nhạc mp3 với 128 Kbps hay 160 Kbps thường dùng để nghe file lớn để stream vói internet, đặc biệt người sư dụng dùng modem 32 Kpsb hay thích hợp ta sử dụng stream Chúng ta tổng kết lại nhe:

Streaming cách tốt giúp sử dụng dễ dàng với movie lớn Ta sư dụng AS để kiểm tra trình loading Bạn giữ movie frame thứ để tiếp tục tồn movie load

Bạn thơng báo cho người dùng q trình loading text thơng báo số % progess bar chẳng hạn

Bạn chia movie thành cách file riêng sử dụng loadMovie để nhảy từ file tới file khác người sử dụng muốn

Các file bên ngồi load vào cách khác Ngồi movie bạn load file ảnh, file nhạc

Một số câu hỏi trả lời sau giúp bạn nắm rõ hơn: Câu 1: ta load mc, unload chúng ko??

-Trả lời: có, lệnh unloadMovie

Câu 2: bình thường flash cần để load trước start??

-Trả lời: frame Bởi bạn cần sử dụng lệnh stop muốn đợi trước tiếp tục

Câu 3: cách để xác định movie load hoàn toàn?? -Trả lời: cách dùng getBytesLoaded == getBytesTotal function cách dùng _frameLoaded property _totalFrames property Ngồi bạn xem thêm viết sau:

Cách tạo preloader đơn giản

http://www.vnfx.com/ipb/index.php?showtopic=2325 Cách tổng quát để tạo loader đẹp:

http://www.vnfx.com/ipb/index.php?showtopic=2921

Ngoài loadMovie, loadSound có nhiều Bạn chịu khó search

(190)

Đây h cuối cùng, thú vị, hy vọng bạn cảm thấy dzui dzẻ vẽ AS CBT ko có kinh nghiệm dịch bài, nhìn vào text dày đặc chữ tối mắt tối mũi nên nhiều chỗ dịch lung tung, theo ý thích có chỗ diễn đạt tối nghĩa, ko bạn thẳng thắn góp ý, đừng thương tiếc

Trong học cách:  Vẽ đường thẳng đường cong Tô màu vùng

Để người sử dụng vẽ với chuột

Đặt hình vẽ movie clip Tạo text fields

1a.Drawing lines

-Để vẽ đường thẳng, việc cần làm định nghĩa giá trị lineStyle, dày nè, rùi có màu độ alpha

CODE

lineStyle(thickness, color, alpha);

Màu (color): giá trị đưa dạng số thập lục phân hexa, ví dụ: 0x000000 màu đen, 0xffffff: trắng , nhìn vào bảng color mixer để biết thêm

Độ suốt(alpha): = 0; max=100;

Độ dày (thickness): độ dày nhỏ 0, cịn lớn bao nhiu cbt ko biết Với độ dày line có độ dày pixel, ta cho giá trị (hairline) có độ dày pixel Tuy nhiên chúng khác chỗ: với hairline thay đổi scale độ dày ko thay đổi Các bạn thử đoạn code sau, thay đổi giá trị độ dày nhé:

CODE

(191)

lineTo(200,200); _xscale=300; _yscale=300;

Nhìn đoạn code ta thấy xuất lệnh:

CODE

moveTo(20,50)

Để vẽ đường thẳng ta cần xác định điểm: đầu cuối Mỗi điểm lại xác đinh với giá trị x y

-> moveTo điểm đầu, điểm đặt bút Như câu ta đặt bút x=20; y=50 > lineTo điểm tiếp đến Ta có x= 200; y=200 Như vẽ đường thẳng nối từ điểm (20,50) đến (200,200)

Chú ý:

1 bạn ko nêu điểm moveTo tự mặc định điểm (0,0)

2 bạn vẽ thêm line với lineTo điểm đặt bút mặc định điểm cuối line trước

Ví dụ để vẽ 500 đường lung tung hình ta có đoạn code đơn giản sau:

CODE

// set line style

lineStyle(2,0x000000,100); // draw 500 lines

(192)

// pick random end point x2 = Math.random()*550; y2 = Math.random()*400; // move to start point moveTo(x1,y1); // draw to end point lineTo(x2,y2); }

Bây bạn thử play trò xem sao, thử thay đổi độ alpha, color or thickness Mọi người thử copy and paste đoạn code sau xem :

CODE

// set line style

lineStyle(2,0x999999,100);

for(var x=-400;x<550;x+=10) {

// draw diagonal strip from left to right moveTo(x,0);

lineTo(x+400,400);

// draw opposite strip moveTo(550-x,0); lineTo(550-x-400,400); }

1b.Drawing Curves

(193)

CODE

lineStyle(3,0x000000,100); moveTo(150,200);

curveTo(275,275,400,200);

Như biết moveTo điểm bắt đầu, anker1 curveTo(control_x, control_y, anker2_x, anker2_y);

Control_point tiếp tuyến điểm anker với đường cong anker2 điểm cuối curve

Các bạn đọc thêm số viết diễn đàn đường cong bezier để hiểu rõ thêm

Chúng ta play tiếp với đoạn code sau:

CODE

lineStyle( 1, 0x0000FF, 100 ); moveTo(200,200);

curveTo(250,200,300,200); curveTo(300,250,300,300); curveTo(250,300,200,300); curveTo(200,250,200,200);

Olala, chúng ko curve mà lại hình vng Ngun nhân cho giá trị control point điểm

Hãy thử thay đổi chút xem có nào:

CODE

var bend = 42; moveTo(200,200);

(194)

sử dụng biến bend để thay đổi control point ta hình méo rùi Về phần plz đọc thêm topic box AS

2 Drawing Filled Areas

Trước hết để tơ màu cho vùng ta cần phải vẽ hình khép kín Sau dùng lệnh beginFill để vẽ:

CODE

beginFill(color of fill, alpha of fill) Ví dụ đoạn code sau:

CODE

lineStyle( 3, 0x000000, 100 ); beginFill( 0xFF0000 );

moveTo(175,100); lineTo(375,100); lineTo(375,300); lineTo(175,300); lineTo(175,100); endFill();

Nếu vùng cắt line lần thứ chỗ ko có màu Dựa vào ta tạo nên số hình thú vị Bạn thử copy đoạn code sau xem chỗ tô màu, chỗ ko :

CODE

lineStyle(3,0x000000,100 ); beginFill(0xFF0000);

(195)

lineTo(155,120); lineTo(345,120); lineTo(192,230); lineTo(250,50); endFill();

Có cách khác tốt để vẽ star, cho phép qui định giá trị ban đầu Bạn thử xem file fla 24betterstar.fla xem

Pause

3.Vẽ với chuột

Phần sách có đoạn code để user vẽ với chuột, thành thật mà nói, bạn đọc đoạn code DS post bên phần Flash hack bạn thấy khác trời vực http://www.vnfx.com/ipb/index.php?showtopic=3007

Nếu bạn đọc đoạn code DS đừng nên đọc tiếp đoạn code hướng dẫn sách làm CBt thấy ko cần thiết phải dịch chỗ trót rùi nên tơn trọng sách, cbt dịch cho đầy đủ

1.Tạo shape đơn giản, convert to mc

2.Copy đoạn code sau vào mc (cbt phân tích kèm)

CODE

onClipEvent (load) {

// cho giá trị cho kiểu line _root.lineStyle(0, 0x000000, 100); }

//khi chuột dzí xuống bắt đầu vẽ onClipEvent(mouseDown) {

(196)

// xác định điểm start để vẽ startX = _root._xmouse; startY = _root._ymouse; _root.moveTo(startX,startY); }

//khi thả chuột ko vẽ onClipEvent(mouseUp) {

// don't draw anymore draw = false;

}

//bắt đầu

onClipEvent (enterFrame) { if (draw) {

//lấy vị trí chuột newX = _root._xmouse; newY = _root._ymouse;

//nếu vị trí khác với vị trí ban đầu if ((newX != startX) or (newY != startY)) { //vẽ line tới vị trí

_root.lineTo(newX,newY); // reset location for new time startX = newX;

startY = newY; }

(197)

Phần có

4.Tạo movie clip riêng cho hình vẽ

Những làm vẽ cách đơn giản stage, có bất lợi bị mc che khuất ko thể di chuyển

Khi đặt vào mc thuận tiện nhiều ta thay đổi _x, _y, rotation, alpha, scale

Để tạo new mc ta dùng lệnh :

CODE

my_mc.createEmptyMovieClip("tên new mc", level nó) Ví dụ :

CODE

this.createEmptyMovieClip("myMovieClip",1); myMoveClip.lineStyle(0,0x000000,100); myMoveClip.moveTo(100,100);

myMovieClip.lineTo(200,200);

Như bạn có mc tên myMovieClip, level 1, có chứa hình vẽ Nếu bạn muốn viết nhanh viết lại sau:

CODE

this.createEmptyMovieClip("myMovieClip",1); with(mymovieClip){

lineStyle(0,0x000000,100); moveTo(100,100);

(198)

Lệnh createEmptyMovieClip cịn có nhiều tác dụng khác ta attach thêm movie vào chép (duplicateMovieClip)

Rùi bi bạn thử tạo mc

Có hướng dẫn vẽ bơng tuyết đẹp sách, nhiên code chia nhỏ thành function dài dịng cơng trong diễn đàn có nhiều đoạn code làm tuyết hay nhiều: trời làm tuyết DS box hướng dẫn thực hành Đặc bịêt hợp với chủ đề dùng 100% AS Raider (tìm mục lục), có đoạn code hay Bởi cbt ko dịch đoạn code sách

Để biết thêm chi tiết xin xem file fla 24snowflakes.fla 5.Textfield

Đây phần cuối cùng, học cách tạo text field sau làm effect flying words

Tạo Text

Để tạo text cần tạo ô text (text field) với lệnh :

CODE

createTextField("text_name", level , vị trí _x, vi trí _y, chiều rộng,chiều dài); Sau text lên text field đó:

CODE

text_name.text = "Nội dung text";

(199)

CODE

//tạo ô chữ tên my , level 0, _x=0, _y=170, width=550, height=60 createTextField("myTextField",0,0,170,550,60);

//text

myTextField.text = "Welcome to VNFX";

// giá trị true sử dụng font add thư viện, false ta sử dụng font mặc định myTextField.embedFonts = true;

//mặc định tính chất text myTextFormat = new TextFormat(); //loại chữ, cỡ, màu, vị trí

myTextFormat.font = "Arial"; myTextFormat.size = 48;

myTextFormat.color = 0x330000; myTextFormat.align = "center";

//liên kết tính chất với ô text myTextField.setTextFormat(myTextFormat);

Chú ý sử dụng embedFont ta cần phải chọn font thư viện click vào góc phải thư viện, chọn font mà bạn muốn, sau click chuột phải, linkage, export, IDname

Nếu bạn muốn tạo Input text cần phải cho type textField input, sau set thêm variable để máy nhận info từ user

(200)

để trang trí cho textField

Lý thuyết có vậy, làm effect flying words

CBT ko dám nhận xét nhiều đoạn code cách làm sách này, nhiên chia nhỏ thành function gây rắc rối, dài dòng cho người đọc, lại cịn phải tạo thêm mc stage, có chỗ hạn chế Thơi đưa

CODE

function createText(n,text) { // create a new movie clip

this.createEmptyMovieClip("text"+n,n); mc = this["text"+n];

// set the text format

myFormat = new TextFormat(); myFormat.font = "Arial";

myFormat.color = 0x000000; myFormat.size = 24;

myFormat.align = "center"; // create a new text field

mc.createTextField("myTextField",1,-100,-20,200,40); mc.myTextField.text = text.toUpperCase();

mc.myTextField.embedFonts = true;

mc.myTextField.setTextFormat(myFormat); // return reference to this movie clip

return(mc); }

function createAllText(textList) { // loop through array of text

ề cách dùng loadVariables() bên box ActionScript (ví dụ giới thiệu XML Flash-Lee) http://www.vnfx.com/ipb/index.php?showtopic=2325 http://www.vnfx.com/ipb/index.php?showtopic=2921 http://www.vnfx.com/ipb/index.php?showtopic=3007

Ngày đăng: 08/04/2021, 17:17

w