CLDC 1.0 無浮點數,使用 8 位定點數 (×256) 查表:
private static final int[] SINES = {0, 44, 88, 128, 165, 196, 222, 241, 252, 256}; // 0~90°
int sineTimes256(int angle) { /* 角度換算 0~35 對應 0~360° */ }
int cosineTimes256(int angle) { return sineTimes256(angle + 9); } // +90°
// 0 ~ n-1
(int)(Math.random() * n) // 或
(ran.nextInt() >>> 1) % n
(ran.nextInt() & 0x7FFFFFFF) % n
// -n ~ 0
(ran.nextInt() | 0x80000000) % n
InputStream.read(),測試提速 ~15%自行壓縮資源檔(如 RLE)後打包,**JAR 大小反而變大**,因為 ZIP 對已壓縮資料壓縮率極低。建議:
| 機型/平台 | 問題 | 解決方案 |
|---|---|---|
| Nokia S60 (7650/3650) | getResourceAsStream 記憶體洩漏 | 減少 IO 次數,一次性載入資源 |
| Nokia S60 | UI API rotate + clip 失效、無法建立透明 MutableImage | 改用 MIDP 2.0 標準 API |
| Nokia 6600/6670 | setClip 不受 translate 影響 | 繪製子圖時先 setClip 再 drawImage(x-sx, y-sy) |
| Nokia S60 退出 | 主迴圈中呼叫 destroyApp 導致 NPE | 設置退出旗標,迴圈結束後再呼叫 destroyApp |
| Motorola V 系列 | KeyCode 非標準(左鍵 21、右鍵 22、中鍵 20) | 建立按鍵映射表,運行期偵測機型動態載入 |
| MIDP 2.0 全螢幕 | setFullScreenMode 後 getWidth/Height 取得時機不同 | Moto 走 sizeChanged 事件;SE K700 即時生效 |
PlatformAdapter 介面getWidth()/getHeight() 計算,字體用 Font.stringWidth()StringTable 介面,各語言/機型實作不同介面String platform = System.getProperty("microedition.platform");
if (platform.startsWith("Nokia3650")) is3650 = true;
else if (platform.startsWith("Nokia7650")) is7650 = true;
// 注意:早期 N-Gage 回傳不為 "N-Gage",需實測驗證