3-7 Thao tác với nhân vật
Bài đăng này đã không được cập nhật trong 3 năm
3-7 Thao tác với nhân vật
Chúng ta hãy thử dùng những kĩ năng học đến giờ để thao tác với một nhân vật thôi
Nhập Key
Hình ảnh và tọa độ hình ảnh nếu hợp cùng với key nữa thì chúng ta có thể di chuyển nhân vật trên màn hình.
movechara00.rb
require 'mygame/boot'
punya = Image.new("punya00.png", :x => 100, :y => 100)
main_loop do
if key_pressed?(Key::RIGHT)
punya.x +=8
end
if key_pressed?(Key::LEFT)
punya.x -= 8
end
punya.render
end
Chương trình này tìm kiếm lệnh nhập key sang trái sang phải để thay đổi tọa độ của nhân vật. Trong ví dụ trên, chúng ta sử dụng Class [Image] để tạo nên Object hình ảnh nhưng thay vào đó nếu chúng ta dùng [TransparentImage] thì xung quanh nhân vật sẽ trở nên trong suốt.
Sử dụng câu lệnh liên từ if để viết như sau cũng có thể.
movechara01.rb
require 'mygame/boot'
punya = Image.new("punya00.png", :x=> 100, :y=> 100)
main_loop do
punya.x +=8 if key_pressed?(Key::RIGHT)
punya.x -+8 if key_pressed?(Key::LEFT)
punya.render
end
TransparentImage
[TransparentImage] là chương trình xử lý trong suốt hình ảnh, tạo được hình ảnh tự nhiên. Ngoài điểm có thể làm trong suốt màn đằng sau nhân vật của mình thì cũng giống như những chức năng khác thuộc Class Image. Phía bên trái trên màn hình (0,0) sẽ trở nên bị mất màu.
require 'mygame/boot'
punya = TransparentImage.new("punya00.png")
main_loop do
punya.render
end
Hình 3-14 Tiến hành xử lý trong suốt
Chuyển động lên xuống
Chúng ta hãy ra lệnh tìm thao tác lên xuống để điều khiển nhân vật lên xuống
movechara02.rb
require 'mygame/boot'
punya = TransparentImage("punya00.png", :x => 100, :y => 100)
main_loop do
punya.x += 8 if key_pressed?(Key::RIGHT)
punya.x -= 8 if key_pressed?(Key::LEFT)
punya.y +=8 if key_pressed?(Key::DOWN)
punya.y -=8 if key_pressed? (Key::UP)
punya.render
end
Hình 3-15 Hình ảnh hoạt động của nhận vật theo hướng mũi tên
Dừng màn hình
Vậy bay giờ chúng ta có thể điều khiển nhân vật di chuyển tự do rồi.
Tuy nhiên, nếu cứ tiếp tục nhấn nút di chuyển thì nhân vật sẽ bay ra khỏi màn hình, và sẽ di chuyển đến một khu vực mà ta không thể nhìn thấy được. Chính vì vậy chúng ta cần phải dừng nhân vật ở cuối màn hình.
Để dừng nhân vật ở cuối màn hình rất đơn giản
punya.x = 0 if punya.x<0
punya.y = 0 if punya.y<0
Cứ như thế này, chúng ta có thể dùng lệnh để nếu tọa độ [x.y] lớn nhỏ hơn 0 thì punya vẫn ở vị trí 0 và có thể chặn màn hình lại được.
Việc dừng màn hình bên phải và màn hình dưới cũng tương tự. Nếu tọa độ của nhân vật vượt quá số chỉ tọa độ đáy màn hình và phái tận cùng bên phải của màn hình thì nó sẽ đứng tại chỗ.
Để lấy kích cỡ của màn hình thì chúng ta làm như sau
screen.y #Phía bề ngang màn hình (mặc định là 640)
screen.h #Phía bề đứng của màn hình (mặc định là 480)
Từ giá trị đó trừ đi thì chúng ta ra vị trí lớn nhất của nhân vật.
maxx = screen.x - punya.w
maxy = screen.y - punya.h
Đây là chương trình dùng maxx và maxy để dừng nhân vật tại điểm cuối màn hình.
movechara03.rb
require 'mygame/boot'
punya = Image.new("punya00.png", :x => 100, :y => 100)
maxx = screen.x - punya.w
maxy = screen.y - punya.h
main_loop do
punya.x += 8 if key_pressed?(Key::RIGHT)
punya.x -= 8 if key_pressed?(Key::LEFT)
punya.y +=8 if key_pressed?(Key::DOWN)
punya.y -=8 if key_pressed? (Key::UP)
punya.x = 0 if punya.x < 0
punya.y = 0 if punya.y<0
punya.x = maxx if punya.x > maxx
punya.y = maxy if punya.y > maxy
punya.render
end
All rights reserved