3-6 Object tranh ảnh

3-6 Object tranh ảnh

Tại phần này tôi sẽ giới thiệu phương pháp thao tác để tạo nên object là tranh ảnh

Object tranh ảnh

Cho đến nay thì chúng ta đã dùng nhóm lệnh [Image.render] để gọi nhóm hình ảnh, hình vẽ. Tuy nhiên, so với phương pháp này còn có một phương pháp khác tiện lợi hơn nhiều. Đây là thao tác tạo một Object về hình ảnh rồi thao tác trên đó.

img = Image.new(Argument)

Từ đây thì chúng ta có thể tạo ra một Object về hình ảnh.

Ví dụ ở trên thì ta lấy biến số img để thay thế có Object hình ảnh này. Object về hình ảnh này như là một bộ phận có thể sử dụng trong màn hình. Bộ phận này có thể thực hiện được những thao tác sau


  • Vẽ tranh
  • Lập vị trí
  • Xoay
  • Lập giá trị alpha

Thao tác đối với Object về hình ảnh này đó chính là gọi ra những lệnh

Lệnh đối với Object hình ảnh

Dưới đây là những ví dụ của chương trình sử dụng Object hình ảnh

require 'mygame/boot'
img = Image.new("sample.bmp")	#Đặt Object bằng biến số img
img.x = 100	              # Xác lập tọa độ x là 100
img.render	               # Vẽ hình ảnh lên màn hình
a = img.x	                # Đặt tọa độ x của Object hình ảnh là a

Có thể ý tưởng làm một object hình ảnh như thế này có thể trong quá trình lập trình sẽ không đến lập tức. Với tình trạng hiện tại thì chúng ta cứ chỉ cần biết là có cách viết như thế này. Về [Class] hay [Object] thì sẽ được giải thích rõ hơn ở p.178.

Dưới đây tôi sẽ giải thích tiếp về thao tác hình thành một Object hình ảnh.

Sự xuất hiện của Object hình ảnh

Để tạo nên một Object hình ảnh thì ta dùng [Image.new]. Tại argument chúng ta có thể điền tên object và Option lệnh.

Image.new (Tên file hình ảnh, Option lệnh)

Về cơ bản thì như thế này sẽ sản sinh ra một Object mới.

img = Image.new("sample.bmp")

Chúng ta tạo một Obiject hình ảnh cho [sample.bmp] rồi đặt cho nó biến số là [img].

Trao argument (đầu vào của lệnh) cho Option

Sau khi tạo ra một Object hình ảnh như vậy thì chúng ta đã có thể trao option lệnh cho chúng rồi. Để xác lập vị trí của tọa độ x cùng với lúc xác lập Object thì chúng ta làm như sau

img = Image.new("sample.bmp", :x => 100)

Chúng ta có thể trao liên tục những lệnh khác nhau cùng một lúc.

img = Image.new("Sample.bmp*, :x => 100, :y => 50)

Hơn nữa, thứ tự trong option cũng tự do

img = Image.new("Sample.bmp, :y => 50, :x =>100)

Những thao tác cho Object hình ảnh

Về cơ bản, đối với Object hình ảnh thì chúng ta có thể gọi được những lệnh như dưới đây. [img] chính là biến số đại diện cho Object hình ảnh.

Vẽ hình ảnh
img.render

[render] này dùng để vẽ hình ảnh lên màn hình.

Xác lập vị trí
img.x = 100
img.y = 50

Qua việc sử dụng tọa độ trục hoành x, tọa độ trục tung y để xác lập vị trí của bức ảnh trên màn hình.

Lấy vị trí
img.x
img.y

Hiện tại chúng ta đã lấy được tọa độ của bức ảnh là [x,y]. Nếu chúng ta kết hợp xác lập và lấy vị trí thì chúng ta có thể làm phép tính toán thay đổi vị trí như dưới đây.

img.x = img.x + 1

Hoặc chúng ta cũng có thể viết được như sau

img.x += 1
Lấy size
img.w	# Lấy size chiều ngang
img.h	# Lấy size chiều dài
Phóng to, thu nhỏ hình ảnh
img.scale = 2.0	# Xác lập độ lớn gấp đôi so với nguyên mẫu
img.scale = 0.5	# Xác lập độ lớn bằng một nửa so với nguyên mẫu

[scase=]là khi chúng ta vẽ hình ảnh nó sẽ xác lập độ phóng to so với nguyên mẫu. Tuy nhiên, nếu chúng ta xác lập một giá trị ngoài 1 thì cũng phải chú ý đến trường hợp tốc độ xử lý ảnh sẽ chậm hơn. Nếu xác lập những giá trị như thế này thì chính giữa bức ảnh chính là điểm tọa độ của bức ảnh.

Xoay ảnh
img.angle = 90	# xoay bức ảnh theo chiều kim đồng hồ 90 độ

Lệnh [angle=] là lệnh để thay đổi góc độ bức ảnh. Lấy tâm của bức ảnh làm gốc mà nó sẽ được xoay theo chiều kim đồng hồ. Cứ 360 độ thì sẽ xoay được 1 vòng. Tuy nhiên, nếu chúng ta xác lập một giá trị khác 0 thì việc xử lý bức ảnh sau này sẽ bị chậm đi. Sau khi xử lý này diễn ra thì tọa độ của bức ảnh sẽ lấy là tâm của bức ảnh.

Ví dụ sử dụng
require 'mygame/boot'
img = Image.new("sample.bmp")	# Sản sinh một Object hình ảnh mới
img.x = 100	    # xác lập tọa độ x là 100
img.y = 100	    # xác lập tọa độ y là 100
img.scare = 2.0	# xác lập phóng to hình ảnh lên 2 lần
img.angle = 90	 # xác lập xoay hình ảnh theo chiều kim 90 độ
img.alpha = 128	# xác lập giá trị alpha
image.render

Đây là ví dụ thực hiện những thao tác khác nhau đối với Object hình ảnh. Cũng như thế này, người ta có thể thực hiện rất nhiều thao tác đối với Object hình ảnh. Lập trình game là công việc vẽ rất nhiều hình ảnh khác nhau nên nếu bộ phận hóa hình ảnh như thế này thành các Object thì chương trình sẽ trở nên đơn giản và dễ hiểu hơn. Mặt khác, đối với sự sinh ra của Object hình ảnh, chúng ta cũng có thể có thêm lợi ích vì Load hình ảnh sẽ xảy ra đồng thời với việc vẽ nên hình ảnh nên tốc độ xử lý trong chuỗi sẽ nhanh hơn.

Làm động Object hình ảnh

Chúng ta hãy thử sử dụng Object hình ảnh để tạo nên một chương trình có thể di chuyển được. Dưới đây là ví dụ chương trình hình ảnh [sample.bmp] chuyển động sang phải.

img = New.image("sample.bmp", :x => 200, :y => 200)
main_loop do
  img.x += 1
  img.render
end

Theo như chuỗi của chương trình này thì cứ mỗi lần chuỗi kết quả được thực hiện thì tọa độ x của hình ảnh sẽ được công thêm 1. Vì chúng ta tạo bắt nó thực hiện lặp đi lặp lại chuỗi lệnh [hình ảnh mà giá trị x cộng thêm 1], chính vì vậy mà chúng ta nhìn thấy như hình ảnh đang chuyển động. 7.png

Hình 3-11 Hướng chuyển động của hình ảnh theo mũi tên

Xoay Object hình ảnh

Chungs ta hãy thử xoay Object hình ảnh xem thế nào nhé. Xử lý về xoay hình ảnh cũng rất đơn giản, thao tác hầu hết giống như những thao tác phía trên.

img = Image.new("sample.bmp", 200, 200)
main_loop do
  img.angle += 1
  img.render
end

Vậy trong chuỗi [angle] được tính toán và xoay hình ảnh.