3-5 Nhập Key
Chúng ta đã học cách nhập hình ảnh và âm thanh rồi. Tiếp theo chúng ta sẽ thử thách với việc nhập Key. Nếu chúng ta kết hợp việc đưa hình ảnh và âm thanh cùng với việc nhập key thì chúng ta đã hoàn thành việc làm một game Nhập key Dưới đây là chương trình chỉ khi nhấn phím Space thì hình ảnh ...
Chúng ta đã học cách nhập hình ảnh và âm thanh rồi. Tiếp theo chúng ta sẽ thử thách với việc nhập Key. Nếu chúng ta kết hợp việc đưa hình ảnh và âm thanh cùng với việc nhập key thì chúng ta đã hoàn thành việc làm một game
Nhập key
Dưới đây là chương trình chỉ khi nhấn phím Space thì hình ảnh mới được hiển thị trên màn hình.
key00.rb
require 'mygame/boot' main_loop do if key_pressed?(Key:Space) Image.render ("sample.bmp") end end
Trong chuỗi liên tục thì có nội dung lệnh sau:
if key_pressed?(Key:Space) image.render ("sample.bm") end
Code này có ý nghĩa là khi nút Space được nhấp hãy thay đổi vị trí image. trong [mygame] thì lệnh [key_pressed] dùng để check lại những nội dung nhập Key. Vào argument thì chúng ta sẽ đưa cho chúng key. [KET::SPACE] được qui định để thể hiện dấu cách. Lệnh [key_pressed] phản ứng với argument được giao cho, nếu phím space được nhấn thì lệnh sẽ trở thành true và nếu chưa được nhấn thì coi như lệnh là failse.
Chương trình tiếp theo hiển thị lệnh khi ta nhấn A, B, c trên màn hình thì các chữ cái tương tự cũng sẽ hiện ra.
key01.rb
require 'mygame/boot' main_loop do if key_pressed?(Key:a) puts "A" end if key_pressed?(Key:b) puts "B" end if key_pressed?(Key:c) puts "C" end end
Trong khi màn hình vẫn trong trạng thái hoạt động, khi ta nhấn các phím [A,B, C] thì các chữ cái sẽ được hiển thị tương tự.
Sau đây sẽ là bảng những lệnh chính được thực hiện theo [key_pressed]
Key | Phím tương ứng |
---|---|
Key::ESCAPE | Esc |
Key::SPACE | Dấu cách |
Key::K0 | 0 |
Key::K1 | 1 |
Key::K1~9 | 1~9 |
Key::A | a |
Key::B | b |
Key::UP | Lên trên |
Key::DOWN | Xuống dưới |
Key::LEFT | Sang trái |
Key::RIGHT | Sang phải |
Tìm key đã được nhấn
Chương trình tiếp theo là chương trình để tìm ra khoảnh khắc mà key được nhấn.
Key02.rb
require 'mygame/boot' main_loop do if new_key_pressed?(Key::SPACE) puts "SPACE" end end
Chạy thử chương trình này, các bạn hãy nhấn thử phím cách trên màn hình chương trình chạy thử xem. Như vậy, ngay trong khoảng khắc nhấn phím cách, thì chắc chắn trên màn hình của command promt sẽ hiện lên chữ [SPACE]. Kể cả chúng ta để mặc một thời gian rồi nhấn lại thì cứ mỗi lần nhấn, trên màn hình của command promt thì lại hiện chữ SPACE.
Những lệnh có kèm dấu [?]
Những lệnh như [key_pressed?] hay [new_key_pressed?] đều có dấu "?" ở cuối lệnh. Những lệnh có dấu ? ở cuối lệnh là những lệnh sẽ trả lại câu trả lời true/false (đúng/sai)
Chương trình mỗi khi nhấn Key thì âm sẽ kêu
Tại sao chúng ta cần thiết phải tìm ra khoảnh khắc mà key được nhấn? Lệnh [new_pressed_key] cần thiết như thế nào?
Ví dụ, khi ta muốn viết lên một chương trình là cứ mỗi khi nhấn phím cách thì âm thanh sẽ vang lên. Các bạn hãy nhìn chương trình dưới đây.
require 'mygame/boot' main_loop do if key_pressed?(Key::SPACE) wave.play "sample.wav", 0 # Chơi bản sample ở chanel 0 end end
Đây là chương trình chạy mỗi lần nhấn phím cách thì lệnh [wave.play] sẽ được thực hiện. Tuy nhiên, chương trình này sẽ không chạy được như mình mong đợi. Lý do bởi vì trong thời gian phím cách được nhấn thì lệnh [wave.play] sẽ được gọi liên tiếp. Vì ngay sau khi âm thanh chạy thì nó lại phải chạy lại từ đầu nên trong khi phím cách được nhấn thì bản [sample.wav] bị chạy lại liên tục.
Trong trường hợp này nếu ta sử dụng lệnh [new_pressed_key?] thì sẽ đúng.
require 'mygame/boot' if new_pressed_key?(KEY::SPACE) wave.play "sample.wav", 0 end end
Như vậy thì cứ mỗi lần nhấn phím cách thì bản nhạc lại được chơi lại chỉ 1 lần.