+ void showNotify(): Đợc gọi trớc khi application manager vẽ đối tợng canvas lên màn hình
+ void hideNotify (): Đợc gọi sau khi application manager xoá đối tợng canvas khỏi màn hình
Hai phơng thức:
protected void showNotify(){ } protected void hideNotify(){ };
Đợc gọi bởi application manager trớc khi vẽ và sau khi xoá đối tợng canvas lên màn hình. Do đó, không gọi trực tiếp các phơng thức này trong chơng trình. Mà chỉ nên viết code trong các phơng thức này để cấp phát, khởi tạo các biến cũng nh tạo lập hay hủy các tiến trình xử lý cho việc vẽ các đối tợng lên Canvas.
3.3 Lớp Graphics
Chúng ta sử dụng đối tợng Graphics để vẽ lên màn hình Canvas. Lớp Graphics cung cấp sẵn trên 30 phơng thức hỗ trợ vẽ các đối tợng hình học cơ bản (đờng thẳng, đờng tròn, hình chữ nhật...), text, cũng nh điều khiển màu sắc, phông chữ... Có thể sử dụng lớp Graphics trong hai trờng hợp:
+ Trong phơng thức paint() của lớp Canvas: protected void paint(Graphics g){... } đối tợng Graphics này chỉ có giá trị bên trong phơng thức paint(), ra khỏi phơng thức này thì không còn dùng để vẽ lên Canvas đợc nữa.
+ Trong các đối tợng mutable image: Các immutable image thờng đợc tạo từ file hay resource, có tính cố định, không thay đổi. Do đó, ngời ta thờng dùng immutable image làm biểu tợng cho các thành phần trong ChoiceGroup, Form, List hay Alert. Ngợc lại, đối tợng mutable image chỉ là một vùng nhớ có kích thớc cố định đợc cấp khi khởi tạo.
VD: Image iImage=Image.createImage(80,20); Graphics gGraphics=iImage.getGraphics();
Đối tợng Graphics đợc tạo theo cách này có giá trị cùng với đối tợng Image. Khi đối tợng Image bị huỷ thì đối tợng Graphics tơng ứng cũng bi huỷ theo. Các phơng thức trong Graphics:
Graphics là một lớp đồ họa nên chúng cũng có các tính năng nh: màu sắc, nét vẽ, vẽ đờng tròn, vẽ chữ nhật, font chữ... giống các ngôn ngữ ta đã học. Tuy vậy Graphics cũng có những thay đổi so với các ngôn ngữ khác nh điểm neo, vẽ ảnh.
a. Điểm neo:
Để xác định tọa độ x, y của chuỗi ký tự đợc hiển thị, thì điểm neo cho phép chúng ta chỉ ra vị trí muốn đặt tọa độ (x,y) trên hình chữ nhật bao quang chuỗi ký tự.
Hình 3.2 Điểm neo cho chuỗi ký tự
Có 6 điểm neo đợc định nghĩa trớc, 3 theo chiều dọc và 3 theo chiều thẳng đứng. Khi xác định điểm neo để vẽ chuỗi (các điểm neo thờng đợc sử dụng thành từng cặp), ta phải chọn một điểm hoành độ và một điểm tung độ. Các điểm neo đợc định nghĩa nh ở dới đây:
Chiều ngang
RIGHT (Bên phải) Chiều dọc
TOP (ở trên)
BASELINE (Đờng thẳng cơ sở) BOTTOM (ở dới)
Khi sử dụng điểm neo thì cần phải chỉ ra tọa độ x, y của hình chữ nhật bao quanh. Ví dụ
g.drawString("developerWorks", 0, 0, Graphics.TOP | Graphics.LEFT);
Hình dới đây mô tả kết quả của hàm trên
Hình 3.3 Điểm neo TOP | LEFT cho chuỗi ký tự
Bằng cách thay đổi điểm neo, chúng ta có thể thay đổi vị trí hiển thị của chuỗi ký tự trên thiết bị di động. Ví dụ tiếp theo chúng ta sẽ minh họa tiếp khi thay đổi điểm neo thì vị trí của chuỗi ký tự cũng thay đổi theo:
Hình 3.4 Khi thay đổi điểm neo TOP | LEFT sang TOP | HCENTER
b. Vẽ ảnh
Lớp Graphics cung cấp 1 phơng thức dùng để vẽ ảnh: drawImage(Image img, int x, int y, int anchor)
Chúng ta cũng áp dụng từng bớc khi vẽ ảnh cũng giống nh khi xuất chuỗi ra màn hình, đều phải bắt đầu bằng việc thiết lập tọa độ x, y cũng nh điểm neo. Tuy nhiên, các điểm neo cho việc hiển thị ảnh cũng khác với việc xuất chuỗi là một bức ảnh có một điểm trung tâm. Ví thế VCENTER đợc thay thế cho giá trị BASELINE khi làm việc với ảnh.
Hình 3.5 Các điểm neo cho vẽ hình
3.4 Các gói hỗ trợ cho lập trình game
Các gói hỗ trợ lập trình game gọi chung là Game API. Các lớp dó nằm trong javax.microedition.lcdui.game. Một số lớp quan trọng nh GameCanvas, Layer, Sprites, TiledLayer, và LayerManager.
+ GameCanvas: Kế thừa từ lớp Canvas có thể coi đây là màn hình điện thoại.
+ Layer: ít đợc sử dụng trực tiếp nhng đợc kết hợp với Sprites và TiledLayer.
+ Sprites: Tạo các nhân vật và đối tợng chuyển động
+ TiledLayer: Để tạo khung cảnh khác nhau cho bản đồ
+ LayerManager: Để quản lý các Sprites và các TiledLayer.
Kế thừa các thuộc tính và phơng thức của lớp Canvas và có thêm một số phơng thức quan trọng trong việc giảm thời gian tính toán nhờ đó tăng tốc độ refresh() của màn hình. Nó có hai mở rộng so với Canvas là Poolling Input (lợc bỏ đầu vào) và frame buffer (dùng vùng đệm để chứa nội dung Canvas).