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 ...
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 ảnhimg.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 += 1Lấy size
img.w # Lấy size chiều ngang img.h # Lấy size chiều dàiPhó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 ảnhimg.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ụngrequire '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.
Hình 3-11 Hướng chuyển động của hình ảnh theo mũi tênXoay 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.