Hơn nữa, khi lập trình bạn không chỉ quan tâm đến sự khác nhau của từng nhà sản xuất mà còn đến sự khác nhau của các dòng sản phẩm của cùng 1 nhà sản xuất Mặc dù hầu hết các điện thoại
Cơ sở lý thuyết
Máy ảo java cho các điện thoại di động
Để có một chiếc điện thoại tốt, luôn đòi hỏi những phần mềm cao cấp đi kèm và tối ưu hóa trải nghiệm người dùng Tuy nhiên, trên thị trường hiện nay có quá nhiều nhà sản xuất điện thoại sử dụng nhiều công nghệ khác nhau, khiến người mua phải cân nhắc kỹ lưỡng khi chọn lựa Hiểu rõ nhu cầu sử dụng và so sánh các công nghệ sẽ giúp bạn chọn được điện thoại phù hợp với hiệu năng, bảo mật và trải nghiệm mượt mà.
Việc thiết kế các ứng dụng di động có thể chạy trên mọi dòng sản phẩm là một thách thức không nhỏ Tuy nhiên, với sự ra đời của J2ME, nó không chỉ đáp ứng được các vấn đề này mà còn tạo nền tảng quan trọng cho sự phát triển và đẩy mạnh các ứng dụng di động Độc lập với phần cứng và có thể chạy trên mọi nền tảng khác nhau của các nhà sản xuất, J2ME là một mục tiêu đồng thời là thế mạnh mà công nghệ này mang lại cho phát triển ứng dụng di động.
Quy trình xử lý mã nguồn Java bắt đầu khi được biên dịch, tạo ra mã bytecode - ngôn ngữ trung gian cho chương trình Java Mã bytecode này sau đó được chuyển thành ngôn ngữ máy phù hợp với thiết bị di động nhằm thực thi hiệu quả Tầng máy ảo Java, với sự có mặt của KVM (K Virtual Machine), đóng vai trò là bộ biên dịch và môi trường thực thi mã bytecode; nhiệm vụ của KVM là chuyển đổi mã bytecode của chương trình Java thành ngôn ngữ máy để chạy trên thiết bị di động một cách tối ưu.
Vai trò của máy ảo Java hay KVM là dịch mã bytecode được sinh ra từ các chương trình Java đã biên dịch sang ngôn ngữ máy Chính KVM sẽ chuẩn hóa output của các chương trình Java cho các thiết bị di động khác nhau, vốn có bộ vi xử lý và tập lệnh khác nhau Không có KVM, các chương trình Java phải được biên dịch thành tập lệnh cho từng thiết bị di động riêng biệt Do đó, lập trình viên phải xây dựng nhiều đích cho mỗi loại thiết bị di động.
Hình 1 Biểu diễn tiến trình xây dựng ứng dụng MIDlet hoàn chỉnh và vai trò của KVM
1.2 Lập trình java cho Mobile 1.2.1 Ngôn ngữ java a Java là một ngôn ngữ biên dịch Tuy nhiên khác với các ngôn ngữ biên dịch phổ biến khác như C/C++, chương trình nguồn Java không được biên dịch trực tiếp sang một mã máy đích cụ thể nào mà đƣợc biên dịch sang mã máy ảo Java Mã má ảo đƣợc thực hiện bởi máy ảo Java khi cần có thể đƣợc thông dịch sang hệ máy cụ thể Ưu điểm dễ nhận thấy của phương thức này là mã đích không phụ thuộc vào phần cứng hay hệ điều hành cụ thể do đó đảm bảo tính khả chuyển của chương trình
Nhược điểm lớn nhất là việc thực thi trong môi trường máy ảo khiến tốc độ xử lý chậm hơn so với khi được dịch sang mã máy và thực thi trực tiếp Vì vậy, hiệu suất tổng thể bị ảnh hưởng và độ trễ tăng lên so với phương pháp tối ưu bằng mã máy, dù ảo hóa mang lại lợi ích về tính linh hoạt và quản lý tài nguyên.
Một ưu điểm quan trọng của cơ chế máy ảo là cho phép kiểm soát truy cập đến các tài nguyên hệ thống, từ đó tăng cường bảo mật và ổn định cho các ứng dụng chạy trên nền tảng Java Quá trình phát triển Java tập trung vào tính tương thích giữa các nền tảng và khả năng viết mã một lần có thể chạy ở nhiều hệ điều hành khác nhau, nhờ JVM và hệ sinh thái phong phú So sánh công nghệ Java và Microsoft NET cho thấy Java là nền tảng mở, chạy trên JVM và hỗ trợ đa nền tảng, trong khi NET là nền tảng do Microsoft phát triển, tích hợp sâu với hệ sinh thái Windows và đang mở rộng ra nhiều nền tảng khác Cả hai đều cung cấp quản lý bộ nhớ tự động và tối ưu hóa hiệu suất, nhưng Java được đánh giá cao về tính độc lập nền tảng và cộng đồng phát triển mạnh, còn NET nổi bật với tích hợp hệ thống và tối ưu hóa trên Windows.
1.3 Giới thiệu về J2ME 1.3.1 J2ME(Java 2 Micro Edition):
J2ME được phát triển từ các kiến trúc Java Card, Embedded Java và Personal Java của Java 1.1 Đến sự ra đời của Java 2, Sun quyết định thay thế Personal Java và được gọi với tên mới là Java 2 Micro Edition, hay viết tắt là J2ME Đúng với tên gọi, J2ME là nền tảng dành cho các thiết bị có tính chất nhỏ gọn.
Java ban đầu được thiết kế dành cho các máy có tài nguyên bộ nhớ hạn chế, nên tối ưu cho các hệ thống nhỏ và hiệu suất ổn định Thị trường J2ME đã mở rộng đáng kể để phù hợp với nhiều loại thiết bị khác nhau, như điện thoại di động, PDA, set-top box và các thiết bị nhúng Nhờ các phiên bản Java Micro Edition tối ưu cho tài nguyên, các nhà phát triển có thể xây dựng ứng dụng di động và nhúng hiệu quả trên nhiều nền tảng, từ điện thoại di động cho tới các thiết bị IoT.
- Các loại thẻ cá nhân nhƣ Java Card
- Máy điện thoại di động
- Máy PDA (Personal Digital Assistant- thiết bị trợ giúp cá nhân )
- Các hộp điều khiển dành cho tivi ,thiết bị giải trí gia dụng
Các bộ công cụ phát triển J2ME hầu nhƣ đƣợc cung cấp miễn phí Đây sẽ là một thuận lợi cho những người mới bắt đầu với J2ME
J2ME nổi bật với một số tính năng ưu việt, bao gồm nội dung linh hoạt, bảo mật cao và khả năng tương thích nền tảng rộng Nó còn cung cấp các tính năng nâng cao, khả năng truy cập ngoại tuyến và mang sức mạnh của một ngôn ngữ lập trình hướng đối tượng hiện đại.
Hình 2 Kiến trúc của J2ME
Kiến trúc J2ME gồm ba thành phần chính là Cấu hình (Configuration), Hồ sơ (Profile) và Các gói tuỳ chọn (Optional Packages), nhằm xây dựng môi trường thực thi Java phù hợp với phạm vi rộng của các thiết bị và thị trường mục tiêu Các nhà sản xuất thiết bị có thể phát triển các tính năng mới trên thiết bị của họ hoặc cung cấp các dịch vụ và ứng dụng dựa trên các cấu hình và hồ sơ tương ứng Các cấu hình có thể được mở rộng với các thư viện bổ sung cho từng thiết bị, đảm bảo tính tùy biến và khả năng mở rộng của nền tảng J2ME trên nhiều loại thiết bị di động.
Cấu hình bao gồm máy ảo Java và một tập hợp rất nhỏ các hàm API theo đặc tả của một loại thiết bị nhất định
Để cung cấp một môi trường thực thi hoàn chỉnh cho các loại thiết bị nhất định, các cấu hình cần được kết nối với tập hợp các API ở mức cao hơn, nhằm tối ưu hóa hiệu suất triển khai và tính tương thích giữa các nền tảng Việc liên kết cấu hình với API cấp cao giúp tăng cường an toàn và khả năng mở rộng của hệ thống, đồng thời đảm bảo môi trường thực thi vận hành ổn định trên mọi thiết bị Quản lý và đồng bộ hóa các cấu hình với API mức cao hơn cũng cho phép triển khai dễ dàng hơn, cải thiện khả năng bảo trì và hỗ trợ phát triển ứng dụng trên đa nền tảng.
Nền tảng J2ME có thể được mở rộng bằng các gói tùy chọn đi kèm với cấu hình CLDC và CDC, mang lại các chuẩn cho việc tích hợp cả công nghệ hiện có lẫn công nghệ đang được ứng dụng rộng rãi như Bluetooth, dịch vụ web, nhắn tin không dây, đa phương tiện và kết nối cơ sở dữ liệu Các nhà sản xuất thiết bị có thể tích hợp thêm các gói tùy chọn này để thúc đẩy và tối ưu hóa các tính năng của thiết bị, mang lại khả năng mở rộng và tùy biến cao cho người dùng.
1.3.3 - MIDP(Mobile Information Device Profile)
Trong kiến trúc J2ME, tầng cao nhất là tầng hiện trạng, chịu trách nhiệm định nghĩa các API cho các thiết bị di động Một thiết bị di động có thể hỗ trợ nhiều hiện trạng khác nhau, và mỗi hiện trạng có thể áp đặt các giới hạn riêng, như yêu cầu bộ nhớ lớn hơn hoặc độ phân giải màn hình cao hơn.
Hiện trạng là tập hợp các API hữu ích hơn cho các ứng dụng cụ thể, giúp lập trình viên tập trung vào chức năng chính và tối ưu hóa hiệu suất cho từng trường hợp sử dụng Nhờ vậy, lập trình viên có thể viết một ứng dụng cho một hiện trạng cụ thể và không cần quan tâm đến việc nó sẽ chạy trên thiết bị nào, mang lại tính di động và khả năng tương thích cao trên nhiều nền tảng.
Giới thiệu về J2ME
J2ME (Java 2 Micro Edition) được phát triển từ sự kế thừa của Java Card, Embedded Java và Personal Java trên Java 1.1 Khi Java 2 ra đời, Sun quyết định bỏ Personal Java và giới thiệu nền tảng mới mang tên Java 2 Micro Edition, viết tắt là J2ME Đúng với tên gọi, J2ME là nền tảng dành cho các thiết bị có kích thước nhỏ gọn, phù hợp với yêu cầu xử lý và tính di động cao.
Java ban đầu được thiết kế dành cho các máy có tài nguyên bộ nhớ hạn chế Thị trường của J2ME sau đó được mở rộng để phù hợp với nhiều loại thiết bị khác nhau, từ điện thoại di động đến các thiết bị nhúng.
- Các loại thẻ cá nhân nhƣ Java Card
- Máy điện thoại di động
- Máy PDA (Personal Digital Assistant- thiết bị trợ giúp cá nhân )
- Các hộp điều khiển dành cho tivi ,thiết bị giải trí gia dụng
Các bộ công cụ phát triển J2ME hầu nhƣ đƣợc cung cấp miễn phí Đây sẽ là một thuận lợi cho những người mới bắt đầu với J2ME
J2ME nổi bật với các tính năng ưu việt như cung cấp nội dung linh hoạt và bảo mật cao, đồng thời đảm bảo tính tương thích nền tảng trên nhiều thiết bị di động Nó còn tích hợp các tính năng nâng cao và cho phép truy cập ngoại tuyến, giúp ứng dụng hoạt động hiệu quả ngay cả khi không có kết nối mạng Thêm vào đó, J2ME mang trong nó các đặc tính của một ngôn ngữ lập trình hướng đối tượng hiện đại, hỗ trợ phát triển ứng dụng di động an toàn, linh hoạt và dễ bảo trì.
Hình 2 Kiến trúc của J2ME
Kiến trúc J2ME gồm các thành phần Cấu hình (configuration), Hiện trạng (profile) và các gói tuỳ chọn (optional package) nhằm xây dựng và hoàn thiện môi trường thực thi Java, đáp ứng các yêu cầu cho phạm vi rộng các thiết bị và thị trường mục tiêu Các nhà sản xuất thiết bị có thể phát triển các tính năng mới trên chính thiết bị của họ hoặc cung cấp các dịch vụ, ứng dụng Các cấu hình có thể được mở rộng với các thư viện bổ sung dành cho từng thiết bị.
Cấu hình bao gồm máy ảo Java và một tập hợp rất nhỏ các hàm API theo đặc tả của một loại thiết bị nhất định
Hình trạng: Để cung cấp một môi trường thực thi hoàn thiện cho các loại thiết bị nhất định, các cấu hình phải được kết nối với một tập các API ở mức cao hơn Việc liên kết này đảm bảo sự nhất quán, khả năng mở rộng và hiệu suất của hệ thống trên các nền tảng thiết bị khác nhau, đồng thời tăng cường bảo mật và thuận tiện trong quá trình triển khai.
Nền tảng J2ME có thể được mở rộng hơn nữa thông qua các gói tùy chọn tương thích với cấu hình CLDC và CDC, cùng với các hình thức triển khai tương ứng Các gói tùy chọn này đặt ra các chuẩn cho việc sử dụng cả công nghệ hiện có và công nghệ đang được ứng dụng rộng rãi như Bluetooth, dịch vụ Web, nhắn tin không dây, đa phương tiện và kết nối cơ sở dữ liệu Các nhà sản xuất thiết bị có thể kèm theo các gói tùy chọn để thúc đẩy các tính năng của thiết bị.
1.3.3 - MIDP(Mobile Information Device Profile)
Tầng cao nhất của J2ME là tầng hiện trạng, có mục đích định nghĩa các API dành cho thiết bị di động Mỗi thiết bị di động có thể hỗ trợ nhiều hiện trạng khác nhau, và mỗi hiện trạng có thể áp đặt thêm các giới hạn đối với các loại thiết bị, ví dụ như yêu cầu bộ nhớ cao hơn hoặc độ phân giải màn hình lớn hơn.
Hiện trạng là tập hợp các API hữu ích, được tối ưu cho các ứng dụng cụ thể Nhờ đó, lập trình viên có thể viết một ứng dụng cho một hiện trạng nhất định và không cần quan tâm đến thiết bị sẽ chạy, từ điện thoại di động đến máy tính hoặc máy chủ, giúp tăng hiệu quả phát triển và dễ dàng triển khai trên nhiều nền tảng.
Hiện tại, MIDP (Mobile Information Device Profile) với đặc tả JSR-37 đang được công bố và có sự tham gia của 22 công ty là thành viên của nhóm chuyên gia phát triển chuẩn MIDP MIDP cung cấp các API cho phép thay đổi trạng thái vòng đời của ứng dụng, đồ họa ở mức cao và mức thấp, tuyến đoạn, timer, lưu trữ bền vững (persistent storage) và mạng Tuy nhiên, MIDP không định nghĩa cách mà ứng dụng được nạp trong thiết bị di động; đó là trách nhiệm của nhà sản xuất Nó cũng không định nghĩa bất kỳ mô hình bảo mật end-to-end nào, vốn cần thiết cho các ứng dụng kinh doanh nhận số thẻ tín dụng của người dùng Nó cũng không bắt buộc nhà sản xuất cách mà lớp MIDP được thực hiện.
MIDP là một Profile được định nghĩa dành riêng cho các thiết bị di động và là thành phần chính của J2ME, cung cấp các chức năng cơ bản cho hầu hết các dòng thiết bị di động phổ biến nhất hiện nay, bao gồm điện thoại di động và các máy PDA.
Các ứng dụng J2ME đƣợc gọi là MIDlet (Mobile Information Device applet)
Ứng dụng của MIDP với di động
MIDP là chuẩn phát triển ứng dụng Java cho các điện thoại Symbian, vì vậy hiện nay nhiều hãng điện thoại lớn đã ứng dụng công nghệ J2ME trên nền Symbian và hỗ trợ MIDP, giúp các ứng dụng Java trên điện thoại Symbian dễ triển khai và tương thích tốt với nền tảng di động.
Vào tháng 11 năm 2003, Sun đã tung ra MIDP 2.0 – phiên bản mới nhất của nền tảng MIDP – mang đến hàng loạt cải tiến so với MIDP 1.0, như nâng cao bảo mật, hỗ trợ form tốt hơn và khả năng chụp ảnh RGB.
Các thiết bị nhắm tới J2ME : Các hãng Điện thoại di động nhƣ : NOKIA, SAMSUNG, MOTOROLA, SIEEMS, TOSIBA, SHARP
1.3.5.Tìm hiểu về một ứng dụng trong ĐTDĐ
1 chương trình trên mobile được gọi là 1 MIDLet Chương trình này đƣợc đong gói vào một lớp kế thừa từ lớp có sẵn của JAVA là MIDLET
Khi người dùng khởi động ứng dụng MIDlet, bộ quản lý ứng dụng sẽ thực thi MIDlet thông qua lớp MIDlet và ngay sau khi bắt đầu ứng dụng được xem là ở trạng thái tạm dừng; bộ quản lý gọi hàm startApp(), hàm này có thể được gọi nhiều lần trong vòng đời của MIDlet; destroyApp() chỉ có thể được gọi từ trạng thái hoạt động hoặc tạm dừng Lập trình viên có thể điều khiển trạng thái của MIDlet bằng các phương thức như resumeRequest() để yêu cầu trở lại chế độ hoạt động, notifyPaused() để báo MIDlet tạm dừng (ví dụ khi chờ một sự kiện timer), và notifyDestroyed() để cho biết MIDlet đã sẵn sàng bị hủy (ví dụ xử lý nút Exit) Trong trường hợp đợi hết hạn của một timer, phương thức notifyPaused() được dùng để yêu cầu bộ quản lý ứng dụng chuyển MIDlet sang trạng thái tạm dừng Phần 1.3 mô tả tập tin JAR, nơi các lớp đã biên dịch của MIDlet được đóng gói cùng với các tài nguyên; JAR chứa tất cả các tập tin class từ một hoặc nhiều MIDlet và cả tệp dữ liệu cần thiết, đồng thời chứa tập tin manifest mô tả nội dung MIDlet cho bộ quản lý ứng dụng; hiện MIDP chỉ hỗ trợ định dạng hình ảnh png và tập tin JAR được tải xuống điện thoại di động.
Tập tin JAR chứa toàn bộ ứng dụng MIDlet, đồng thời là nơi lưu trữ mọi lớp và thành phần của ứng dụng trong môi trường Java ME MIDlet có thể load và triệu hồi các phương thức từ bất kỳ lớp nào trong tập tin JAR, thuộc MIDP và CLDC.
Nó không thể truy xuất các lớp không phải là bộ phận của tập tin JAR hay vùng dùng chung của thiết bị di động
1.3.5.2 Cách quản lý màn hình của ĐTDĐ : Điện thoại di động không quản lý trực tiếp trên màn hình nhƣ máy tính mà phải thông qua một đối tƣợng Display đƣợc lấy qua từ câu lệnh :
Hình 5 quản lý màn hình của ĐTDĐ
1.3.5.3 Kiến trúc tổng quan giao diện người dùng trong MIDP
J2ME game API
GameCanvas class
Lớp GameCanvas cho phép xử lý keyPressed() ngay lập tức thông qua phương thức getKeysState(), thay vì phải đợi sự kiện Để tối ưu hiệu suất vẽ, áp dụng kỹ thuật double buffering: vẽ trên off-screen buffer và sau đó sao chép từ buffer vào các canvas, giúp quá trình render nhanh hơn nhiều Bạn có thể lấy đối tượng Graphics bằng getGraphics() và sau khi hoàn tất có thể gọi flushGraphics() để giải phóng tài nguyên Graphics.
Layer class
Public void setPosition(int x, int y Public void Move (int dx, int dy):
Public void setVisible (boolean visible):
Sprite Class
Trong game, đồ họa đóng vai trò quyết định sự thành công của sản phẩm, ảnh hưởng mạnh mẽ đến sự thu hút và trải nghiệm người chơi Hầu hết các đối tượng đồ họa được phân loại như các dạng đặc biệt của đồ họa, được gọi là các thể loại đồ họa đặc thù nhằm tăng tính thẩm mỹ và sự sống động của trò chơi Việc tối ưu hóa đồ họa giúp game nổi bật giữa vô vàn tựa game khác và thúc đẩy sự gắn kết của người chơi.
Sprite Một Sprite có thể là bullet, monster, enemies, keys và doors và một vài cái gì đó…
Các sprite được nhân bản thành các đồ họa động, được tạo từ cùng một sprite nhưng ở các góc nhìn khác nhau Đây là một bộ sprite (sprite sheet) chứa các khung hình của hoạt ảnh.
Có 3 hàm khởi tạo với lớp Sprite Sprite (Image image); // Tạo ra khung Sprite đơn, không động Sprite (Sprite sprite); //Tạo ra Sprite mới từ một Sprite
Sprite (Image image,int frameWidth, int frameHeight); //Tạo ra Sprite động với từ 2 frame trở lên, frameWidth và frameHeight là độ rộng và chiều cao của 1 Sprite
The sprite sheet has a total width of 160 pixels, with each frame measuring 32 by 32 pixels For a single sprite set, the frameWidth and frameHeight are identical, while other sprite sets may use different dimensions Because 160 divided by 32 equals five, there are five frames per row in the sheet, enabling consistent animation sequences across the set.
Trong đồ họa máy tính, các Graphic thường chứa các sprite có kích thước chiều rộng và chiều cao cố định Số lượng pixel của sprite quyết định số màu có thể hiển thị và chất lượng hình ảnh Khi độ sâu màu của pixel ở mức 8-bit, 16-bit hoặc 24-bit, số màu tối đa lần lượt là 256 màu, 65.536 màu và 16.777.216 màu Hiểu mối quan hệ giữa kích thước, pixel và độ sâu màu giúp tối ưu hóa chất lượng hình ảnh, lưu trữ dữ liệu và hiệu suất hiển thị cho trò chơi hoặc ứng dụng đồ họa 2D.
: public void setTransform(int transform);
• F (16) public Sprite(Image image, int frameWidth, int frameHeight);
Sprite sprite = new Sprite (playerImage, 16, 16);
: public void nextFrame() public void prevFrame()
: public TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight);
Một TiledLayer là một lưới các ô chia ra từ 1 ảnh
Ví dụ: hình dưới được chia thành 6 vùng, ta chỉ ra các Tiled có 32x32 pixel
Tạo nên 1 lớp TiledLayer, mỗi 1 tile này đƣợc đánh số (bắt đầu từ 1) Đánh số từ trái sang phải rồi từ trên xuống dưới
: public void fillCells(int col, int row, int numCols, int numRows, int tileIndex);
: public int createAnimatedTile(int staticTileIndex); staticTileIndex :
: public void setAnimatedTile(int animatedTileIndex, int staticTileIndex);
: public void append(Layer l); append Layer
6 Công cụ lập trình của Netbeans
NetBeans IDE is an Integrated Development Environment (IDE) that mirrors the functionality and feel of Microsoft Visual Studio, and it is widely regarded as a must-download toolkit for software developers.
NetBeans IDE hỗ trợ đa nền tảng với Windows, macOS, Linux và Solaris Đây là một IDE nguồn mở và nền tảng phát triển ứng dụng cho phép các nhà phát triển nhanh chóng tạo ra các ứng dụng cho web, doanh nghiệp, desktop và di động bằng các ngôn ngữ lập trình Java, C/C++, JavaScript, Ruby, Groovy và PHP.
NetBean IDE hỗ trợ hai công VisualMidlet
Hình trên là tạo ra Sprite với Image duke.png Có thể tự điều chỉnh độ rộng độ dài của Frame
Tạo ảnh chuyển động của nhân vật.
Tạo ra khung hình trong game t
Chương 3: và thiết kế Game đơn giản
1 Mô tả của trò chơi
Tên trò chơi: Duke & Jame Logic trò chơi rất đơn giản :
1 Trò chơi có 2 nhân vật là: Duke và Jame
2 Nhân vật Duke sẽ đi bộ trong khung để tìm Jame
3 Duke có thể đi, nhảy, hoặc rơi Jame thì đứng một chỗ và đảo mắt xung quanh
4 Jame có thể đứng ở bất kỳ đâu trong khung
5 Khi Duke thấy Jame thì trò chơi kết thúc
6 Thời gian mà Duke đi tìm Jame thì sẽ được tính để ghi điểm người chơi
Thời gian mà Duke tìm thấy càng nhanh thì điểm càng cao
Trong lớp GameDesign hỗ trợ API dùng để quản lý layer mạnh và linh hoạt giúp việc xây dựng các cảnh game phức tạp một cách hiệu quả hơn
Tạo các đối tƣợng đồ hoạ để ập nhật lên màn hình
Lớp GameCanvas cho phép vẽ lên màn hình và đáp ứng dữ liệu nhập trong thân vòng lặp game thay vì dựa vào các luồng vẽ và nhập liệu của hệ thống GameCanvas cho phép bạn truy xuất trực tiếp đối tượng Graphics thông qua phương thức getGraphics(), và mọi thao tác vẽ trên đối tượng Graphics được thực hiện trong bộ đệm ngoài màn hình (offscreen) Sau đó bạn có thể sao chép bộ đệm vào màn hình bằng flushGraphics(), không cần chờ đợi cập nhật màn hình Cách tiếp cận này cho phép kiểm soát tốt hơn việc gọi repaint(), vì phương thức repaint() trả về ngay lập tức và ứng dụng của bạn không cần bảo đảm chính xác khi nào hệ thống sẽ gọi paint() để cập nhật màn hình.
GameCanvas cung cấp một phương thức thăm dò (polling) để lấy trạng thái bàn phím hiện thời của thiết bị, giúp bạn nắm bắt nhanh các phím được nhấn mà không phụ thuộc vào sự kiện Thay vì chờ hệ thống gọi phương thức keyPressed(), bạn có thể xác định ngay lập tức các phím đang được nhấn bằng cách gọi getKeyStates() của GameCanvas, từ đó tối ưu hóa phản hồi và điều khiển trong ứng dụng hoặc trò chơi Phương pháp thăm dò này cho phép nhận trạng thái bàn phím liên tục, tăng tính linh hoạt và hiệu suất xử lý trong các trường hợp cần phản hồi nhanh.
Cuối cùng là lớpVisualMIDlet java sử dụng lớp Canvas này
// Đối tƣợng GameMIDlet là lớp chính trong chương trình
// gọi đối tựong Display hiện thị Alert nếu màn hình game không hiển thị đƣợc
// hiển thị màn hình menu // các thao tác thực hiện trên Menu : Đồng thời gọi luôn đối tựong MazeCanvaz để hiện thị Game
// các hàm gọi để hiển thị màn hình nhƣ trên ảnh :màn hình About,
// Hàm thiết lập đối tƣợng mazeCanvaz
// Gọi đối tựong Display để hiện thị ra màn hình // Hàm bắt đầu ứng dụng //Hàm dừng chương trình để bắt các sự kiện timer
// Thiết lập hàm GameOver để thực hiện ghi điểm cho người chơi
// đối tƣợng MazeCanvas kế thừa GameCanvas // Hàm khởi tạo
// Hàm lấy trạng thái bàn phím để di chuyển nhân vật
// lấy trạng thái bàn phím // Hàm trả về giá trị biến MyGameOver
// lấy trạng thái phím để di chuyển và hiển thị màn hình ghi điểm
// Thực hiện vẽ đồ họa trên màn hình,và gọi hàm paint của đối tƣợng myManager
// Hàm update những thay đổi của hàm Paint hiển thị lên màn hình.Nếu không hiển thị đƣợc thì báo lỗi
// đối tƣợng MazeGameDesign để thực hiện các đối tƣợng đồ họa
// Các hàm để load các đối tƣợng : Image, Sprite,TiledLayer
// Đối tƣợng MazeManager kế thừa lớp thực hiện đồ họa của chuơng trình
// hàm khởi tạo gọi đối tƣợng MazeDesign
Trong bài viết này, chúng ta trình bày hàm di chuyển nhân vật Duke trong game Khi Duke gặp xung đột hoặc va chạm với đối thủ, hệ thống sẽ quay lại vị trí trước đó để đảm bảo luồng di chuyển hợp lý Gặp nhân vật Jame sẽ khiến Duke thắng Hàm thiết lập sự chuyển đổi của Duke cho phép thay đổi trạng thái và hình ảnh của nhân vật một cách mượt mà Trong khi Duke di chuyển, sprite của nhân vật được hiển thị để người chơi nhận diện các trạng thái hoạt động của Duke.
// lớp đối tƣợng thiết lập sự chuyển động của SpriteDuke
// lớp đối tƣợng GameThread để phân luồng cho các đối tƣợng khác của chương trình
//dừng Game // khởi động lại Game sau khi dừng chương trình
Hình 19 Hình ảnh quá trình của trò chơi :
LayerManager class
: public void append(Layer l); append Layer
Công cụ lập trình của Netbeans
NetBeans IDE is an integrated development environment (IDE) similar to Microsoft's Visual Studio and is regarded as a must-download suite for software developers, offering a comprehensive, cross-language toolkit for building, debugging, and deploying applications.
NetBeans IDE hỗ trợ nhiều hệ điều hành khác nhau như Windows, macOS, Linux và Solaris Đây là một IDE mã nguồn mở và là nền tảng ứng dụng cho phép nhà phát triển nhanh chóng tạo ra các ứng dụng cho web, doanh nghiệp, desktop và thiết bị di động bằng các ngôn ngữ lập trình Java, C/C++, JavaScript, Ruby, Groovy và PHP.
NetBean IDE hỗ trợ hai công VisualMidlet
Hình trên là tạo ra Sprite với Image duke.png Có thể tự điều chỉnh độ rộng độ dài của Frame
Tạo ảnh chuyển động của nhân vật.
Tạo ra khung hình trong game t
Chương 3: và thiết kế Game đơn giản
1 Mô tả của trò chơi
Tên trò chơi: Duke & Jame Logic trò chơi rất đơn giản :
1 Trò chơi có 2 nhân vật là: Duke và Jame
2 Nhân vật Duke sẽ đi bộ trong khung để tìm Jame
3 Duke có thể đi, nhảy, hoặc rơi Jame thì đứng một chỗ và đảo mắt xung quanh
4 Jame có thể đứng ở bất kỳ đâu trong khung
5 Khi Duke thấy Jame thì trò chơi kết thúc
6 Thời gian mà Duke đi tìm Jame thì sẽ được tính để ghi điểm người chơi
Thời gian mà Duke tìm thấy càng nhanh thì điểm càng cao
Trong lớp GameDesign hỗ trợ API dùng để quản lý layer mạnh và linh hoạt giúp việc xây dựng các cảnh game phức tạp một cách hiệu quả hơn
Tạo các đối tƣợng đồ hoạ để ập nhật lên màn hình
Lớp GameCanvas mới cho phép vẽ lên màn hình và đáp ứng dữ liệu nhập trong thân vòng lặp game, thay vì dựa vào các thread vẽ và nhập liệu của hệ thống Đầu tiên, GameCanvas cho phép bạn truy xuất trực tiếp đối tượng Graphics bằng phương thức getGraphics() Mọi công việc vẽ trên đối tượng Graphics được hoàn tất trong bộ đệm ngoài màn hình (offscreen) Sau đó bạn có thể sao chép bộ đệm vào màn hình bằng flushGraphics(), không cần đợi màn hình được cập nhật Cách tiếp cận này cho phép bạn điều khiển tốt hơn việc gọi repaint() Phương thức repaint() trả về ngay lập tức và ứng dụng của bạn không cần đảm bảo chính xác thời điểm hệ thống sẽ gọi paint() để cập nhật màn hình.
GameCanvas cung cấp một phương thức để lấy trạng thái hiện thời của bàn phím thiết bị thông qua kỹ thuật thăm dò (polling) Thay vì chờ hệ thống gọi phương thức keyPressed(), bạn có thể xác định ngay lập tức những phím được nhấn bằng cách gọi phương thức getKeyStates() của GameCanvas.
Cuối cùng là lớpVisualMIDlet java sử dụng lớp Canvas này
// Đối tƣợng GameMIDlet là lớp chính trong chương trình
// gọi đối tựong Display hiện thị Alert nếu màn hình game không hiển thị đƣợc
// hiển thị màn hình menu // các thao tác thực hiện trên Menu : Đồng thời gọi luôn đối tựong MazeCanvaz để hiện thị Game
// các hàm gọi để hiển thị màn hình nhƣ trên ảnh :màn hình About,
// Hàm thiết lập đối tƣợng mazeCanvaz
// Gọi đối tựong Display để hiện thị ra màn hình // Hàm bắt đầu ứng dụng //Hàm dừng chương trình để bắt các sự kiện timer
// Thiết lập hàm GameOver để thực hiện ghi điểm cho người chơi
// đối tƣợng MazeCanvas kế thừa GameCanvas // Hàm khởi tạo
// Hàm lấy trạng thái bàn phím để di chuyển nhân vật
// lấy trạng thái bàn phím // Hàm trả về giá trị biến MyGameOver
// lấy trạng thái phím để di chuyển và hiển thị màn hình ghi điểm
// Thực hiện vẽ đồ họa trên màn hình,và gọi hàm paint của đối tƣợng myManager
// Hàm update những thay đổi của hàm Paint hiển thị lên màn hình.Nếu không hiển thị đƣợc thì báo lỗi
// đối tƣợng MazeGameDesign để thực hiện các đối tƣợng đồ họa
// Các hàm để load các đối tƣợng : Image, Sprite,TiledLayer
// Đối tƣợng MazeManager kế thừa lớp thực hiện đồ họa của chuơng trình
// hàm khởi tạo gọi đối tƣợng MazeDesign
Trong trò chơi, hàm di chuyển nhân vật Duke đảm nhận việc di chuyển và xử lý va chạm với các chướng ngại, khi gặp xung đột Duke sẽ quay lại hoặc điều chỉnh vị trí để tiếp tục hành động Khi Duke gặp nhân vật Jame, Duke giành chiến thắng, thể hiện cơ chế thắng thua rõ ràng cho người chơi Trong quá trình Duke di chuyển, hệ thống hiển thị sprite tương ứng với trạng thái di chuyển, giúp người chơi nhận diện động thái của nhân vật một cách trực quan Đồng thời, có một hàm thiết lập sự chuyển đổi của Duke để quản lý các trạng thái và hiệu ứng chuyển đổi, đảm bảo gameplay liền mạch và hình ảnh đồng nhất.
// lớp đối tƣợng thiết lập sự chuyển động của SpriteDuke
// lớp đối tƣợng GameThread để phân luồng cho các đối tƣợng khác của chương trình
//dừng Game // khởi động lại Game sau khi dừng chương trình
Hình 19 Hình ảnh quá trình của trò chơi :
Kết quả đạt được
Môi trường cài đặt
Java là một ngôn ngữ lập trình có hiệu quả cao với tính độc lập nền tảng, vì vậy các ứng dụng viết bằng Java chỉ cần chạy trên máy ảo Java (JVM) để có thể cài đặt và chạy tốt trên mọi hệ thống Với JVM, Java mang lại khả năng di động và triển khai đa nền tảng, cho phép chương trình hoạt động trên máy tính để bàn, máy chủ và thiết bị di động mà không cần sửa đổi mã nguồn cho từng hệ điều hành.
Môi trường soạn thảo: NetBean IDE 6.0
Môi trường chạy chương trình: Sun J2ME Wireless Toolkit 2.5 (WTK)
Chạy ứng dụng Game
Write Username High Scores Table