Thanh Dương xin chào

6 khách và 0 thành viên

Ảnh ngẫu nhiên

BannerHongAnh.swf 270.jpg Mungxuan.swf Happy_new_year.swf _NGUOI_THAY__NHAT_HUY.swf 01_TIENG_HAT_TU_TP_HO_CHI_MINH.swf Cover201115.jpg Donghosocogiay2chuden.swf Donghosocogiay2chutrang.swf Donghosocogiay12chutrang.swf Donghoso12.swf Donghoso21.swf Donghoso2.swf Donghoso1.swf Donghosocogiay1.swf Donghosocogiay.swf Donghoso.swf Clock_LienBich.swf Ad_cadao.swf Videoplayback_.flv

Tài nguyên dạy học

Điều tra ý kiến

Bạn thấy trang này như thế nào?
Đẹp
Đơn điệu
Bình thường
Ý kiến khác

Sắp xếp dữ liệu

Nhúng mã HTML

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • thống kê truy cập

    free counters
    Gốc > Lập trình Flash >

    Bài 52: Lớp key

    Lớp Key
    [Hoàng Ngọc Giao]
    Lớp Key giúp bạn theo dõi bàn phím trong chương trình của mình, giúp bạn biết được người dùng gõ phím nào. Mọi hàm của lớp Key đều là hàm tĩnh, vì vậy bạn không cần tạo ra đối tượng thuộc lớp Key khi muốn gọi hàm của lớp Key.
    Để tìm hiểu các hàm của lớp Key, bạn hãy mở tập tin FLA mới, mở bảng Action - Frames của khung 1 và gõ vào đoạn mã như sau:

    this.onEnterFrame = function() {

      if(Key.isDown(65))

        trace("Bạn ấn phím 'A'.");

    }

    Đoạn mã trên định nghĩa hàm xử lý tình huống onEnterFrame. Từ chốt this ở đây tương đương với từ chốt _root, nhằm chỉ sân khấu (thời tuyến chính của Flash). Mỗi khi Flash hiển thị khung mới, hàm onEnterFrame được gọi. Với tốc độ mặc định 12 fps (12 khung mỗi giây), cứ sau 1/12 giây hàm onEnterFrame lại được gọi. Hiện thời, tuy ta chỉ có một khung duy nhất, hàm onEnterFrame vẫn được gọi lặp đi lặp lại vào lúc chạy sau mỗi 1/12 giây.
    Bạn có thể viết đoạn mã trên theo cách tương đương:

    this.onEnterFrame = doEnterFrame;

    function doEnterFrame() {

      if(Key.isDown(65))

        trace("Bạn ấn phím 'A'.");

    }

    trong đó ta quy định hàm xử lý tình huống onEnterFrame là hàm doEnterFrame và nêu ra định nghĩa của hàm doEnterFrame. Khi hàm xử lý tình huống có nội dung khá dài, cách viết như vậy dễ đọc hơn. Nếu hàm xử lý tình huống có nội dung đơn giản, cách viết đầu tiên gọn gàng hơn.
    Thử chạy chương trình rồi gõ phím A, bạn thấy xuất hiện dòng chữ ở bảng Output:
    Bạn ấn phím 'A'.
    Điều này chứng tỏ khi người dùng gõ phím A, chương trình nhận biết được ngay.
    Nhìn vào nội dung hàm onEnterFrame, bạn hiểu ngay rằng mỗi khi Flash hiển thị khung mới, hàm Key.isDown được gọi. Ta trao cho hàm Key.isDown trị số 65. Đó là mã số tương ứng với phím A trên bàn phím. Nhờ vậy, khi phím A được ấn xuống, hàm Key.isDown trả về trị true. Nếu phím được ấn không phải là phím A, hàm Key.isDown trả về trị false.
    Các phím mũi tên thường được dùng để điều khiển trò chơi. Bạn hãy viết thêm như sau vào chương trình hiện có để nhận biết khi nào người dùng ấn các phím mũi tên:

    this.onEnterFrame = function() {

      if(Key.isDown(65))

        trace("Bạn ấn phím 'A'.");

      else if(Key.isDown(Key.UP))

        trace("Bạn ấn phím mũi tên lên.");

      else if(Key.isDown(Key.DOWN))

        trace("Bạn ấn phím mũi tên xuống.");

      else if(Key.isDown(Key.LEFT))

        trace("Bạn ấn phím mũi tên trái.");

      else if(Key.isDown(Key.RIGHT))

        trace("Bạn ấn phím mũi tên phải.");

    }

    Thử chạy chương trình và lần lượt ấn các phím mũi tên, bạn thấy chương trình biết "vanh vách" bạn vừa ấn phím nào.
    Trong đoạn mã vừa thêm, ta cũng dùng hàm Key.isDown để kiểm tra việc ấn phím. Thay vì ghi cụ thể mã số tương ứng với các phím mũi tên cho hàm Key.isDown, ta dùng các biến mang tên UP, DOWN, LEFT, RIGHT của lớp Key. Đó lần lượt là các biến chứa mã số của phím mũi tên lên, mũi tên xuống, mũi tên trái, mũi tên phải. Trị số của các biến như vậy thực ra không bao giờ thay đổi nên người ta gọi chúng là hằng (constant) của lớp. Rõ ràng, việc dùng các hằng như trên thuận tiện cho việc lập trình, giúp chương trình dễ đọc hơn.
    Bảng 1 trình bày các hằng của lớp Key để bạn tham khảo. Chúng ứng với các phím điều khiển của bàn phím.
    Bảng 1: Các hằng của lớp Key

    Tên hằng

    Phím tương ứng

    Mã phím

    Key.BACKSPACE

    Back space

    8

    Key.CAPSLOCK

    Caps Lock

    20

    Key.CONTROL

    Ctrl

    17

    Key.DELETEKEY

    Delete

    46

    Key.DOWN

    Mũi tên xuống

    40

    Key.END

    End

    35

    Key.ENTER

    Enter

    13

    Key.ESCAPE

    Escape

    27

    Key.HOME

    Home

    36

    Key.INSERT

    Insert

    45

    Key.LEFT

    Mũi tên trái

    37

    Key.PGDN

    Page Down

    34

    Key.PGUP

    Page Up

    33

    Key.RIGHT

    Mũi tên phải

    39

    Key.SHIFT

    Shift

    16

    Key.SPACE

    Space bar

    32

    Key.TAB

    Tab

    9

    Key.UP

    Mũi tên lên

    38

    Đoạn mã bạn vừa viết để nhận biết phím được ấn thực ra chỉ thích hợp khi chương trình cần theo dõi một vài phím. Nếu cần theo dõi khoảng chục phím khác nhau chẳng hạn, việc dùng câu lệnh if else như vậy không thuận tiện lắm. Ngoài ra, việc kiểm tra phím được ấn trong từng thời khoảng 1/12 giây là không đủ nhanh. Có một cách khác giúp bạn kiểm tra phím được ấn trong từng thời khoảng rất ngắn, cỡ 1/1000 giây. Bạn hãy xóa chương trình hiện có và viết đoạn mã khác như sau:

    obj = new Object();

    obj.onKeyDown = function() {

      trace("Bạn ấn phím gì dó.");

    }

    Key.addListener(obj);

    Thử chạy chương trình và gõ phím bất kỳ, bạn nhận được thông báo chứng tỏ chương trình biết ngay bạn vừa gõ phím... gì đó.
    Trong đoạn mã vừa viết, câu lệnh obj = new Object() nhằm tạo ra một đối tượng thuộc lớp Object. Mọi lớp trong ActionScript đều là lớp con (subclass) của lớp Object. Nói khác đi, mọi lớp đều thừa kế (inherit) từ lớp Object. Sau này ta sẽ tìm hiểu thêm về khái niệm thừa kế.
    Tạo ra một đối tượng thuộc lớp Object nghĩa là tạo ra một đối tượng "chung chung". Ta chỉ dùng đối tượng này vào việc lắng nghe mọi "động tĩnh" từ bàn phím. Trong những chương trình thực tế, ta thường dùng một nhân vật cụ thể để lắng nghe bàn phím.
    Trong đoạn mã vừa viết, ta quy định hàm xử lý tình huống onKeyDown của đối tượng obj, theo đó, mỗi khi có phím được ấn, thông báo "Bạn ấn phím gì đó" xuất hiện ngay trong bảng Output. Bạn có thể quy định hàm xử lý tình huống onKeyUp nếu muốn thực hiện việc gì đó khi người dùng thôi ấn phím.
    Sau việc quy định hàm xử lý tình huống onKeyDown của đối tượng obj, bạn còn phải thực hiện một bước nữa để hoàn thành thủ tục cần thiết. Câu lệnh Key.addListener(obj) nhằm "đăng ký" đối tượng obj với lớp Key, cho phép đối tượng obj lắng nghe bàn phím. Nếu muốn "rút phép" vào lúc nào đó, không cho đối tượng obj lắng nghe bàn phím nữa, bạn dùng câu lệnh Key.removeListener(obj).
    Có lẽ bạn đang thắc mắc rằng "phím gì đó" được ấn là phím gì. Nếu không biết rõ phím nào được ấn thì đoạn mã vừa nêu chẳng có ích gì. Vâng, đúng là như vậy. Bạn hãy tiến thêm một bước bằng cách sửa chương trình như sau:

    obj = new Object();

    obj.onKeyDown = function() {

      //trace("Bạn ấn phím gì dó.");

      trace("Bạn ấn phím " + Key.getCode());

    }

    Key.addListener(obj);

    Hàm getCode của lớp Key trả về mã số của phím vừa được ấn. Chạy chương trình và ấn thử vài phím, quả thực thông báo ở bảng Output cho bạn biết mã số của phím được ấn.

    Nhắn tin cho tác giả
    Đỗ Thanh Dương @ 07:54 06/04/2012
    Số lượt xem: 636
    Số lượt thích: 0 người
     
    Gửi ý kiến

    HỖ TRỢ QUẢN TRỊ WEBSITE

    Thay tên website / Chọn thư mục / Mở ra
    Giao diện Module Thư mục Thành viên Tài nguyên Xóa Code
    http://