3-7 Thao tác với nhân vật

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

8.PNG

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

9.png

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