PDA

View Full Version : Lập trình game với J2ME


thinhnv_it
09-04-2008, 11:11 AM
Mọi người ơi. Có ai hứng thú về lập trình Java mobile game thì vào đây nhé. Mình đang muốn tìm người có cùng sở thích. Nếu bạn nào chưa bít về lĩnh vực này mà muốn tìm hiểu thì mình rất sẵn lòng.:GT3:

joe cole
09-04-2008, 04:16 PM
vậy hả mình cũng đang muốn tập tành nhưng chưa biết bắt đầu từ đâu.Nếu bạn sẵn lòng thì tốt quá

thinhnv_it
09-04-2008, 10:26 PM
Cám ơn bạn đã quan tâm. Mình rất hy vọng sẽ có nhiều bạn hứng thú với lĩnh vực này. Trước đây mình cũng đã có một thời gian làm việc trong lĩnh vực Java Mobile nên cũng có biết chút ít. Mình thường viết ứng dụng cho máy Sony Ericsson dòng K và dòng W. Đặc biệt là K750, W800 và W200i.
Trở lại vấn đề mà bạn nói. Để có thể bắt đầu lập trình được J2ME thì hiển nhiên bạn phải biết chút ít về Java căn bản (Core Java) hay ít nhất cũng đã từng lập trình trên một ngôn ngữ OOP. Như thế sẽ thuận lợi hơn. Nhưng nếu không biết cũng ko sao vì có thể vừa học vừa bổ sung, xong sẽ vất vả hơn nhiều.
Ngoài ra để có thể bắt đầu coding được thì bạn phải cài đặt các công cụ để phát triển ứng dụng. Có mấy lựa chọn như sau:
Lựa chọn 1: - Cài JDK sau đó cài đặt bộ phát triển ứng dụng Sun Wireless Toolkit
Lựa chọn 2: - Cài JDK sau đó cài một bộ Wireless Toolkit của một hãng khác như Sony Ericsson chẳng hạn
Trong các bộ Wireless tookit thì không có môi trường soạn thảo mã lệnh Java nên bạn phải dung một trình soạn thảo bên ngoài như Notepad chẳng hạn để soạn thảo mã lệnh, rất thô sơ và vất vả khi debug do đó bạn nên theo lựa chọn thứ 3
Lựa chọn 3: - Cài JDK sau đó cài đặt một IDE thông dụng vẫn dung để lập trình Java như NetBeans hay JBuilder có tích hợp gói ứng dụng Mobile. Đây là các môi trường phát triển ứng dụng hoàn hảo, hỗ trợ soạn thảo mã lệnh, kéo thả giao diện trên thiết bị di động. Đặc biệt NetBeans có thể tích hợp dễ dàng với các bộ Toolkit của Sun hay của Sony. Hơn thế nữa bản Netbeans mới nhất còn hỗ trợ việc thiết kế Titled Layer và Sprite khi lập trình với thư viện Game API của MIDP 2.0
Mình vẫn thường làm việc với NetBeans và tích hợp nó với bộ Sony Ericsson SDK.
Bạn có thể:
- Download bộ JDK tại trang chủ của Sun Microsystem: http://java.sun.com/javase/downloads/?intcmp=1281
- Download bộ NetBeans IDE và gói ứng dụng tích hợp mobile tại:
http://www.netbeans.org/
Sau khi download về đầu tiên bạn cài bộ JDK trước. Sau đó cài NetBeans IDE và cuối cùng là cài gói tích hợp mobility.
Chỉ cần có 3 thứ này là bạn đã có một môi trường phát triển ứng dụng cho mobile cực kỳ hoàn hảo và bạn có thể bắt tay vào coding được rồi.
Tuy nhiên gói tích hợp mobile của NetBeans dựa trên chuẩn của Sun Microsystem nên chỉ có một số mẫu điện thoại với cấu hình chung chung do Sun đưa ra chứ không phải của một hãng điện thoại cụ thể nào. Nếu bạn thích có thêm nhiều mẫu điện thoại mới đang có trên thị trường, bạn có thể download thêm các bộ Toolkit của các hãng điện thoại khác chẳng hạn như bộ SonyEricsson SDK trên trang: http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp
Hôm nay mình tạm giới thiệu đến đây đã. Bạn cứ download về cài đặt và làm quen với giao diện ứng dụng. Lần sau mình sẽ post tiếp về những vẫn đề căn bản nhất của ngôn ngữ lập trình J2ME. Chúc bạn thành công!

xOkyox
10-04-2008, 12:40 PM
Bác cho em yahoo để tiện liên lạc không.Em đang muốn học nhưng học 1 mình chán quá khon có ai cùng học

joe cole
10-04-2008, 01:43 PM
Ko thấy link của mobility bạn ơi.Mới cả cho mình hỏi bạn đã có tác phẩm game nào chưa,làm thế nào để thiết kế 1 game cho điện thoại của mình ( ý mình là trên thị trường có rất nhiều loại điện thoại vì thế game mình có phù hợp với ĐT đó ko)

thinhnv_it
10-04-2008, 05:37 PM
Địa chỉ mail của mình là nvthinh.vimaru@gmail.com
Link down bộ mobility nè http://download.netbeans.org/netbeans/6.0/final/start.html?bundles/netbeans-6.0.1-ml-mobility-windows.exe&platform=windows&lang=en&option=mobility

thinhnv_it
10-04-2008, 11:56 PM
Trước đây mình hay làm về các loại game có sử dụng trí tuệ nhân tạo như cờ gánh, cờ nhảy (checker), Logic box...
Để biết được điện thoại của mình có chạy được game hay ko thì phải xem các thông tin của nhà sản xuất. Ví dụ như cấu hình thiết bị là CLDC 1.1 hay 1.0, sử dụng MIDP 1.0 hay 2.0. Nếu muốn lập trình game 3D thì phải xem thiết bị có hỗ trợ bộ Java Mobile 3D Graphics API (JSR 184) hay ko? Nếu muốn truyền dữ liệu qua Bluetooth thì phải kiểm tra xem nó có hỗ trợ bộ Java API for Bluetooth (JSR 82) hay ko thì mới lập trình được...v..v. Ví dụ muốn lập trình cho điện thoại Sony Ericsson thì bạn có thể vào đây để tra cứu xem điện thoại đó hỗ trợ Java tới mức nào, cụ thể là nền tảng thiết bị loại nào và hỗ trợ những API gì:http://developer.sonyericsson.com/site/global/products/phonegallery/p_phonegallery.jsp
Thường thì người ta cố gắng viết các game sao cho có thể chạy trên được nhiều dòng điện thoại nhất nhưng tất nhiên điều này không phải lúc nào cũng được như ý. Thường thì các máy thuộc cùng một Seri gần nhau sẽ có mức độ hỗ trợ Java tương đối đồng đều. Chỉ khác nhau về một vài gói API tùy biến và về kích thước của màn hình thôi. Ví dụ cùng dòng Walkman của Sony chẳng hạn. Một game chạy được trên W800i thì gần như chắc chắn sẽ chạy được trên các máy khác thuộc dòng W (thậm chí cả một số máy thuộc dòng K nữa) miễn là kích thước màn hình đủ lớn.
Tóm lại để thiết kế một game thực sự tương thích với thiết bị bạn phải:
- Xác định rõ dòng điện thoại mình định thiết kế để xem cấu hình (CLDC và MIDP)
- Xác định xem các gói Java API mình định dùng có được thiết bị hỗ trợ hay không?
- Xác định các kích thước màn hình mà game có thể chạy. Thường thì một game chỉ được thiết kế để chạy trên một kích cỡ màn hình xác định.
Các thông tin này bạn phải tham khảo từ nhà sản xuất. Vấn đề nữa là không phải bất cứ hãng điện thoại di động nào cũng tuân thủ nghiêm ngặt chuẩn JAVA của Sun Microsystem. Họ có thể đưa ra các gói API của riêng họ để hỗ trợ việc lập trình cho các thiết bị đặc thù. Vì vậy tham khảo kỹ thông tin từ nhà sản xuất là yếu tố rất quan trọng
Thường thì Nokia, Sony Ericsson và Motorola tuân thủ khá nghiêm ngặt các chuẩn của Sun, đặc biệt là Sony Ericsson vì ba hãng này là 3 thành viên lớn nhất của cộng đồng phát triển Java (Java Community) được khởi xướng bởi Sun Microsystem.
Các hãng điện thoại của Nhật Bản và Hàn Quốc là thường không theo chuẩn chung nên lập trình cho bọn này khó hơn. Mình không tìm hiểu nhiều về mấy nhãn hiệu của Nhật Bản nên cũng không rõ chuẩn Java của nó thế nào nhưng mà chắc chắn là rất khác chuẩn của Sun. Điều này có tính chất lịch sử để lại vì chính Nhật Bản là quê hương của điện thoại màn hình màu và những ứng dụng Java game đầu tiên trên thế giới được phát triển bởi các hãng điện thoại ở Nhật (còn trước cả Sun Microsystem vì dù là cha đẻ của Java nhưng lúc đó Sun chưa nhận thấy được sự phát triển của thị trường thiết bị cầm tay). Các hãng điện thoại ở Nhật đã phát triển những chuẩn Java của riêng họ từ trước khi Sun đưa ra J2ME nên về cái này còn nhiều thứ để bàn lắm.

caubebutchi
12-04-2008, 09:42 AM
chào bạn thinh . bài biết bạn rất xuất sắc .Nhưng mình được biết các ứng dụng chạy java trên di động sẽ rất chậm .
----
Àh bổ sung thêm , hiên nay dường như bản Netbean 5.0 trở lên đều có hổ trợ JDK , khi cài netbean xong là JDK có sẳn luôn , (netbean 5.0 ,JDK 1.4 thì phải)
------------
Bạn thịnh cho mình yahoo nha . mình rất muốn liên hệ với bạn

caubebutchi
12-04-2008, 09:55 AM
theo mình . nước đi đầu tiên nhắm vào con K320i , vì con này đều hổ trợ chức năng đủ và cấu hình rất ngon , con W200i cũng không khác mấy . Mình thấy thị hiếu VietNam chủ yếu là các loại Mobile có màng hình 128x160 . cứ nhắm đến nó mà làm
CLDC 1.1 (JSR 139)
MIDP 2.0 (JSR 118)
Wireless Messaging 1.0 and 2.0 API's (JSR 120/205)
Mobile Media API (JSR 135)
Java Technology for the Wireless Industry (JSR 185)
PDA Optional Packages for J2ME Platform (JSR 75)
Web Services (JSR 172)
Java API for Bluetooth (JSR 82)
Mobile Java 3D
Mascot Capsule Micro3D Version 3
Mobile 3D Graphics API for Java ME (JSR 184)
---

thinhnv_it
12-04-2008, 10:57 AM
Cám ơn những ý kiến đóng góp của caubebutchi. Bạn nói rất đúng. Nhưng mình xin bổ sung thêm thế này.
Điện thoại chạy Java không hề chậm. Việc chạy chậm một phần là do lỗi của người thiết kế, hai là game không thực sự phù hợp với cấu hình máy (trên danh nghĩa máy có hỗ trợ Java đầy đủ nhưng cấu hình máy yếu quá nên chạy sẽ chậm). Một vấn đề nữa là một Mobile game khi được chạy giả lập bằng các bộ simulator trên máy tính thường chậm và chất lượng đồ họa kém xa so với khi chạy trên máy thật. Điều này nghe có vẻ như hơi nghịch lý vì người ta thường nghĩ máy tính thì tốc độ xử lý phải cao hơn rất nhiều. Nhưng thực ra không phải vậy. Để chạy một game mobile trên máy tính thì đầu tiên máy tính phải khởi tạo một môi trường máy ảo di động. Việc này mất thời gian và cũng khá tốn kém bộ nhớ. Chậm là đương nhiên thôi. Hai nữa là cũng ko nên quá ỷ lại vào các bộ simulator vì 1 game chạy tốt trên simulator thì chưa chắc chạy tốt trên điện thoại thật
Mình cũng nói thêm về NetBeans 1 chút. Nó có rất nhiều bộ Setup được đóng gói theo nhiều dạng cho người dùng lựa chọn. Có thể là NetBeans IDE đóng gói cùng JDK trong đó luôn thậm chí có bộ setup NetBeans IDE tích hợp luôn cả bộ mobility vào trong mà không cần phải cài riêng (bản 6.0.1 đó). Thậm chí nếu chọn download bộ cài full bạn có thể lập trình cả C/C++ và một số ngôn ngữ khác trên nó cơ. Thực ra NetBeans không thể so sánh được với JBuilder trong lập trình Java đâu. Nó chạy chậm lắm. Nhưng mình thích dùng NetBeans hơn vì nó là free, được cung cấp và hỗ trợ miễn phí bởi cộng đồng mã nguồn mở. Hi hi. Tôn trọng bản quyền mà lị. Quyết ko dùng JBuilder bản crack. JBuilder bản quyền thì ko có tiền mua nên dùng NetBeans thôi

caubebutchi
12-04-2008, 12:10 PM
chào bạn Thinh . Bạn nói rất đúng .Mỉnh cũng thích Netbean vì nó là free tất cả , và nó dễ cài đặc .Nhưng nó chạy khá nặng , cái này mình ko rõ lắm , vì ở nhà . dường như mình chạy không thấy nặng lắm . Mình cũng có nghịch nhiêu thằn như my Eclipse , thằng này rất cool , Nhưng mình vẫn thích Netbean hơn .
----------------
Mình đang thắc mắc là bản tookit bản cho trên developSE , mình down về ..nhưng không setup duoc . Cho nên khi muốn tạo Project thì nó báo không có ..hix hix
http://i55.photobucket.com/albums/g122/caubebutchi_2006/Hinh2-1.jpg
------------
Hiện tại giờ mình vẫn chưa có cái Sony ecrisson SDK 2.0.5 , Mình chỉ mới có Netbean 6.0 và JDK 1.5 và WireLess Toolkit 2.5.2 thôi .
-----------
Giờ bạn bắt đầu bài Tutorial đi , mấy cái thiết kế giao diện thì dễ rùi , chỉ có thực thi lệnh bằng Code thì hơi ẹ

joe cole
12-04-2008, 03:19 PM
bộ JDK ko down đc bạn ơi.Cho mình cái link trực tiếp luôn đi

caubebutchi
12-04-2008, 04:31 PM
Bản Netbean 6.0 có sẳn JDK 1.5

http://download.netbeans.org/netbeans/6.0/final/

Chọn cái ALL đó nha . Down về rùi setup là OK .
-----
Kiếm dùm bản SDK 2.0.5 nha ....chưa có bản này

thinhnv_it
13-04-2008, 12:57 PM
OK. Mình sẽ cố gắng nêu bật những ý cơ bản nhất. Có gì mong anh em đóng góp.

thinhnv_it
13-04-2008, 01:12 PM
Mục tiêu của J2ME là cho phép người lập trình viết các ứng dụng độc lập với thiết bị di động, ko cần phải quan tâm tới phần cứng thực sự của thiết bị (dù rằng điều này không phải bao giờ cũng được như mong đợi). Để đạt được mục tiêu này, J2ME được xây dựng trên nền tảng các tầng (layer) khác nhau để che giấu đi việc thực thi của phần cứng đối với các nhà phát triển ứng dụng.

Layer 4:Profile layer(MIDP-Mobile Information Device Profile)
Layer 3:Configuration Layer (CDC - CLDC)
Layer 2:Kilobyte Virtual Machine
Layer 1:Hardware

Mỗi tầng ở trên của tầng hardware là tầng trừu tượng hơn, cung cấp cho các lập trình viên nhiều giao diện lập trình ứng dụng (API – Application Program Interface) thân thiện hơn.

Đi dưới lên ta lần lượt điểm qua các tầng:
1.Tầng phần cứng thiết bị (Device Hardware Layer): đây chính là phần cứng của thiết bị di động được đặc trưng cơ bản nhất bởi dung lượng bộ nhớ trong và bộ vi xử lý (chú ý là nhiều thiết bị di động hiện nay dùng các bộ vi xử lý ARM). Các thiết bị di động dùng các bộ vi xử lý khác nhau sẽ có các tập mã lệnh ở dạng ngôn ngữ cấp thấp (Assembly) hoặc cấp trung (C/C++) khác nhau. Mục tiêu của J2ME là cung cấp một chuẩn chung cho nhiều loại thiết bị.
2.Tầng máy ảo Java (Kilobyte Virtual Machine Layer): Khi mã nguồn Java được biên dịch nó không được dịch ngay ra mã máy mà được biên dịch thành một dạng mã trung gian gọi là mã bytecode và được lưu trong các tập tin class là kết quả của quá trình biên dịch. Tầng máy ảo Java có nhiệm vụ biên dịch mã bytecode ra mã máy vào thời điểm thực thi của ứng dụng. Tầng này cung cấp một sự chuẩn hoá cho các thiết bị để ứng dụng J2ME sau khi đã biên dịch có thể hoạt động trên bất kỳ thiết bị di động nào có hỗ trợ nền tảng máy ảo KVM.
3.Tầng cấu hình (Congfiguration Layer): Để có thể hỗ trợ một phạm vi rộng lớn các sản phẩm phù hợp với nền J2ME, Sun Microsystem đưa ra khái niệm cấu hình (Configuration). Vậy cấu hình là gì? Có thể hiểu nôm na thế này, một cấu hình có nhiệm vụ định nghĩa ra một nền tảng Java đặc thù, dung chung cho một số lượng lớn các thiết bị cùng loại. Tương ứng với mỗi một cấu hình là một hệ máy ảo Java KVM đặc thù. Thật sự, cấu hình định nghĩa ra những đặc tính ngôn ngữ và những thư viện Java lõi của KVM dung chung cho các thiết bị cùng loại. Những đặc tính được xếp vào như những đặc trưng của cấu hình áp dụng chủ yếu cho phần bộ nhớ sử dụng, độ phân giải màn hình, giao thức kết nối mạng và sức mạnh xử lý sẵn có trên thiết bị,… Về cơ bản các thiết bị di động được chia thành 2 nhóm cấu hình:
Cấu hình dành cho các thiết bị được kết nối (Connected Device Configuration) gọi tắt là CDC. Nó cần tối thiểu 512KB bộ nhớ để chạy Java, 256 KB tối thiểu dành phân bổ cho bộ nhớ thực thi ứng dụng, có khả năng kết nối Internet băng thông rộng và thường trực. Các loại thiết bị như Pocket PC, Pocket PC phone, mốt số loại PDAs được xếp vào nhóm cấu hình này. Chú ý là các thông số ở trên chỉ là cấu hình tối thiểu để có thể chạy Java. Cần phải nói thêm rằng hầu hết các thiết bị cầm tay dạng Pocket PC và PDA hiện nay đều rất mạnh và thừa sức đáp ứng yêu cầu về cấu hình kể trên, nếu không muốn nói là đã vượt rất xa về sức mạnh xử lý. Chủ yếu là nhà SX có hỗ trợ Java hay ko thôi. Hơn nữa các ứng dụng trên PDA và Pocket PC chạy hệ điều hành Windows Mobile người ta chuộng viết bằng VB.Net hoặc C# hơn. Java không có ưu thế cạnh tranh trên các thiết bị loại này. Nếu có thì chủ yếu là ứng dụng game mà thôi, các ứng dụng khác nên viết bằng C# sẽ tận dụng được sức mạnh của thiết bị và hệ điều hành.
Cấu hình dành cho các thiết bị được kết nối có giới hạn (Connected Limited Device Configuration) hay vẫn gọi tắt là CLDC. Nó có những đặc điểm sau đây: cần tối thiểu 128KB bộ nhớ để chạy Java, trong đó 32KB tối thiểu phân bổ cho bộ nhớ thực thi ứng dụng, bị hạn chế về kích thước màn hình và giao diện người dung, nguồn năng lượng (Pin) thấp, kết nối Internet bị giới hạn, tốc độ chậm (chủ yếu qua GPRS). Hầu hết các loại mobile phone mà chúng ta đang dung xếp vào loại này. Chúng ta sẽ chỉ nghiên cứu chủ yếu phát triển ứng dụng Java trên nền tảng CLDC. Hiện nay có hai phiên bản CLDC là 1.0 và 1.1.
Chú ý: Mọi sự phân chia cũng chỉ là tương đối vì nó còn tuỳ thuộc vào nhà sản xuất. Một số Pocket PC Phone và rất nhiều PDAs có cấu hình được xếp vào CLDC chứ ko phải CDC. Do sự phát triển công nghệ nên, ranh giới phân biệt giữa Smart phone, PDA và Pocket PC ngày càng trở nên mờ hơn. Nếu có gì chưa chuẩn xác mong các bạn góp ý thêm.
4. Tầng hiện trạng (Profile Layer)
Định nghĩa về Configuration cho các thiết bị di động như trên là khá tốt cho hầu hết mọi loại thiết bị. Ví dụ các loại điện thoại di động và một số PDAs có thể xếp vào phân loại CLDC do những hạn chế về cấu hình và khả năng kết nối. Tuy nhiên so giữa điện thoại di động thông thường và các thiết bị PDA thì vẫn có thiết bị có khả năng xử lý cao hơn các thiết bị khác. Chẳng hạn kích thước màn hình của điện thoại thường nhỏ hơn so với PDA, không phải điện thoại nào cũng có màn hình cảm ứng (touch screen) như PDA. Nhằm mô tả những khác biệt này và cũng để cung cấp nhiều tính năng linh hoạt hơn khi công nghệ thay đổi, Sun Microsystem giới thiệu khái niệm profile dành cho thiết bị di động hay chúng ta vẫn quen gọi là MIDP (Mobile Information Device Profile). Một profile là sự định nghĩa mở rộng thêm cho một phân loại cấu hình configuration. Profile cung cấp những thư viện cho phép các nhà phát triển dung để viết những ứng dụng chạy trên một kiểu thiết bị đặc thù. Ở đây MIDP định nghĩa ra tập những hàm API cho phép xử lý những thành phần giao diện người dung đặc thù trên thiết bị di động, cách thức xử lý các sự kiện, nơi chứa dữ liệu, giao thức kết nối mạng, quản lý những hạn chế về kích thước màn hình và bộ nhớ mang tính đặc thù của thiết bị di động.
http://www.javaworld.com/javaworld/jw-11-2003/images/jw-1107-wireless2-thumb.png

caubebutchi
13-04-2008, 07:02 PM
phần J2ME này chủ yếu là căn bản hiểu thêm chức năng . Bạn vào phần chính luôn đi , Tạo Form và Code cho nó nha . Mong bạn cứ tiếp tục

thinhnv_it
13-04-2008, 09:00 PM
Okie. Đương nhiên rùi. Đấy sẽ là nội dung của bài 2. Bài 1 chỉ là giới thiệu qua qua, chủ yếu làm rõ 2 khái niệm CLDC và MIDP là kí gì thui:-) Mai mình sẽ đi vào phần coding luôn

thinhnv_it
14-04-2008, 10:54 PM
Một ứng dụng J2ME được gọi là một MIDlet. Nếu bạn nào đã từng lập trình với Java Applet thì sẽ thấy về phương diện cấu trúc và cách thức hoạt động, một MIDlet có cái gì đó từa tựa như một Applet dù về mặt nền tảng công nghệ hai cái này chẳng có gì lien quan đến nhau cả. Có thể hiểu nôm na thế này:một MIDlet là bộ khung tối thiểu, bắt buộc phải có của một chương trình J2ME, nó là nơi chương trình bắt đầu, cũng giống như hàm main() trong C++ vậy, chương trình dù lớn hay nhỏ kiểu gì cũng phải khai báo theo đúng cấu trúc đó
Cấu trúc của một MIDlet hay là của một chương trình viết bằng J2ME như sau:
import javax.microedition.midlet.*;

public class <tên của MIDlet> extends MIDlet
{
public <tên của MIDlet>()
{
/* Đây là hàm khởi tạo (constructor) luôn cùng tên với MIDlet. Nó chỉ được gọi một lần
duy nhất bởi bộ quản lý ứng dụng trong suốt vòng đời của MIDlet vào thời điểm MIDlet
được nạp bởi bộ quản lý ứng dụng.
Bạn sẽ đặt vào đây các mã lệnh mà bạn chỉ muốn thực thi một lần duy nhất
vào thời điểm chương trình khởi động như khởi tạo giá trị ban đầu cho các biến, khai
báo và xác lập các thành phần giao diện,…*/
}
public void startApp()
{
/*Đây là hàm sẽ được gọi bởi bộ quản lý ứng dụng khi MIDlet chuyển từ trạng thái paused (tạm ngừng) sang trạng thái hoạt động. Hàm này có thể được gọi đi gọi lại nhiều lần vì trong suốt vòng đời của mình MIDlet có thể chuyển đổi qua lại nhiều lần giữa trạng thái tạm ngừng và trạng thái hoạt động*/
}
public void pauseApp()
{
/*Hàm này sẽ được gọi bởi bộ quản lý ứng dụng khi MIDlet chuyển từ trạng thái hoạt động sang trạng thái paused. Ví dụ khi bạn đang chơi game thì đột nhiên có tin nhắn hoặc cuộc gọi đến. Ứng dụng J2ME phải tạm ngưng lại để cho phép người dung nhận cuộc gọi hoặc nhắn. Vào thời điểm ứng dụng chuyển từ trạng thái hoạt động sang tạm ngưng, hàm này sẽ được gọi. Bạn có thể đặt các mã lệnh lưu lại trạng thái hiện thời của trò chơi ở đây*/
}
public void destroyApp(boolean condition)
{
/*Hàm này được gọi bởi bộ quản lý ứng dụng khi ứng dụng chuẩn bị thoát. Tất cả những tài nguyên nào mà ứng dụng đang nắm giữ cũng cần được giải phóng vào thời điểm này. Bạn sẽ đặt các mã lệnh giải phóng tài nguyên ở đây. Ví dụ đóng kết nối Internet, tự đông save trạng thái của game trước khi thoát,….*/
}
}
Chú ý:
1.Từ khoá import dung để khai báo các gói thư viện đối tượng sẽ dung trong chương trình. Một ứng dụng MIDlet là một lớp kế thừa từ lớp MIDlet khung của J2ME
2.Tên của MIDlet do người dùng tuỳ chọn
3. Ngoại trừ hàm khởi tạo có thể có hoặc không còn lại bất cứ MIDlet nào cũng phải khai báo đủ các hàm (phương thức): startApp, pauseApp và destroyApp. Nếu hàm nào không dung tới thì để trống phần than.
4. Các hàm startApp và pauseApp chỉ có được thực thi tự động bởi bộ quản lý ứng dụng mỗi khi MIDlet chuẩn bị chuyển trạng thái. Người dung không thể can thiệp được và cũng không thể chủ động gọi các hàm này một cách tường minh bằng mã lệnh. Riêng hàm destroyApp có thể được thực thi bởi bộ quản lý ứng dụng nhưng nếu muốn người dung có thể chủ động gọi thực thi hàm này bằng mã lệnh.
Ngoài các hàm được thực thi tự động bởi bộ quản lý ứng dụng mà người dùng không can thiệp được, MIDlet còn có những hàm cho phép người dung gọi tực tiếp trong mã lệnh để điều khiển quá trình thực thi của MIDlet:
notifyDestroyed(): nếu người dung gọi hàm này trong mã lệnh của mình thì có nghĩa là người dung muốn ra lệnh cho bộ quản lý ứng dụng hãy đóng MIDlet. Hàm này có chức năng gần giống như hàm exit trong C++ hay C#: gọi ra để shutdown ứng dụng.
notifyPaused():Nếu ứng dụng đang trong trạng thái hoạt động bình thường mà người dung gọi hàm này thì ứng dụng sẽ bị chuyển sang trang thái tạm ngừng (Paused) bởi bộ quản lý ứng dụng
resumeRequest(): Ngược lại của hàm notifyPaused(). Nếu ứng dụng đang trong trạng thái tạm ngưng mà người dùng gọi hàm này thì ứng dụng sẽ quay trở về trạng thái hoạt động.
Các bạn hãy quan sát vòng đời của một MIDlet từ lúc được nạp tới lúc thoát:
http://www.stardeveloper.com/images/articles/bk_30.jpg
Bây giờ sẽ mình bắt tay vào viết một ứng dụng thật đơn giản để các bạn làm quen. Ta sẽ tạo ra một đối tượng Form, trên thanh Title bar của Form có dòng chữ “My J2ME Form” và sau đó tạo ra một chuỗi ký tự “Hello World” rồi đặt nó lên Form như một nhãn (label) của Form. Cuối cùng là hiển thị Form vừa tạo lên màn hình điện thoại
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*; //Khai báo gói thư viện chứa các thành phần giao diện người dùng
/**
*
* @author Nguyen Vuong Thinh
* @version
*/
public class myMidlet extends MIDlet
{
private Form myForm; //Khai báo biến đối tượng
private String label;//Khai báo một chuỗi
public myMidlet()
{
label="Hello World";
myForm=new Form("My J2ME Form");
//Thêm chuỗi ký tự lên Form với tư cách là 1 Item của Form
myForm.append(label);
}
public void startApp()
{
//Xác lập đối tượng giao diện được hiển thị lên màn hình lúc này là myForm
Display.getDisplay(this).setCurrent(myForm);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

caubebutchi
15-04-2008, 12:02 PM
1 bái viết quá chất lượng . và rất căn bản . tuyệt lắm bạn .. Mong bạn cứ tiếp tục .
---------
Cái xuất ra chử hello ...cái này là căn bản nhất ,bậy giờ . Bạn hãy làm 1 cái cao hơn đi . Mình thấy làm cái chương trinh Win Xp cho Mobile ,bằng java đi .
----------------
Àh ...sẳn tiện hỏi . Làm sao biết được kích thước chương trình ứng dụg . Bởi vì , máy nhà mình là K320i , màng hình 128x160
-----------------
Sau khi code xong , giờ làm sao xuất ra file .jar để cho vào điên thoại

thinhnv_it
15-04-2008, 10:36 PM
Khi bạn biên dịch và chạy thử trên NetBeans thì NetBeans đã tự đóng gói các tệp tin class và các tệp tin tài nguyên (nếu có) vào trong file jar cho bạn rồi. Bạn hãy vào trong thư mục project nơi bạn save ứng dụng của mình. Bạn sẽ thấy có trong thư mục project của bạn có 4 thư mục con tất cả, trong đó thư mục src là thư mục chứa mã nguồn. Còn thư mục dist là thư mục chứa file jar của bạn. Bạn copy file jar này vào điện thoại là chạy được thôi. Rất đơn giản.
Bạn hỏi kích thước nghĩa là sao? Khi bạn lập trình với các đối tượng giao diện người dùng cấp cao như Form, TextField, nút lệnh Command,... là những đối tượng giao diện đồ họa có sẵn thì không cần quan tâm tới kích thước màn hình. Thiết bị di động sẽ tự quyết định lấy việc hiển thị các đối tượng cho phù hợp với giao diện chung của thiết bị. Nếu bạn lập trình với các lớp đồ họa cấp thấp như Canvas hay GameCanvas (của MIDP 2.0) thì mới cần quan tâm tới kích thước màn hình. Các lớp này đều hỗ trợ các hàm getWidth() và getHeight() cho phép bạn lấy về kích thước ngang và kích thước dọc của màn hình mà từ đó có cách bố trí và hiển thị các đối tượng đồ họa cho hợp lý...:P
:-(
Còn bạn bảo mình làm chương trình Win XP cho mobile ư? Bạn nói nghiêm túc đấy chứ? Bạn đang đùa hay "xỏ xiên" mình thế? Viết Win XP cho mobile bằng Java? Đó là chuyện hoang đường nhất trên hành tinh. Chưa một lập trình viên nào trên trái đất này dám nghĩ tới chuyện đó đâu bạn ơi.
Mình không biết có phải là bạn không biết thật không hay bạn đang trêu mình? Bạn biết là những ứng dụng Java khi chạy trên PC hay trên điện thoại di động đều bị giới hạn và quản lý rất chặt chẽ bởi các bộ quản lý ứng dụng, bởi các tầng máy ảo và hệ điều hành, đấy chưa kể quá trình tiền xác minh mã để kiểm tra độ an toàn của mã bytecode trước khi ứng dụng được cài đặt lên thiết bị di động. Khả năng can thiệp vào hệ thống của các ứng dụng Java là cực thấp. Vì thế các ứng dụng Java được coi là rất "an toàn". Bạn có thấy bao giờ người ta viết virus bằng Java chưa? Để xây dựng hệ điều hành cho điện thoại di động người ta phải sử dụng các ngôn ngữ lập trình bậc trung (C/C++) dựa trên nền tảng phần cứng của thiết bị, thậm chí còn phải lập trình trên cả tập lệnh assembly của bộ vi xử lý nữa thì mới có thể can thiệp vào phần cứng được. Hơn nữa không phải điện thoại di động nào cũng có thể có hệ điều hành nếu nền tảng phần cứng không được nhà sản xuất cho phép. Cái này chắc bạn thừa biết. Cứ giả sử là Java có thể can thiệp vào phần cứng đủ mạnh để có thể dùng để viết hệ điều hành nhưng để làm điều đó thì phải là cả một công ty nghiên cứu và phát triển trong hàng năm trời. Bạn có biết Microsoft phải mất bao lâu để đưa ra phiên bản Windows Mobile đầu tiên không?
Dù chỉ là viết một chương trình kiểu như Windows Explorer cho điện thoại di động cũng đã là rất khó. Nếu viết bằng C# trên các thiết bị chạy hệ điều hành Windows Mobile như O2 XDA chảng hạn thì mình nghĩ là có thể làm được vì nó rất khả thi. Chứ viết bằng Java thì chưa nghe ai nói bao giờ, hay tại mình lạc hậu quá nên không biết? Mong được chỉ giáo thêm

caubebutchi
16-04-2008, 10:17 AM
Bạn thinh thân mến . cái vấn đề minh ko rõ là thế này .

http://developer.sonyericsson.com/site/global/products/phonegallery/k320/p_k320.jsp

Đây là chiếc điện thoại của mình , K320i . Cấu hình Java Micro editon của nó :

Java Micro Edition
CLDC 1.1 (JSR 139)
MIDP 2.0 (JSR 118)
Wireless Messaging 1.0 and 2.0 API's (JSR 120/205)
Mobile Media API (JSR 135)
Java Technology for the Wireless Industry (JSR 185)
PDA Optional Packages for J2ME Platform (JSR 75)
Web Services (JSR 172)
Java API for Bluetooth (JSR 82)
----

Khi mình tạo 1 Project Netbean , Mình buộc phải chọn CLDC 1.1 và MIDP 2.0 , vậy là mình buộc phải thay đổi thông số của Width va Height .Do K320i màng hình là 128x160 ( nó có main y như con w200i không khác là bao nhiêu) . Có phải vậy là mình nên thay đổi không . hay là cứ thế mà complain trên Netbean , thì khi setup vào Di đông là chạy được hết ah` . Vì có nhiều di dộng có kích thước màng hình khác nhau .
--------------
Ah` ..cái Winxp này ko phải là 1 cai Winxp chính cóng luôn nha bạn .Nó thực chất chỉ là 1 chương trình ứng dụng thôi .Nó không có khả năng thay thế chức năng của hệ thống Sony Ericsson .
Bạn có thể xem Demo clip ở đây :

http://youtube.com/watch?v=6TI9xZA8qlQ&feature=related

Nếu bạn cần tìm hiểu thì đây là bàn Java của nó : nhưng theo mình .. chúng ta nên làm lại 1 cái mới , vì cái này mỉnh đã Test rùi . Tạm được . Nhưng trong nó chán òm ah` ...

Chúng ta sẽ bắt tay đầu tiên là Project là Win Vista . Nó gồm những ứng dụng sau : Window Media 11( thực chất chỉ là 1 chương trình nghe nhạc thông thường , giao diện chỉ là Window Media 11 ) , InterNet Exploer (Thực chất chức năng của nó là chương trình OperaMini nhưng giao diện giống Internet Exploer) , Yahoomess Vista(Thực chất nó là YahooTiny , chỉ qua là giao diên thay đổi lại) , Notepad (làm 1 chương trình soan thảo ra File txt ) ,Ổ đĩa C ( thực chất chỉ là xem dung lượng ổ cứng trong của Mobile )... Còn nhiều cái đề thêm bớt lắm . Nếu bân nhắm làm được thì mình nên bắt tay . Mình sẽ mô tả project cho bạn xem .

caubebutchi
16-04-2008, 11:36 AM
Ok..Mình mô tả 1 chút về công việc .đầu tiên khi vào khởi động chương trình WinVista java . Cảnh đầu tiên là Bootskin

http://www.guistyles.com/wp-content/uploads/2006/05/5381.jpg

sau đó sẽ xuất hiện cái Welcome....

http://computershopper.com/images/vistascreens/IMG_0104.jpg

Sau đó nó sẽ chạy đến bản Login ( tại đây bạn nhập tên điện thoại , Vidu như điện thoại bạn là k320i , thì bạn nhập K320i , rồi Ok )

http://www.rohos.com/img/shots/windows-vista.jpg

...Ok sau khi nhập xong . Ban sẽ vào Destop , Theo mình Destop ko nên để Icon .

Destop :

http://i55.photobucket.com/albums/g122/caubebutchi_2006/V1.jpg


Mấy cái dự báo thơi tiết , không cần đâu bạn , bỏ , Ứng dụng của mình chỉ cần là Caladate ,Caculater,Notepad ,Window Media 11 ,yahoo , Internet Expoler , Và 1 số cái xem hệ thống và thông số máy :
------------------------
Khi cần cái gì vào Start chon Open Programge , 1 bản các ứng dụng xuất hiện , như thê này :

http://i55.photobucket.com/albums/g122/caubebutchi_2006/vista4.jpg
Caladate : xem lich ngày hôm nay ( chỉ có chức năng xem , không có chức năng thay đổi cũng như làm lịch báo )
Clock : Xem đồng hồ mấy giờ , Chỉ xem theo giờ hệ thống ( không có chức năng thay đổi).
Contact : Xem danh bạ điện thoại ( nội dung như trên)
CPU Master : Xem cấu hình máy , loại máy , nguồn bin , và bộ nhớ
Notes : Ghi 1 cái ghi chú ( chỉ có ghi và hiển thị ) khộng có chức năng save
SlideShow : trình diễn 1 cai hình ảnh có trong bộ nhớ
Các chương trình còn lại ta thay vào các icon là yahoo mess ,InternetExploer , NotePad,Window Media 11
---------------------
Vd : Khi click vào Window Media 11 : nó sẽ xuất hiện Window Media 11 như sau :

http://i55.photobucket.com/albums/g122/caubebutchi_2006/V2.jpg

InterNet Exploer :( hình mẫu thôi ,,nếu cần thiết kế lại giao diện , tôi sẽ giúp đở bạn)

http://www.nino.net/images/blog/GmailMobile1.jpg

Con nếu ta click vào đồng hồ , hay là các cái khác no sẽ xuất hiện ra Destop , như sau :

http://i55.photobucket.com/albums/g122/caubebutchi_2006/V4.jpg

bàn phím , hiền thị ,,,khi chúng ta muốn đánh nội dung cái gì đó :

http://i55.photobucket.com/albums/g122/caubebutchi_2006/v5.jpg

-------------
Yahoo Vista : ko cần hiển thi các Pictute của nguoi Online , chỉ cần hiển thị danh sách ai Online thôi : Ok

http://farm3.static.flickr.com/2287/2090279459_4396f687a2.jpg

http://i109.photobucket.com/albums/n58/quanzi_1507/Blogs/YahooMessengerforVista5.png
----------------
Nếu bạn muốn thoát chương trình , Vao Start chon Shut Down

http://img144.imageshack.us/img144/5774/vista6tb.jpg

thì nó xuất hiện ra cái này , Chon ShutDown rùi Ok là kết thúc chương trình

http://i55.photobucket.com/albums/g122/caubebutchi_2006/v3.jpg
----------
Bạn thấy thề nào , Nếu bạn nhắm là nỗi ,tớ sẽ phụ bạn 1 tay .về phần giao diện và âm thanh .Nếu bạn thấy cái nào wa khó , thì bạn cứ nói bỏ qua cái ấy .Cho cái Yahoo Mess tiện nói chuyện nha bạn

banhlevuthan
28-09-2010, 08:45 AM
Hay lắm, tiếp tục đi anh. Chỉ cho chúng em bắt đầu code như thế nào đi, mấy cái này khái quát quá!o4

to@n
28-09-2010, 02:23 PM
bạn này đào mộ à :| o114

hanleve
24-02-2011, 07:14 AM
xin phan mem lap trình j2me

Trungmeofatcat
06-05-2011, 12:27 PM
bạn ơi, hiện nay mình đang phải làm bài tập lớn về môn lập trình java này. Đề bài của mình là lập trình 1 game trí tuệ cho mobile. Hiện nay mình còn rất kém về phần này. Bạn có thể cho mình xin 1 file code của 1 game đơn giản để mình tham khảo đc không. Mình cám ơn các bạn rất nhiều!!

nongnamtlcb
06-05-2011, 12:43 PM
Bạn ơi nếu topic này lập từ năm 2010 thì còn có thể...Chứ bây giờ đã 3 năm rồi....

Trungmeofatcat
06-05-2011, 05:26 PM
tiếc là hùi đấy mình lại...chưa đủ tuổi hihi. Chẳng lẽ bây h huk còn ai giúp mình nữa hả bạn:((

quangvi1617
06-06-2011, 01:51 PM
Anh Thịnh à! Hiện tại em đang làm một đề tài liên quan đến J2ME, lập trình một game đơn giản. Em đang nghĩ em chọn đề tài :Bói toán tình yêu vui!. Hướng làm của em là như thế này : Nhập vào ngày năm sinh của 2 người hiện ra màn hình trên 2 tetbox. Sau đó, Sum( năm sinh của 2 người)/10 lấy phần dư. Tiếp theo, sử dụng câu lệnh Swtich(phần dư)...cace đưa ra một câu gì đó. Có nghĩa sẽ có 10 câu lệnh Case. Phần dư đó trùng Cáe nào thì sẽ hiện thị ra màn hình câu "bói" . Ý tưởng thì như thế nhưng không biết lập trình như thế nào. Nhờ anh giúp em cái Code để em tham khảo thêm.

Megasoftvn-2009
09-06-2011, 11:11 AM
Minh nghi ong nay chu nhiem lop minh lam.
Neu ko sai ban pm ong qua email
thinhnv@vimaru.edu.vn

quangvi1617
11-06-2011, 12:05 AM
Dù sao đi nữa cũng cám ơn U!

minh03120
11-06-2011, 09:20 AM
hum đọc từ đầu đến giờ mà ...
mình thấy dùng java làm game cũng tốt
nhưng mà game trên mobie chán lắm
giới hạn nhiều thứ quá
việc test cũng khó khăn vì nhiều hệ máy quá

cứ pc mà chơi cho nhàn

chu topic la sinh viên hay thầy giáo vậy

cùng trường mà không biết xưng hô là gì

quangvi1617
11-06-2011, 06:18 PM
Căn bản là mình đang làm môt đồ án lập trình mobile, chứ thụ sự mình không đủ thông minh để học lập trình. Mình guờ quyết tâm đi theo mạng mà thôi. Lập trình chẳng qua chỉ học đối phó mà thồi

Megasoftvn-2009
12-06-2011, 02:07 PM
Chu topic hinh nhu la thinh kute day he thong thong tin truong menh do. Goi la thay dc oi :D.

minh03120
12-06-2011, 05:57 PM
thầy nào nhỉ có phải ông thầy dạy cơ sở dữ liệu không nhỉ

Megasoftvn-2009
13-06-2011, 06:46 AM
Ko biet ong co day mon do ko nua. :D
Ong ay chu nhiem lop em ma =))

taptanhlamgame
27-09-2011, 09:51 AM
èo, tưởng là có gì hay, toàn chém gió thui, hik.
Không biết còn bạn nào quan tâm đến lập trình game mobile này không nhỉ? Mình cũng muốn có người để thảo luận cùng mà kiếm khó quá, vào diễn đàn nước ngoài hỏi một vấn đề cũng có ít ng comment, có ai quan tâm thì cm lại cho mình với nhé.

tuancho91
16-10-2011, 09:33 PM
em mới học làm game java (mới làm trên máy tính) và có ý định chuyển sang làm game trên mobile
bác có tài liệu nào không send cho em với
có một source code game mobile do bác viết nữa thì càng tốt :)

taptanhlamgame
20-10-2011, 12:06 PM
cậu làm về game gì ấy chứ, còn source code game nói chung thì nhiều lắm, google là ra mà, giờ mình đang nghiên cứu để làm game có thể hiển thị trên nhiều loại màn hình mà vẫn giữ được nguyên kích thước nhân vật và vị trí. ^^

tuthanbatbai
02-11-2011, 02:35 PM
Em Mới học lập trình nhúng game trên di động . Có bài này em chưa biết làm mong các pro giúp đỡ hướng dẫn cho em.Thank ngàn lần

: Viết chương trình ghi thông tin sinh viên sau:
- Mã số sinh viên (text)
- Họ và tên (text)
- Ngày sinh (date)
- Trình ngoại ngữ : có danh sách một số ngôn ngữ để chọn - dạng chọn nhiều mục (CheckBox)
- Chiều cao : (có 3 mức: cao, bình thường, thấp) danh sách chọn dạng Radio
Sau đó chọn Ok thì viết các nhập liệu trên ra.

taptanhlamgame
07-11-2011, 02:56 PM
Em Mới học lập trình nhúng game trên di động . Có bài này em chưa biết làm mong các pro giúp đỡ hướng dẫn cho em.Thank ngàn lần

: Viết chương trình ghi thông tin sinh viên sau:
- Mã số sinh viên (text)
- Họ và tên (text)
- Ngày sinh (date)
- Trình ngoại ngữ : có danh sách một số ngôn ngữ để chọn - dạng chọn nhiều mục (CheckBox)
- Chiều cao : (có 3 mức: cao, bình thường, thấp) danh sách chọn dạng Radio
Sau đó chọn Ok thì viết các nhập liệu trên ra.

Cái này, Mã số sinh viên với họ tên thì cậu chọn textbox là xong mà
TextBox name = new TextBox("", null, 20, TextField.any); //đạu loại giống như vậy
rồi muốn show thì add vào form
cái ngày tháng năm sinh thì phải xử lý xâu nhập vào và number, chứ j2me không có định nghĩa rõ ràng về date time, có lịch và lấy time, nhưng tớ cũng chưa gặp kiểu nhập chọn ngày tháng bao giờ đâu.
Mà lập trình nhúng game trên di động là sao? nó là links game giới thiệu hay là game, cái bạn đưa ra đây là ứng dụng rồi, ko phải game, ứng dụng thì làm dễ hpn game, vì các lớp nó định nghĩa sẵn rồi, sử dụng form là được.
Về trình ngoại ngữ và chiều cào bạn sử dụng list, theo mình thấy ở đây có 2 list cần show.
Bạn có thể tham khảo về j2me tại javatips.com
cứ viết đi nhé, có gì cứ hỏi.

tuthanbatbai
09-11-2011, 08:27 PM
Cái này, Mã số sinh viên với họ tên thì cậu chọn textbox là xong mà
TextBox name = new TextBox("", null, 20, TextField.any); //đạu loại giống như vậy
rồi muốn show thì add vào form
cái ngày tháng năm sinh thì phải xử lý xâu nhập vào và number, chứ j2me không có định nghĩa rõ ràng về date time, có lịch và lấy time, nhưng tớ cũng chưa gặp kiểu nhập chọn ngày tháng bao giờ đâu.
Mà lập trình nhúng game trên di động là sao? nó là links game giới thiệu hay là game, cái bạn đưa ra đây là ứng dụng rồi, ko phải game, ứng dụng thì làm dễ hpn game, vì các lớp nó định nghĩa sẵn rồi, sử dụng form là được.
Về trình ngoại ngữ và chiều cào bạn sử dụng list, theo mình thấy ở đây có 2 list cần show.
Bạn có thể tham khảo về j2me tại javatips.com
cứ viết đi nhé, có gì cứ hỏi.

Mấy cái phần đầu thì mình viết rồi.Còn phần mà ấn OK thì xuất ra mình k biết làm thế nào hết. Bạn hướng dẫn mình được k??Thank bạn

taptanhlamgame
10-11-2011, 11:15 AM
Để xuất ra, cậu tạo một form khác, khi ấn ok sẽ gọi đến form đó.
Để lấy thông tin trong textbox thì sử dụng hàm getString(), thông tin trong list thì sử dụng index( mỗi list đều có chỉ số lựa chọn cho từng mục mà, bạn duyệt xem cần lấy hay mục nào được đánh dấu thì lấy giá trị của nó ra).
Thực tế ở đây rõ ràng bạn phải có 2 form, một nhập vào và 1 hiển thị thông tin.

thanklee
14-11-2011, 09:57 AM
Mọi người ơi. Có ai hứng thú về lập trình Java mobile game thì vào đây nhé. Mình đang muốn tìm người có cùng sở thích. Nếu bạn nào chưa bít về lĩnh vực này mà muốn tìm hiểu thì mình rất sẵn lòng.:GT3:

a thinhnv_it thân!
e đang muốn học về lập trình game, nhưng chưa tiếp cận nhiều nên không hiểu lắm.
nếu a có kinh nghiệm & tài liệu hay rất mong được anh share.
e cũng rất vui nếu được làm quen vs a!
e là Thành, hiện đang học ở hanoi. còn a?^^
mail của e là: thanklee.it@gmail.com
có gì a mail giúp e nha.
mong hồi âm từ a.
tks a nhìu!

thanhga0210
17-11-2011, 10:54 PM
Mình đang làm 1 cái game nhỏ , game này thì chơi như kiểu bluetooth với nhau. Không biết bạn nào ở đây có cái chương trình nào mà kết nối 2 máy lại và truyền dữ liệu với nhau ko .
Mình đang mắc ở chỗ này . Tks các bạn trước nhé !!!

thanhga0210
17-11-2011, 11:02 PM
Mình cũng đang làm 1 game nhỏ về java trong đó có kết nối bluetooth giữa 2 máy . Bạn nào có Project nào mà liên quan đến kết nối giữa 2 máy , truyền dữ liệu từ máy này sang máy kia thì có thể chia sẻ cho mình đc ko . Tks các bạn trước nhé !!!

tuthanbatbai
27-11-2011, 06:42 PM
Để xuất ra, cậu tạo một form khác, khi ấn ok sẽ gọi đến form đó.
Để lấy thông tin trong textbox thì sử dụng hàm getString(), thông tin trong list thì sử dụng index( mỗi list đều có chỉ số lựa chọn cho từng mục mà, bạn duyệt xem cần lấy hay mục nào được đánh dấu thì lấy giá trị của nó ra).
Thực tế ở đây rõ ràng bạn phải có 2 form, một nhập vào và 1 hiển thị thông tin.

Cái đó thì mình có thể hiểu.Nhưng quan trọng là time.Làm sao xuất ra được thời gian mình tạo trong form 1 khi xuất ra form 2?

tuthanbatbai
27-11-2011, 06:46 PM
Để xuất ra, cậu tạo một form khác, khi ấn ok sẽ gọi đến form đó.
Để lấy thông tin trong textbox thì sử dụng hàm getString(), thông tin trong list thì sử dụng index( mỗi list đều có chỉ số lựa chọn cho từng mục mà, bạn duyệt xem cần lấy hay mục nào được đánh dấu thì lấy giá trị của nó ra).
Thực tế ở đây rõ ràng bạn phải có 2 form, một nhập vào và 1 hiển thị thông tin.

Cái đó mình hiểu nhưng mình k biết cách làm sao xuất ra thời gian được.Xuất tên địa chỉ thì dùng getstring() nhưng thời gian thì sao??

taptanhlamgame
12-12-2011, 08:28 AM
bạn sử dụng textbox để nhập dữ liệu, mà lấy dữ liệu từ textbox thì là getString().
Nó là hàm lấy dữ liệu chung cho ô text nhập vào mà.

tvmd61
17-02-2012, 11:43 PM
chào các bạn: mình cũng đang tìm hiểu và học về lập trình java cho dt. mình thấy chia sẽ và những bài viết của thinhnv_it rất hay nhưng 3-4 năm rồi không thấy hồi âm. không biết có ai cùng đam mê chia sẽ với nhau về lập trình java j2me không? bây h mình cũng đang dùng NetBeans IDE để học nhưng nói thật mình vẫn chưa viết đc code nào nên hồn. mấy mài cơ bản thì biết chứ sâu vào thì .. :) mong các bạn chia sẽ

anh2it
19-03-2012, 11:07 PM
Bài viết của anh hay quá. Rất mong anh có những bài viết hay và bổ ích như vậy để chúng em học tập. Em hiện đang tìm hiểu về J2ME, rất mong anh chỉ bảo thêm.Mong anh sớm có những bài viết mới để hướng dẫn tụi em. Cảm ơn a rất nhiều.

duxuan89
24-05-2012, 03:38 PM
Có bác nào biết về phần bắt phím bấm trong j2me game API giúp mình với.
mình có viết một đoạn code sử dụng hàm getKeyState và phương thức keyPress().
KeyPress() thì không chạy được còn cái pt input() dùng getKeyState thì nó chạy lung tung hết cả lên.luk thì nó chạy bình thường (ít) luk thì nó chạy cứ như mình nhấn phím hai lần :((

Đoạn code như sau:


import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;


public class OsoCanvas extends GameCanvas implements Runnable{

int x,y;//chieu dai va cao cua man hinh
int n,d;//chieu ngang cua o so,chieu doc cua o so
Image img;
boolean b,b1;//b:xac dinh thread chay hay khong;b1:xac nhan o so thu nhat da duoc chon hay chua
public TiledLayer background;
public Graphics g;

int [][] cells={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},
{17,18,19,20},
{21,22,23,24},
{25,26,27,28},
{29,30,31,32}
};
Sprite sp1,sp2;
int sp1_x;//luu hoanh do hien tai cua sp1
int sp1_y;//luu tung do hien tai cua sp1
int sp2_x;//luu hoanh do hien tai cua sp2
int sp2_y;//luu tung do hien tai cua sp2
int sp1_frame;//luu o hien tai dang duoc tro toi
int sp2_frame;//luu o hien tai dang duoc tro toi

protected OsoCanvas() {
super(true);
x=getWidth();
y=getHeight();
n=x/4;
d=y/8;
sp1=new Sprite(load(2), n, d);
sp2=new Sprite(load(2), n, d);
sp1_x=0;
sp1_y=0;
sp2_x=0;
sp2_y=0;
sp1_frame=0;
sp2_frame=0;
background=new TiledLayer(4, 8, load(0), n, d);
b1=true;
}

public void draw1(Graphics g, int x0, int y0){
g.setColor(0x000040);
g.fillRect(x0, y0, n, d);
g.setColor(0x5500ff);
g.drawRect(x0, y0, n, d);
g.drawRect(x0, y0, n-1, d-1);
g.drawRect(x0, y0, n+1, d+1);

}
public void draw2(Graphics g, int x0, int y0){
g.setColor(0x0f009f);
g.fillRect(x0, y0, n, d);
g.setColor(0x550000);
g.drawRect(x0, y0, n, d);
g.drawRect(x0, y0, n-1, d-1);
g.drawRect(x0, y0, n+1, d+1);

}
public Image load(int i){
Image imgS = Image.createImage(getWidth(), getHeight());
Graphics gimg = imgS.getGraphics();
for(int j=0;j<4;j++)
for(int k=0;k<8;k++){
if(i==0){
draw1(gimg,j*n,k*d);
}
else{
draw2(gimg,j*n,k*d);
}
}
return imgS;
}
public void flushKey(){
getKeyStates();
}

public void start(){
Thread t = new Thread(this);
b=true;
t.start();
}
public void stop(){
b=false;
}

public void run() {

g=getGraphics();
while(b){
input();
painip(g);
flushGraphics();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}

public void painip(Graphics g){
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x0000ff);
//input(keyStates);
Image image=null;
//image=getAnh1();
//g.drawImage(image,0, 0, Graphics.TOP|Graphics.LEFT) ;
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 4; col++) {
background.setCell(col, row, cells[row][col]);
}
}
background.paint(g);
sp1.setFrame(sp1_frame);
sp1.setPosition(sp1_x, sp1_y);
sp1.paint(g);
if(b1==false){
sp2.setFrame(sp2_frame);
sp2.setPosition(sp2_x, sp2_y);
sp2.paint(g);
}
//draw2(g, sp1_x, sp1_y, s[sp1_frame]);
g.drawString("x", sp1_x+6, sp1_y+6, Graphics.BASELINE|Graphics.HCENTER);
}

public Image getAnh1() {
Image imgs=null;
if (imgs == null) {
try {
// write pre-init user code here
imgs = Image.createImage("/platform_tiles.png");
} catch (IOException ex) {
imgs= null;
}
}
return imgs;
}
public void input() {
int keyStates=getKeyStates();
if(b1==true){
// Left
if ((keyStates & LEFT_PRESSED) != 0) {
sp1_x=sp1_x-n;
if(sp1_x<0) {
sp1_x=x-n;
sp1_frame=sp1_frame+3;
}
else{
sp1_frame=sp1_frame-1;
}
}
// Right
if ((keyStates & RIGHT_PRESSED) !=0 ) {
sp1_x+=n;
if((sp1_x+2)>x) {
sp1_x=0;
sp1_frame-=3;
}
else{
sp1_frame++;
}
}

// Up
if ((keyStates & UP_PRESSED) != 0) {
sp1_y-=d;
if(sp1_y<0) {
sp1_y=y-d;
sp1_frame+=28;
}
else{
sp1_frame-=4;
}
}

// Down
if ((keyStates & DOWN_PRESSED) !=0) {
sp1_y+=d;
if((sp1_y+2)>y) {
sp1_y=0;
sp1_frame-=28;
}
else{
sp1_frame+=4;
}
}
if((keyStates & FIRE_PRESSED)!=0){
sp2_x=sp1_x;
sp2_y=sp1_y;
sp2_frame=sp1_frame;
b1=false;
}
}
if(b1==false){
if ((keyStates & LEFT_PRESSED) != 0) {
sp2_x=sp2_x-n;
if(sp2_x<0) {
sp2_x=x-n;
sp2_frame=sp2_frame+3;
}
else{
sp2_frame=sp2_frame-1;
}
}
// Right
if ((keyStates & RIGHT_PRESSED) !=0 ) {
sp2_x+=n;
if((sp2_x+2)>x) {
sp2_x=0;
sp2_frame-=3;
}
else{
sp2_frame++;
}
}

// Up
if ((keyStates & UP_PRESSED) != 0) {
sp2_y-=d;
if(sp2_y<0) {
sp2_y=y-d;
sp2_frame+=28;
}
else{
sp2_frame-=4;
}
}

// Down
if ((keyStates & DOWN_PRESSED) !=0) {
sp2_y+=d;
if((sp2_y+2)>y) {
sp2_y=0;
sp2_frame-=28;
}
else{
sp2_frame+=4;
}
}
if((keyStates & FIRE_PRESSED)!=0){

}
}
}
protected void keyPressed(int keyCode) {
int k= getGameAction(keyCode);
switch (k){
case UP:{
sp1_y-=d;
if(sp1_y<0) {
sp1_y=y-d;
sp1_frame+=28;
}
else{
sp1_frame-=4;
}
break ; }
case DOWN: {
sp1_y+=d;
if((sp1_y+2)>y) {
sp1_y=0;
sp1_frame-=28;
}
else{
sp1_frame+=4;
}
break ; }
case LEFT: {
sp1_x=sp1_x-n;
if(sp1_x<0) {
sp1_x=x-n;
sp1_frame=sp1_frame+3;
}
else{
sp1_frame=sp1_frame-1;
}
break ; }
case RIGHT:{
sp1_x+=n;
if((sp1_x+2)>x) {
sp1_x=0;
sp1_frame-=3;
}
else{
sp1_frame++;
}
break ; }
}
switch (keyCode) {

case KEY_NUM2:
sp1_y-=d;
if(sp1_y<0) {
sp1_y=y-d;
sp1_frame+=28;
}
else{
sp1_frame-=4;
}
break ;
case KEY_NUM8:
sp1_y+=d;
if((sp1_y+2)>y) {
sp1_y=0;
sp1_frame-=28;
}
else{
sp1_frame+=4;
}
break ;
case KEY_NUM4:
sp1_x=sp1_x-n;
if(sp1_x<0) {
sp1_x=x-n;
sp1_frame=sp1_frame+3;
}
else{
sp1_frame=sp1_frame-1;
}
break ;
case KEY_NUM6:
sp1_x+=n;
if((sp1_x+2)>x) {
sp1_x=0;
sp1_frame-=3;
}
else{
sp1_frame++;
}
break ;
}
}


}