Hướng dẫn sử dụng Macromedia Flash mx


Bài 6: Câu lệnh điều kiện



tải về 0.86 Mb.
trang4/27
Chuyển đổi dữ liệu02.09.2017
Kích0.86 Mb.
#32845
1   2   3   4   5   6   7   8   9   ...   27

Bài 6: Câu lệnh điều kiện



Bạn đã thấy thông báo lỗi xuất hiện ở bảng Output. Khi bạn dừng chương trình (đóng cửa sổ swf), thông báo lỗi vẫn còn lưu lại trong bảng Output ở phía phải cửa sổ Flash để bạn "nghiền ngẫm". Lỗi như vậy gọi là lỗi lúc biên dịch (compile-time error). Chương trình không chạy được nếu có lỗi lúc biên dịch. Nếu chương trình chạy được nhưng lại tỏ ra "kỳ cục", không đúng như dự kiến, người ta nói rằng chương trình có lỗi lúc chạy (run-time error).

Trong chương trình của mình, bạn có thể chủ động đưa thông báo ra bảng Output. Nhờ vậy, khi chạy chương trình, bạn dễ dàng theo dõi diễn biến thực tế, dễ dàng phát hiện nguyên nhân gây ra lỗi lúc chạy. Để thử đưa thông báo ra bảng Output, bạn hãy bấm chọn quả banh đang có lỗi biên dịch, gõ phím F9 để mở lại bảng Actions (nếu cần). Trong bảng Actions, bạn xóa câu lệnh sai, gõ đoạn mã mới như sau:

onClipEvent(mouseDown) {

  _y -= 20;

  trace("Tôi đi lên đây.");

}

Hàm onClipEvent giờ đây có hai câu lệnh. Câu lệnh đầu tiên làm cho quả banh xê dịch lên trên 20 điểm ảnh. Câu lệnh thứ hai là câu lệnh gọi hàm trace, làm cho quả banh biết thông báo về hành động của mình! Thông báo "Tôi đi lên đây" là đối mục của hàm trace. Về mặt cấu trúc, thông báo "Tôi đi lên đây" là một chuỗi ký tự, gọi tắt là chuỗi (string). Dùng bộ gõ UniKey thông dụng, bạn dễ dàng tạo ra ký tự Việt có dấu trong chuỗi. Khi dùng chuỗi, bạn đừng quên mở đầu và kết thúc chuỗi bằng dấu nháy ("). Ấn Ctrl+Enter để chạy chương trình, bạn thấy mỗi lần bấm chuột, quả banh xê dịch lên trên và thông báo "Tôi đi lên đây" xuất hiện ở bảng Output (hình 1). Bạn hãy bấm chuột liên tiếp nhiều lần để thấy quả banh đi mất tiêu. Đó là khi tung độ _y vượt ra ngoài phạm vi hiển thị của sân khấu.




Để quả banh không đi mất, bạn dừng chương trình, sửa nội dung hàm onClipEvent như sau:

onClipEvent(mouseDown) {

  if(_y > 0) {

    _y -= 20;

    trace("Tôi đi lên đây.");

  }

}
Những gì bạn vừa viết bên trong hàm onClipEvent là một câu lệnh điều kiện. Câu lệnh ấy ngụ ý: nếu tung độ _y của quả banh lớn hơn 0 thì mới xê dịch quả banh và đưa ra thông báo "Tôi đi lên đây" ở bảng Output. Điều kiện "tung độ _y lớn hơn 0" phải được viết trong cặp dấu ngoặc ( ), đặt sau từ if. Những việc cần làm khi điều kiện được thỏa phải được viết bên trong cặp dấu gộp { }, đặt sau cặp dấu ngoặc ( ). Để Flash hiểu được những gì bạn viết, cần tuân thủ nghiêm ngặt các quy tắc vừa nêu. Chạy lại chương trình và bấm chuột nhiều lần, bạn thấy quả banh rốt cuộc dừng lại, "không thèm" nhúc nhích nữa. Đó là khi điều kiện "tung độ _y lớn hơn 0" không được thỏa, tức là khi _y nhỏ hơn hoặc bằng 0. Bạn chú ý, tung độ của quả banh là tung độ của điểm mốc. Chính bạn đã quy định điểm mốc nằm ở giữa cạnh dưới khung bao của quả banh. Nếu muốn quả banh "nói năng" gì đó khi điều kiện "tung độ _y lớn hơn 0" không được thỏa, chứ không im lìm, bạn viết thêm vào hàm onClipEvent:

onClipEvent(mouseDown) {

  if(_y > 0) {

    _y -= 20;

    trace("Tôi đi lên đây.");

  }


  else {

    trace("Tôi không đi nữa.");

  }

}

Từ else giúp bạn diễn đạt trường hợp ngược với trường hợp được nêu bởi từ if. Việc cần làm khi điều kiện "tung độ _y lớn hơn 0" không được thỏa phải được ghi bên trong cặp dấu gộp { } theo sau từ else. Nhờ viết như vậy, lúc chạy chương trình, quả banh thông báo "Tôi không đi nữa" nếu tung độ của nó không lớn hơn 0. Lời từ chối đó cho bạn thấy quả banh tuy trơ trơ nhưng vẫn hiểu bạn đang bấm chuột thúc giục nó. Với hai quả banh còn lại "chưa có cá tính", ta cũng thử lập trình cho chúng có hành vi khác biệt. Trước khi làm như vậy, bạn nên cho hai quả banh còn lại có màu khác cho dễ phân biệt: một xanh, một cam chẳng hạn. Bạn không thể chọn màu tô khác nhau cho các thể hiện khác nhau của một nhân vật nhưng có thể chọn màu nhuộm (tint color) khác nhau cho chúng. Cụ thể, bạn hãy chọn quả banh "chưa có cá tính", ấn Ctrl+F3 để mở cửa sổ Properties tương ứng, chọn Tint trong ô Color, bấm vào ô màu kế bên và chọn màu trong bảng màu. Muốn màu nhuộm lấn át màu tô, bạn ghi 100% trong ô Tint Amount: . Bằng cách đó, bạn có được ba thể hiện của nhân vật Ball có màu khác nhau (hình 2). Bạn chọn quả banh màu xanh, gõ đoạn mã như sau trong bảng Actions:



onClipEvent(mouseDown) {

  if(_yscale == 100) {

    _yscale = 200;

  }


  else {

    _yscale = 100;

  }

}

Để thử đoán nhận hành vi của quả banh màu xanh, bạn cứ chạy chương trình xem sao.




Bài 7: Hàm xử lý tình huống



Trong 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.

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. 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;

  }

}

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:

onClipEvent(mouseDown) {

  _visible = !_visible;

}

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. 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;

}

Đố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. 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).



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:



onClipEvent(load) {

  step = 20;



}

onClipEvent(enterFrame) {

  if(_y < 0 || _y > 500) {

    step = -step;

    trace("Tôi đổi chiều đây.");

  }

  _y += step;

}

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;. 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.



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.


Каталог: files -> 2012
files -> PHỤ LỤC 2 TỔng hợp danh mục tài liệu tham khảO
files -> BÁo cáo quy hoạch vùng sản xuất vải an toàn tỉnh bắc giang đẾn năM 2020 (Thuộc dự án nâng cao chất lượng, an toàn sản phẩm nông nghiệp và phát triển chương trình khí sinh học ) Cơ quan chủ trì
files -> BỘ TÀi nguyên và MÔi trưỜng
files -> 1. Mục tiêu đào tạo: Mục tiêu chung
2012 -> Số Hồ sơ: 50 / /cs-bhyt cộng hòa xã HỘi chủ nghĩa việt nam
2012 -> HÌnh ảnh thao tác dữ liệu máy toàN ĐẠc nts 310 CỦa hãng south
2012 -> Khóa học 2010 -2012 (TT10C/1) (Ban hành theo quyết định số /QĐ-bgh ngày …tháng…năm của Hiệu trưởng trường Đại học Hoa Sen)
2012 -> Thông báo về việc xét thông qua đề tài luận văn và người hướng dẫn cho hvch k56

tải về 0.86 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   ...   27




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương