Phát triển game trên Blackberry
Trong bài này, tôi xin giới thiệu các bạn một game “space fighter”. Nó có hướng dẫn rất đầy đủ, bạn có thể tham khảo tại: http://www.toniwestbrook.com/archives/69. Giao diện của nó như sau:
Chúc các bạn thành công!
JAVA | SYMBIAN | ANDROID
Trong bài này, tôi xin giới thiệu các bạn một game “space fighter”. Nó có hướng dẫn rất đầy đủ, bạn có thể tham khảo tại: http://www.toniwestbrook.com/archives/69. Giao diện của nó như sau:
Chúc các bạn thành công!
Sau đây, tôi xin giới thiệu tới các bạn một kỹ thuật tạo menu cho game bằng hình ảnh sử dụng các class LayerManager và Sprite trong gói javax.microedition.lcdui.game. Lưu ý, trong ví dụ này, tôi giả định rằng, độ rộng màn hình bằng 240, chiều cao màn hình 308(đây là chiều rộng và chiều cao mặc định trong emulator của Sun Wireless Toolkit). Giao diện của nó như sau:
Ứng dụng bao gồm 2 class: MenuScreen và MenuMidlet, lớp MenuScreen như sau: Read more…
Trong bài viết này, tôi xin được giới thiệu đến các bạn cách tạo ra TabMenu. Các component của chúng ta sẽ hỗ trợ:
Các style của Tab: màu nền, màu chữ, font, padding.
Tự động cuộn ngang màn hình mà không cần phải quan tâm tới độ rộng màn hình.
Đầu tiên, ta có các biến về style của Tab:
int background = 0xffffff;
int bgColor = 0xcccccc;
int bgFocusedColor = 0x0000ff;
int foreColor = 0x000000;
int foreFocusedColor = 0xffffff;
int cornerRadius = 4;
int padding = 2;
int margin = 2;
Font font = Font.getDefaultFont();
int scrollStep = 20;
Hôm nay, tôi xin giới thiệu với các bạn đoạn code để scale một image, phương thức scaleImage() là phương thức bạn cần quan tâm.
import java.io.IOException;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
Trong bài viết này, tôi xin giới thiệu cách thức để cài đặt một MIDlet lắng nghe các tin nhắn SMS đang đến. Luồng hoạt động ở bài viết này được thực hiện một cách bất đồng bộ:
1. Người dùng cài đặt ứng dụng SMSListenerMIDlet vào thiết bị và khởi động nó. Tạm gọi thiết bị này là thiết bị A. Lúc này,MIDlet vẫn chưa lắng nghe các message đang đến, do đó, nếu người dùng bây giờ đã gửi một tin nhắn từ một thiết bị khác – tạm gọi là thiết bị B – thì SMS sẽ không bị chặn bởi các MIDlet. Thay vào đó, nó sẽ đến trong inbox của thiết bị A.
2. Người dùng sẽ để MIDlet bắt đầu nghe các message SMS bằng cách chọn Options> Start listening. Bên trong MIDlet sẽ xảy ra các vấn đề sau:
3. Từ thiết bị B, người dùng bây giờ có thể gửi tin nhắn với port chỉ định tới thiết bị A, và MIDlet trong thiết bị A sẽ xảy ra các vấn đề sau:
4. Lưu ý rằng các SMS được gửi với port chỉ định sẽ không bao giờ đến inbox của thiết bị A một khi MIDlet đang lắng nghe chúng. Và bây giờ, nếu người dùng ngừng việc lắng nghe (bằng cách chọn Options> Stop listening), các SMS tiếp theo với cổng được chỉ định sẽ rơi vào inbox của thiết bị A, thay vì MIDlet. Read more…
Trong bài viết này, tôi xin trình bày cách để cài đặt một MIDlet lắng nghe các message SMS đang đến. Luồng hoạt động của nó được thực hiện một cách đồng bộ như sau:
Code của nó như sau: Read more…
Để kiểm tra version của thiết bị có hỗ trợ API cho phép gửi hay nhận tin nhắn SMS hay không, bạn sử dụng phương thức System.getProperty(“wireless.messaging.version”). Bạn có thể tham khảo đoạn code sau:
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
[…]
String wmVersion = System.getProperty("wireless.messaging.version"); if (wmVersion != null) { // Wireless messaging is supported. Inform the user. Alert alert = new Alert("Supported", "Wireless messaging is supported. Version is: " + wmVersion, null, AlertType.INFO); Display.getDisplay(this).setCurrent(alert); } else { // Wireless messaging is not supported. Inform the user. Alert alert = new Alert("Not supported", "Wireless messaging is not supported.", null, AlertType.INFO); Display.getDisplay(this).setCurrent(alert); }
Tham khảo code từ forum Nokia
I.Chụp ảnh sử dụng Mobile Media API(MMAPI)
Đặc tả Mobile Media API cung cấp các lớp hỗ trợ chụp ảnh trên thiết bị.
Đầu tiên, Player phải được tạo ra:
Player player;
…
player = Manager.createPlayer(“capture://video”);
Sau đó player phải được khởi tạo:
Player.relize();
Sau đó, bạn phải nhận “videocontrol” để biểu diễn image ở viewfinder:
VideoControl videoControl;
…
videoControl = (VideoControl) player.getControl ( “VideoControl”);
VideoControl có 2 kiểu hiển thị:
Vẽ lên đối tượng Canvas trong MIDP UI cấp thấp, hoặc có thể thêm vào trong Form trong MIDP UI cấp cao như một item. Ví dụ như ta sử dụng canvas:
videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, canvas);
Bắt đầu một player, để người dùng có thể thấy camera:
player.start();
Một khi VideoControl đã được kích hoạt, bạn có thể chụp ảnh:
byte[] pngData = videoControl.getSnapshot(null);
Tham số trong phương thức getSnapShot() là một chuỗi định dạng dữ liệu sẽ được sử dụng. Nếu nó bằng null, dữ liệu sẽ lấy định dạng PNG, định dạng này là định dạng chuẩn và tất cả các máy đều hỗ trợ định dạng này.
Sau đó, dữ liệu có thể sử dụng theo nhiều cách. Có thể là được lưu ở RMS để sử dụng sau, hoặc gửi qua giao thức HTTP đến Server, hoặc hiển thị trực tiếp như một hình ảnh. Để tạo hình ảnh, ta sử dụng phương thức createImage(byte[], int, int) của lớp Image:
Image photoImg = Image.createImage(pngData, 0, pngData.length);
Camera hình ảnh và dữ liệu hình ảnh chiếm dung lượng rất lớn trong bộ nhớ, nên nếu bạn không sử dụng nữa, bạn nên gán tham chiếu của nó bằng null. Read more…
Nếu bạn muốn sử dụng một Image làm background trong ứng dụng J2ME, bạn thường gặp phải một vấn đề là: phải sử dụng một image cho mỗi kích thước màn hình khác nhau. Để tránh việc sử dụng nhiều image cho nhiều loại màn hình khác nhau, ta sử dụng cách sau để fit một image đúng với kích thước màn hình.
Đặc tả phương thức: Read more…