BÀI 11: ĐIỀU KHIỂN CHUỘT VÀ BÀN PHÍM BẰNG CÁC SỰ KIỆN
3. Đưa một đối tượng vào ActionScript
Flash cho phép tạo một đối tượng bằng các công cụ vẽ. Đưa các đối tượng này
và các đối tượng được cung cấp sẵn(như các thành phần GUI) vào AS. Để làm được điều này, cần chuyển đổi các đối tượng thành các biểu tượng MovieClip hoặc Button. Đối tượng Graphic không được hỗ trợ.
Sau đó, hãy kích chọn đối tượng. Trong bảng thuộc tính, hãy nhập tên của đối tượng thể hiện cần tạo ra vào mục <Instance Name>, sau đó nhấp Enter. Bây giờ, đối tượng đã được khởi tạo và có thể thao tác với nó bên trong AS theo tên thể hiện vừa cài đặt.
Hình 11.1. Tạo một tên thể hiện cho đối tượng
Nếu import một đối tượng từ bên ngoài vào trong thư viện Library, cũng có thể tạo một lớp chứa nó (tức là lớp để tạo ra đối tượng này).
Chúng ta sẽ xây dựng đoạn chương trình sau đây. Import một file âm thanh vào trong Library. Khi bấm chuột vào nút Play thì nó sẽ chơi file âm thanh này.
Hình 11.2. Thao tác với thuộc tính Properties của đối tượng trong thư viện
- Trong Stage, bạn hãy tạo một nút Play (là biểu tượng Button) và cài đặt tên thể hiện cho nó là btPlay.
- Thực hiện import file âm thanh vào trong thư viện: vào File > Import > Import
to Library. Trong cửa sổ thư viện Library, bấm chọn file âm thanh đã được import vào, kích chuột phải và chọn Properties (xem hình 11.2).
- Khi đó, sẽ xuất hiện hộp thoại Properties như sau:
Hình 11.3. Hộp thoai Properties của đối tượng file âm thanh
Đánh dấu tích vào Export for ActionScript. Trong Class, bạn nhập vào tên lớp sẽ được xây dựng cho đối tượng âm thanh này (ví dụ là myMusic). Ngay bên dưới
là Base Class của nó – tức lớp cơ sở mà nó thừa kế. Sau đó nhấp Ok.
Kết thúc các thao tác trên, bạn đã nhận được một đối tượng btPlay và một lớp myMusic. Tiếp theo, bạn sẽ bắt tay vào viết mã lệnh cho chương trình.
- Nhấn F9 để mở khung soạn thảo ActionScript. Bạn hãy bổ sung sự kiện kích chuột cho đối tượng btPlay như sau:
import flash.events.MouseEvent;
btPlay.addEventListener(MouseEvent.CLICK, func);
var Player:flash.media.Sound = new myMusic();
function func(e:MouseEvent):void{
Player.play();
Đối tượng Player là một sự thể hiện của lớp myMusic. Khi bấm chuột vào nút btPlay, hàm func sẽ được gọi đến. Kết quả là phương thức play của đối tượng Player được thực thi.
Câu hỏi ôn tập, bài tập
11.1. Tạo chiếc đồng hồ treo tường
- Các kim quay phải nằm trên các Layer riêng biệt. Chúng phải là các MovieClip. Tâm xoay của các kim quay này phải nằm ở một đầu của nó.
- Các phần còn lại của đồng hồ, tùy thuộc vào mục đích, có thể tạo trên các Layer khác nhau, hoặc trên cùng một Layer.
11.2. Tạo Game hứng trái cây đơn giản (Sử dụng chuột, bàn phím để chơi)
11.3. Tạo Game Mario đơn giản (Sử dụng bàn phím để chơi)
Gợi ý:
11.1. Tạo đồng hồ:
Sử dụng các Layer sau đây:
- Layer Oclock: chức phần khung của chiếc đồng hồ, bề mặt đồng hồ.
- Layer Node: chứa các mốc thời gian (4 mốc thời gian).
- Layer Hours (chứa kim giờ), Layer Minutes (chứa kim phút), Layer Seconds (chứa kim giây).
- Layer Center: nút gốc của các kim quay.
- Lưu ý đến trật tự của các Layer. Layer Node ở trên Layer Oclock, Layer các kim quay ở trên Layer Node, Layer center trên Layer các kim quay để che đi phần gốc quay của các kim quay.
Đối với các kim quay, bạn cần cài đặt tên thể hiện cho nó. Ví dụ tôi đặt tên cho các đối tượng kim quay như sau: kim giờ là hourobj, kim phút là minobj, kim giây là secobj.
Tiếp theo, hãy chọn một đối tượng kim quay, bấm vào khung Code Snippets (hoặc Windows > Code Snippets). Trong cửa sổ này, bạn chọn nhóm Animation
> Rotate Continuously.
Khi đó, Flash sẽ chèn tự động một Action Frame vào trong TimeLine và khởi tạo nội dung Action cho bạn như sau:
minobj.addEventListener(Event.ENTER_FRAME, fl_RotateContinuously); function fl_RotateContinuously(event:Event)
{
//Soạn thảo mã chương trình ở đây
minobj.rotation += 10;
}
Bây giờ hãy thay đoạn mã trong hàm fl_RotateContinuously bằng đoạn mã sau: var dd:Date = new Date();
hourobj.rotation = ((dd.getHours()>=12)?(dd.getHours()):(dd.getHours()-
12))*30;
minobj.rotation = dd.getMinutes()*6;
secobj.rotation = dd.getSeconds()*6;
Trước khi thay thế hai đoạn mã này, bạn nên kiểm tra xem chiếc đồng hồ của bạn hoạt động như thế nào đã nhé. Rõ rang nó chỉ xoay duy nhất chiếc kim phút
mà thôi. Bạn cũng lưu ý rằng hiệu ứng này của Code Snippets là hiệu ứng quay liên tục (Rotate Continuously), do đó, bạn không cần tương tác với đối tượng Timer.