I. MIDP 2 Game Classes
Ngày nay, với sự phổ biến của J2ME và sự bùng nổ của các loại game trên điện thoại di động đã thôi thúc các nhà sản xuất tùy chỉnh lại các lớp để hổ trợ cho việc phát triển game. Và vấn đề chính ở đây chính là tính linh động(portability). Ví dụ, sử dụng lớp Sprite trong Siemens thì sẽ gặp rắc rối trong việc cài đặt cho các loại điện thoại Nokia, để khắc phục vấn đề này, bạn phải re-implement lớp Sprite.
Với MIDP 2.0, các vấn đề về tính linh động của game được giải quyết với 5 lớp sau:

  1. GameCanvas
  2. Sprite
  3. Layer
  4. LayerManager
  5. TiledLayer

Trong đó, lớp Layer là lớp trừu tượng, làm superclass cho các lớp: Sprite, LayerManager, và TiledLayer. Cả 5 lớp này nằm trong gói java.microedition.lcdui.game.
Không chỉ giải quyết được vấn đề về portability, mà nó còn làm cho code tối ưu hơn, nhỏ gọn hơn vì bạn không cần phải implement các lớp custom như Sprite, bởi các lớp này giờ là một phần underlying Java Enviroment trên mobile handset.
II. GameCanvas:
Lớp Canvas được thiết kế cho các ứng dụng hướng sự kiện(event-driven), đó là màn hình được cập nhật khi người dùng nhấn một phím hay một soft-key. Tuy nhiên, các ứng dụng game có xu hướng hướng thời gian(time-driven) và tiếp tục update screen cho dù người dùng có nhấn phím hay không, và lớp GameCanvas cung cấp cơ sở giao diện cho người dùng game, ngoài các đặc điểm kế thừa từ lớp Canvas, nó còn có các đặc điểm nổi bật hơn lớp Canvas. Đầu tiên, ứng dụn game được điều khiển một cách chính xác khi display được update, thay vì phải đợi system sofware gọi phương thức paint(). Thứ hai, nó điều khiển được vùng màn hình được update. Thứ 3, nó cung cấp các khả năng đặc biệt: đó là bộ đệm graphics off-screen và khả năng query trạng thái phím.
2.1. Key Polling:
Lớp GameCanvas cung cấp khả năng thu nhận trạng thái phím thay thế cho implement các phương thức callback để xử lý cho mỗi sự kiện phím. Key polling tạo ra sự logic trong việc xử lý phím và thực thi tại thời điểm thích hợp trong vòng lặp game. Đồng thời, nó cho phép detect việc nhấn nhiều phím tại 1 thời điểm trên thiết bị hỗ trợ chúng.
Phương thức getKeyStates() trả về trạng thái phím với một giá trị integer, mà mỗi bit của nó tương ứng với một specific key được nhấn hay đã được nhấn ở lần trước đó của phương thức getKeyStates(). Ví dụ:
int keyStates = getKeyStates();
if ((keyStates & UP_PRESSED) != 0) yPosition–;
if ((keyStates & DOWN_PRESSED) != 0) yPosition++;
if ((keyStates & FIRE_PRESSED) != 0) fireRocket();

2.2. Screen Buffer:
Không giống như lớp Canvas(chia sẻ tài nguyên screen với các ứng dụng khác), mỗi đối tượng GameCanvas sẽ có một screen-buffer riêng, để developer có thể vẽ lên nó tại bất kỳ thời điểm nào sử dụng đối tượng Graphics. Mỗi đối tượng Graphics được tạo ra bằng cách gọi phương thức getGraphics().
Nó tối thiểu được việc sử dụng bộ nhớ heap và tránh được lỗi bị flicker khi vẽ lại màng hình. Bạn chỉ cần gọi phương thức flushGraphics() để hiển thị đối tượng Graphics này ra màn hình. Kỹ thuật này thức chất là nó vẽ một image tạm thời từ đối tượng display thực tế, khi gọi phương thức flushGraphics() thì nó hiển thị đối tượng image tạm thời này lên màn hình. Nó có thể flush toàn bộ hay một vùng buffer. Các phương thức này sẽ không làm gì nếu GameCanvas không biểu diễn currently.