Biểu thức điều kiện _yscale == 100 có thể đúng hoặc sai vào lúc chạy. Người ta còn nói “kiểu cách” hơn một chút: biểu thức _yscale == 100 có thể có trị true hoặc false. Nhờ có hàm onClipEvent(mouseDown) của quả banh màu xanh, mỗi khi bạn bấm chuột vào lúc chạy, quả banh đó chuyển đổi qua lại giữa hai trạng thái: được kéo dãn theo phương thẳng đứng hoặc không. Hàm xử lý tình huống bấm chuột onClipEvent(mouseDown) của quả banh màu cam “nói” rằng: nếu biến _visible của quả banh có trị là true thì gán cho nó trị false và ngược lại. Khi biến _visible của quả banh được gán trị false, quả banh trở nên vô hình! Ấn Ctrl+Enter để chạy chương trình, bạn thấy hàm vừa viết rất “hiệu nghiệm”: với mỗi cú bấm chuột, quả banh màu cam biến đi hoặc hiện ra. Để diễn đạt điều kiện “nếu biến _visible có trị là true”, bạn có thể viết if(_visible == true). Tuy nhiên, cách viết nêu trên gọn hơn và có ý nghĩa tương đương. Bạn còn có thể viết gọn hơn nữa: Trong đó, ta dùng tác tử “không”, biểu diễn bằng dấu chấm than (!). Khi đặt dấu chấm than trước biến _visible, bạn nhận được trị true nếu biến _visible có trị false và ngược lại. Kết quả tác động của tác tử “không” được gán trở lại biến _visible. Nói khác đi, câu lệnh _visible = !_visible; cũng có tác dụng chuyển đổi trị của biến _visible giữa true và false. Đối với hàm xử lý tình huống onClipEvent của quả banh đỏ và quả banh xanh, bạn cũng sửa như vậy. Khi đó, hàm xử lý tình huống “bấm chuột” trở thành hàm xử lý tình huống “chuyển khung”. Bạn nhớ, vào lúc chạy chương trình, Flash không ngừng hiển thị các khung liên tiếp. Mỗi lần khung mới xuất hiện, Flash gọi hàm onClipEvent(enterFrame) của các thể hiện (nếu có). Điều này nghĩa là hàm onClipEvent(enterFrame) của các thể hiện được gọi một cách tự động và liên tục. Trong khi quả banh xanh và cam rất năng nổ, quả banh đỏ khiến bạn hơi phiền lòng vì nó dừng lại khi đụng “trần” và đứng yên luôn. Chắc bạn sẽ nghĩ: “Giá như quả banh đỏ liên tục chạy lên chạy xuống thì vui hơn”. Để thực hiện điều này, bạn chọn quả banh đỏ, sửa đổi trong bảng Actions như sau: Như bạn thấy, trong câu lệnh thay đổi tung độ _y của quả banh đỏ, thay vì ghi số cụ thể để xê dịch quả banh từng bước cố định như trước _y += 20; giờ đây ta dùng một biến, gọi là step (bạn tùy ý đặt tên cho biến): _y += step;. Câu lệnh step = 20; đặt bên trong hàm onClipEvent(load) dùng để gán trị ban đầu 20 cho biến step. Hàm onClipEvent(load)được gọi là hàm xử lý tình huống “khởi động” vì nó được gọi khi khởi động hoạt cảnh. Nếu không có hàm như vậy, biến step có trị ban đầu mặc định là 0. Khi đó, cả câu lệnh thay đổi tung độ _y lẫn câu lệnh đổi dấu cho trị số của biến step không có tác dụng gì hết. Đọc thêm : Tổng hợp 31 bài tự học lập trình Flash Theo echip.comTrong hàm xử lý tình huống bấm chuột onClipEvent(mouseDown) của quả banh màu xanh, bạn đã viết câu lệnh điều kiện if(_yscale == 100). Câu lệnh như vậy đặt điều kiện “nếu biến _yscale của quả banh màu xanh có trị bằng 100″. Biến _yscale xác định tỉ lệ co dãn theo phương thẳng đứng. Bạn chú ý, dấu “bằng” ở đây (==) khác với dấu “gán” (=) mà bạn từng dùng.
Quả banh màu đỏ và màu xanh đã thể hiện “cá tính” của chúng, ta cũng nên cho quả banh màu cam diễn trò gì đó. Bạn bấm vào quả banh màu cam, gõ phím F9 để mở bảng Actions (hình 1) và gõ đoạn mã như sau:onClipEvent(mouseDown) {
if
(_visible) {
_visible =
false
;
}
else
{
_visible =
true
;
}
}
onClipEvent(mouseDown) {
_visible = !_visible;
}
Bấm chuột nhiều lần vào lúc chạy chương trình, có lẽ bạn đã hơi hơi mỏi tay và chợt nghĩ: “Phải chi mấy quả banh này tự động diễn trò mà không cần chờ bấm chuột”. Để đạt được “ước mơ” giản dị đó, bạn chỉ cần sửa đối mục mouseDown thành enterFrame:onClipEvent(enterFrame) {
_visible = !_visible;
}
Chạy thử chương trình, bạn thấy khỏe re: cả ba quả banh đều hành động mà không chờ bạn “chỉ đạo”, tạo nên hoạt cảnh vui nhộn. Nếu thấy hoạt cảnh diễn biến quá nhanh, bạn dừng chương trình, giảm tốc độ “chạy khung” bằng cách bấm kép vào ô tốc độ ở cạnh dưới bảng Timeline, bấm kép vào ô Frame rate trong hộp thoại vừa hiện ra (hình 2), gõ 6 và gõ Enter (giảm tốc độ từ 12 khung mỗi giây xuống còn 6 khung mỗi giây).onClipEvent(load) {
step =
20
;
}
onClipEvent(enterFrame) {
if
(_y <
0
|| _y >
500
) {
step = -step;
trace(
"Tôi đổi chiều đây."
);
}
_y += step;
}
Khi quả banh đụng “trần” hoặc “sàn”, chỉ cần đổi dấu cho trị của biến step, quả banh sẽ đổi chiều chuyển động. Cụ thể, câu lệnh if(_y < 0 || _y > 500) diễn đạt trường hợp đụng “trần” hoặc “sàn”: nếu _y có trị nhỏ hơn 0 hoặc _y có trị lớn hơn 500 (dấu || nghĩa là “hoặc”). Câu lệnh step = -step; dùng để đổi dấu cho trị số của biến step.
Thứ Sáu, 27 tháng 5, 2011
Bài 7 : Hàm xử lý tình huống – Tự học lập trình Flash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0 nhận xét:
Đăng nhận xét