Vẽ trên IGraphics

Một phần của tài liệu nghiên cứu và phát triển game trên windows mobile (Trang 61)

Mọi thao tác vẽ, giao tiếp trên đối tượng đồ họa đều thực hiện thông qua interface IGraphics.

Vẽ animation :

public void DrawAnimation(int x, int y, Animation animation)

Vẽ ảnh trong suốt :

public void DrawImageAlphaChannel(IImage image, int x, int y)

public void DrawImageAlphaChannel(IImage image, Rectangle dest)

public void DrawImageAlphaChannel(IImage image, Rectangle dest, Rectangle src)

public void DrawImageTransparent(IBitmap image, Rectangle destRect)

Vẽ chuỗi :

public void DrawText(int x, int y, string text, Color color, IFont font,

FontDrawOptions options)

Các thao tác này thật tế chỉ vẽ vào vùng đệm của đối tượng đồ họa. Vùng đệm của đối tượng đồ họa được vẽ ra màn hình bằng hàm Flip(). Các hàm Flip() cung cấp chức năng vẽ vùng đệm của đối tượng đồ họa ra màn hình gồm 3 hàm với chức năng vẽ toàn bộ vùng đệm ra toàn màn hình, vẽ lên một vùng trên màn hình và vẽ lên nhiều vùng trên màn hình.

public void Flip()

public void Flip(Rectangle rect)

public void Flip(List<Rectangle> listRect)

4.1.5. Hủy IGraphics

Đối tượng đồ họa được tạo ra thông qua các API và chứa nhiều thành phần không thuộc managed code nên cần phải giải phóng đối tượng này trước khi thoát khỏi chương trình.

Thao tác hủy đối tượng đồ họa : public void Dispose()

Kết luận

Dựa trên thư viện IGraphics từ MSDN, chúng em đã xây dựng thêm các tính năng cho thư viện IGraphics để hỗ trợ hiệu quả hơn cho quá trình phát triển game. Với thư viện IGraphics, chúng em có thể vẽ các ảnh Bitmap, các ảnh có độ trong suốt nhằm tăng tính hấp dẫn cho game, dễ dàng mở rộng, thay thế các thư viện đồ họa khác, tận dụng tốt hơn tốc độ của máy.

Nhằm dễ dàng thay thế các thư viện đồ họa về sau, mọi giao tiếp với đối tượng xử lý đồ họa đều thông qua interface IGraphics nên thư viện đồ họa có thể thay đổi về sau mà không cần phải cài đặt lại chương trình.

4.2. Xử lý ảnh Bitmap

Vấn đề

Một trong những chức năng cơ bản của lớp xử lý đồ họa là phải xử lý được trên các ảnh Bitmap. Các ảnh Bitmap là thành phần được thể hiện nhiều nhất trong game.

Giải pháp

Thư viện đồ họa tạo Bitmap thông qua interface IBitmap. Lớp này được cài đặt dựa trên các đối tượng GDI+. Trong quá trình cài đặt, chúng em đã thêm vào 2 chức năng cho phép IGraphics tạo IBitmap này từ Stream và từ đối tượng Bitmap. Nhờ đó, có thể sử dụng các ảnh dưới dạng embedded resource của chương trình. Ngoài ra, thư viện còn hỗ trợ xóa nền của ảnh.

Hình 4-26-Lớp xử lý ảnh Bitmap

4.2.1. Tạo Bitmap

IBitmap có thể được tạo dựa trên 3 hàm của interface IGraphics với các chức năng lần lượt là : tạo IBitmap từ đường dẫn một tập tin trong hệ thống, từ đối tượng Stream và từ đối tượng Bitmap. Ngoài ra, ta còn có thể xác định ảnh có được làm trong suốt nền hay không bằng giá trị transparent. Nếu giá trị này là true thì ảnh sẽ được xóa nền khi vẽ còn nếu không thì ảnh sẽ được giữ nguyên.

IBitmap CreateBitmap(Stream stream, bool transparent) IBitmap CreateBitmap(System.Drawing.Bitmap bmp,

bool transparent)

4.2.2. Sử dụng Bitmap

Interface IBitmap có thể được vẽ ra màn hình bằng các hàm trong interface IGrahpics :

 Vẽ ảnh lên một vùng nào đó lên đối tượng đồ họa. Ảnh sẽ tự động được biến đổi cho phù hợp với vùng cần vẽ (destRect)

void DrawImageTransparent(IBitmap image, Rectangle destRect)

 Vẽ một vùng trong ảnh gốc lên vị trí có tọa độ x, y

void DrawImageTransparent(IBitmap image, Rectangle srcRect, int x, int y)

4.2.3. Hủy Bitmap

Bitmap có thể được hủy bằng cách sử dụng hàm Dispose trong interface IBitmap. Mặc dù bản chất IBitmap ở đây được cài đặt bên dưới là managed code sẽ được bộ thu gom rác quản lý và tự động thư hồi bộ nhớ nhưng thao tác hủy cần thiết để dễ dàng hơn khi thay đổi cài đặt của lớp xử lý Bitmap đồng thời bộ nhớ cũng được quản lý tốt hơn.

Kết luận

Bằng cách sử dụng interface IBitmap để giao tiếp với các ảnh Bitmap, game xử lý với các ảnh chỉ thông qua interface. Mọi sự thay đổi về cách cài đặt lớp xử lý ảnh Bitmap đều trong suốt với người dùng. Nhờ đó, game có thể được mở rộng và phát triển về sau mà không cần cài đặt lại quá nhiều mã nguồn.

4.3. Xử lý chuỗi và Font

Vấn đề

Bên cạnh việc sử dụng các hình ảnh, game còn cần sử dụng các chuỗi. Do đó, chuỗi và Font là 2 phần không thể thiếu trong quá trình phát triển game nói chung cũng như thư viện đồ họa nói riêng.

Giải pháp

Thư viện đồ họa IGraphics có chứa sẵn hàm hỗ trợ tạo Font và vẽ chuỗi. Tuy nhiên, chúng em cần cài đặt thêm một số hàm tạo Font cũng như vẽ chuỗi để phù hợp với mục đích sử dụng trong quá trình phát triển game.

Các chức năng đã thêm :

 Tạo Font với tên Font, kích cỡ của Font và loại thể hiện của Font như in đậm, in nghiêng,...

 Các hàm vẽ chuỗi trong vùng xác định trên màn hình với hỗ trợ canh lề cho chuỗi trong vùng đã định (canh trái, canh phải, canh giữa).

4.3.1. Tạo Font

Thư viện gốc hỗ trợ tạo Font từ tên và các giá trị còn lại được khởi tạo mặc định.

IFont CreateFont(string fontName)

Tuy nhiên, nhóm chúng em cài đặt thêm chức năng cho phép tạo Font từ tên, kích thước và FontStyle để thuận tiện hơn khi vẽ chuỗi.

IFont CreateFont(string fontName, float fontSize, FontStyle fontStyle)

Một phần của tài liệu nghiên cứu và phát triển game trên windows mobile (Trang 61)