推薦:用J2ME在移動設備上實現(xiàn)動畫1使用MIDP(Mobile Information Device Profile)的開發(fā)人員經(jīng)常會抱怨用些什么辦法才可以在一個MIDlet上顯示動畫。 MIDP 1.0 沒有直接提供對動畫的支持(正在開發(fā)中的MIDP 2.0支持),但真
參考WTK2.2提供的demo,完成了第一個3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學習J2ME 3D編程的朋友一起學習。
關于代碼的編譯和運行說明如下:
1、以下代碼在J2ME WTK2.2下面編譯通過。
2、代碼分為兩個文件:First3DCanvas.java和First3DMIDlet.java。
3、使用J2ME WTK2.2建立新的工程,主MIDlet類為:first3d. First3DMIDlet
4、將代碼保存在你的工程目錄下的first3d目錄下。
5、將J2ME WTK安裝目錄下的apps\Demo3D\res\com\superscape\m3g\wtksamples\retainedmode\content目錄中的swerve.m3g文件復制到你的工程目錄下的res目錄下。
6、你的工程建立后,設置工程,通過WTK界面中的“設置”按鈕打開設置窗口,在“API選擇”中,設置“目標平臺”為:自定義;“簡檔”為“MIDP2.0”;“配置”為“CLDC1.1”;選中“Mobile 3D Graphics for J2ME(JSR184)”。
7、這樣你就可以編譯和運行以下代碼了。
源代碼如下:
// First3DMIDlet.java
package first3d;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class First3DMIDlet extends MIDlet
{
private First3DCanvas displayable = new First3DCanvas();
public void startApp()
{
Display.getDisplay(this).setCurrent(displayable);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
// First3Dcanvas.java
package first3d;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import java.util.*;
/**
* 第一個3D程序
*/
public class First3DCanvas extends Canvas implements Runnable
{
/**World對象*/
private World myWorld = null;
/**Graphics3D對象*/
private Graphics3D g3d = Graphics3D.getInstance();
/**Camera對象*/
private Camera cam = null;
private int viewport_x;
private int viewport_y;
private int viewport_width;
private int viewport_height;
private long worldStartTime = 0;
//重繪時間
private int validity = 0;
public First3DCanvas()
{
//啟動重繪界面的線程
Thread thread = new Thread(this);
thread.start();
try
{
//導入3D圖片
myWorld = (World) Loader.load("/swerve.m3g")[0];
viewport_x = 0;
viewport_y = 0;
viewport_width = getWidth();
viewport_height = getHeight();
cam = myWorld.getActiveCamera();
//設置cam對象
float[] params = new float[4];
int type = cam.getProjection(params);
if (type != Camera.GENERIC)
{
//calculate window aspect ratio
float waspect = viewport_width / viewport_height;
if (waspect < params[1])
{
float height = viewport_width / params[1];
viewport_height = (int) height;
viewport_y = (getHeight() - viewport_height) / 2;
}
else
{
float width = viewport_height * params[1];
viewport_width = (int) width;
viewport_x = (getWidth() - viewport_width) / 2;
}
}
worldStartTime = System.currentTimeMillis();
}
catch (Exception e) {}
}
protected void paint(Graphics g)
{
//清除背景
g.setColor(0x00);
g.fillRect(0, 0, getWidth(), getHeight());
//和3D對象綁定
g3d.bindTarget(g);
g3d.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
long startTime = System.currentTimeMillis() - worldStartTime;
validity = myWorld.animate((int)startTime);
try
{
g3d.render(myWorld);
}
finally
{
g3d.releaseTarget();
}
}
public void run()
{
try
{
while(true)
{
//重繪圖形
repaint(viewport_x, viewport_y, viewport_width, viewport_height);
}
}
catch(Exception e){}
}
}
|
分享:用J2ME與ASP建立數(shù)據(jù)庫連接J2ME是利用HttpConnection建立HTTP連接,然后獲取數(shù)據(jù),ASP也是利用HTTP協(xié)議,因而可以利用J2ME與ASP建立連接,從而訪問數(shù)據(jù)庫。
ASP是MicroSoft公司的服務器端動態(tài)頁面技術,可以根