3 .J2ME沒有浮點數
Role.MONEY *= 9/10;
結果Role.MONEY=0;
只能
Role.MONEY = Role.MONEY*9/10;
4.imgRens = Image.createImage("/pics/state.png"); //人物狀態
imgState = new Image[4];
imgWidth= 10;
for( int i=0; i<imgState.length; i++ )
{
// imgState = Image.createImage( imgWidth, imgRens.getHeight() );
imgState = DirectUtils.createImage( imgWidth, imgRens.getHeight(), 0x00000000 );
gren = imgState.getGraphics();
gren.drawImage(imgRens, -imgWidth*i, 0, Graphics.TOP|Graphics.LEFT);
}
gren =null;
imgRens=null;
System.gc();
模擬器用DirectUtils建的圖片時候運行出問題,不過真機上沒問題。可以生成JAR使用!
5.public void run()
{
try
{
while( true )
{
// if( isStopGame ) continue; //如果暫停游戲
updatas++;
switch (State)
{
case S_GAME_MAP:if( isStopGame ) break; if(gamemap!=null)gamemap.updata(updatas); break;
case STATE_MBOX: setState(S_COVER); break; //切換到游戲狀態
case STATE_LOAD_CMCC: State=STATE_CMCC; break;
case STATE_CMCC: State=STATE_MBOX; break; //切換到第二屏
}
this.repaint(); //有需要時才重新繪制
Thread.sleep(sleepTime);
}
} catch (Exception ex){}
}
如果使用注釋掉的代碼暫停游戲60會死機.v300.k700不會死掉.所以在60上只好用注釋下面的那個暫停了!
6.關於隨機數對0求余的問題
iRand() % 0;
一個正整數對0求余會拋出Java/lang/ArithmeticException這個錯誤
不過 一些機器上(S60.K700.V300)還是會強制iRand() % 0=0的(但是會卡一下)
但是 S40報錯之後無法繼續運行。
所以 S40上不要出現對0求余運算!
7.int a=1000000000;
int b=1000000000;
int c=a*b;
System.out.println("c="+c);
這樣寫編譯器允許,不過結果是錯誤的C的值已經超過INT的范圍了,他會自動截取INT的32為,其他位為益出。
byte a=100;
byte b=100;
byte c=a+b;
這樣寫 編譯器不允許,必須byte c=(byte)(a+b);才能通過。
8.8。偶爾在程序中用到了浮點數,部分模擬器,真機通過了!
(int)( ax*Math.sin(dx/10)/precision );
正弦曲線使用Math.sin( dx/10 ),dx/10為Double類型,輸入參數為Double,也就是弧度,返回也是Double,即對應弧度的正弦值,經測試 Math.sin( Math.PI/2 ) 返回1, Math.sin( Math.PI )返回0,
Nokia s60模擬器通過測試,可以使用。
Nokia 6230i 和 Sony EriCSSon k700 真機通過測試,可以使用!
其他機型 估計新出的能通過,Nokia S60系列機器不能使用,如3230,6670等。
相信 J2ME支持浮點運算只是個時間問題!
9。方法體大小是有限制的!
不可以超過65535個字符!
通常不會有這麼多個字符,但是在寫一些地圖數組的時候方法體就可能很大,如果出現IDE報錯,那麼你就應該考慮是不是方法體過大了!結果辦法就是 把地圖數組寫成資源文件,在程序中調入,解析,在使用!
/*
* 生成 地圖數文件Created on 2005-10-13
*/
import Java.io.DataOutputStream;
import Java.io.FileOutputStream;
public class mapData
{
byte[][] mapData = //某一地圖 圖片數組
{
};
int dataBH = 6; //0//地圖編號 (地下城2.3.4.5)
int dataYs = 3; //1//元素圖片編號
int dataHs = mapData.length; //2//行數
int dataLs = mapData[0].length; //3//列數
int dataPz = 41; //4//碰撞點
String fileName = "map"+dataBH+".gl"; // //文件名
DataOutputStream out= null;
public static void main(String[] args)
{
mapData a = new mapData();
try
{
a.out = new DataOutputStream( new FileOutputStream( a.fileName ) );
} catch(Exception e) {}
a.writeByteArray();
}
public void writeByteArray()
{
try
{
out.writeByte( dataBH ); //地圖編號 0
out.writeByte( dataYs ); //地圖元素編號 1
out.writeByte( dataHs ); //行數 2
out.writeByte( dataLs ); //列數 3
out.writeByte( dataPz ); //碰撞點 4
for( int i=0; i<mapData.length; i++ )
{
for( int j=0; j<mapData[0].length; j++ )
out.writeByte( mapData[j] );
}
} catch(Exception e){}
}
}
這個J2SE程序可以生成一個MAP1.GL的文件,文件中的數都是BYTE類型的 。
/----------------------------J2ME中的地圖類----------------------------------------------------------------/
/*讀文件*/
public byte[] readFile(String filename)
{
byte[] data = null;
try
{
InputStream in = this.getClass().getResourceAsStream(filename);
in.read( dataIndex, 0, 5 );
data = new byte[ dataIndex[2]*dataIndex[3] ];
in.skip( 0 );
in.read( data );
in.close();
}
catch(Exception e){e.printStackTrace();}
return data;
}
/*解吸文件*/
public byte[][] readMapData( String filename )
{
int k=0;
byte[] data = readFile(filename);
byte[][] map = new byte[ dataIndex[2] ][ dataIndex[3] ];
for( int i=0; i<dataIndex[2]; i++ )
{
for( int j=0; j<dataIndex[3]; j++ )
{
map[j] = data[k];
// System.out.print(data[k]+"," );
k++;
}
// System.out.println("" );
}
return map;
}
在 構造函數中
byte[][] map = readMapData("/res/map"+this.mapNum+".gl");//讀文件/解吸/地圖數組
就可以得到地圖數組
地圖信息已經寫到
byte[] dataIndex 中了,需要添加其他信息可以更改 dataIndex 的大小
10.字符串連接 與 ?: 判斷符號 優先級
String str0 = "abd";
String str1 = "123" + str0==null ? "null" : str0 ;
表達試中 ? : 的優先級沒有 + 的高
所以 計算結果等於
String str1 = ("123" + str0) ==null ? "null" : str0 ;
所以 要的到 str0不等於NULL的結果
可以
String str1 = "123" + (str0==null ? "null" : str0 );
11.當定義一個對象數組出現沒有初始化錯誤時候:
int typeSum = 10;
JTextField[] jTextFIEld1 = null;
jTextField1 = new JTextFIEld[typeSum];
這樣並未初始化 jTextField1[0]..jTextFIEld1[9]等對象!
這就要看JTextFIEld類的構造函數了
public class JTextFIEld extends JTextComponent
這個類JTextFIEld也是繼承來的
構造函數:
public JTextFIEld() {
this(null, null, 0);
}
public JTextFIEld(String text) {
this(null, text, 0);
}
public JTextFIEld(int columns) {
this(null, null, columns);
}
public JTextFIEld(String text, int columns) {
this(null, text, columns);
}
public JTextFIEld(Document doc, String text, int columns) {
...
}
等等..
jTextField1 = new JTextFIEld[typeSum];
這句話調用的是
public JTextFIEld() {
this(null, null, 0);
}
這個構造函數
所以沒有正確初始化 jTextFIEld1這個數組
可以在使用前
for( int i=0; i<typeSum; i++)
{
jTextFIEld1 = new JTextFIEld();
}
初始化就不會報錯拉!