- 1 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 18:13:16 ]
- NTT DoCoMoのiモード携帯電話用Javaに関する話題を扱うスレッドです。
※DoCoMo以外は下記スレへ。 CLDC+MIDP+携帯電話用Javaスレッド part 6 pc11.2ch.net/test/read.cgi/tech/1155174514/ ■ iアプリ特有ではなくJava一般に関する質問はこちらへ 【初心者】Java質問・相談スレッド99【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1173026128/ ■ iモード携帯電話用Java(iアプリ)まとめサイト ton.my-sv.net/ ■関連スレ 【日本携帯】Mascot Capsule/Micro3D【標準】 pc8.2ch.net/test/read.cgi/tech/1117773530/ 過去スレ Part13 ttp://pc11.2ch.net/test/read.cgi/tech/1164168601/
- 985 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 13:19:27 ]
- ファイル名を指定してリソースを読み込むメソッド
byte[] loadResFile(String file) { byte[] b = null; DataInputStream dis = null; ByteArrayOutputStream out = null; try { dis = Connector.openDataInputStream("resource:///" + file); byte[] buf = new byte[10 * 1024]; out = new ByteArrayOutputStream(buf.length); int ret; while ((ret = dis.read(buf)) != -1) { out.write(buf, 0, ret); } b = out.toByteArray(); } catch (Exception e) { } finally { try { out.close(); } catch (Exception e) { } try { dis.close(); } catch (Exception e) { } } return b; }
- 986 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 13:38:54 ]
- スクラッチパッドの番号を指定してそのデータを全て読み込むメソッド
byte[] loadScratchpad(int num) { byte[] b = null; int size = 0; try { DataInputStream dis = Connector.openDataInputStream("scratchpad:///" + num); int ret; while ((ret = (int)dis.skip(100 * 1024)) > 0) { size += ret; } dis.close(); b = new byte[size]; dis = Connector.openDataInputStream("scratchpad:///" + num); dis.read(b, 0, size); dis.close(); } catch (Exception e) { try { dis.close(); } catch (Exception e2) { } return null; } return b; }
- 987 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 14:27:35 ]
- /**
Jarファイルからの画像のロード @param fname ファイル名 @return Image 失敗の場合はnull */ private Image LoadImage( String fname ) { Image img = null; //バイナリデータのロード try{ //Jarサイズの取得 DataInputStream din = Connector.openDataInputStream( "scratchpad:///0;pos=" + OFFSET_JAR_SIZE ); int size = din.readInt(); din.close(); //JarInflaterの取得 din = Connector.openDataInputStream( "scratchpad:///0;pos=" + OFFSET_JAR_DATA + ",length=" + size ); JarInflater ji = new JarInflater( din ); //画像の読み込み MediaImage mi = MediaManager.getImage( ji.getInputStream( fname ) ); mi.use(); img = mi.getImage(); ji.close(); din.close(); } catch( IOException e ){ DBGPRINTF( "Load " + e ); } catch( Exception e ){ DBGPRINTF( "Load " + e ); } return img; }
- 988 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 14:52:44 ]
- >>985
動かしてないけど・・・10KBまでしか読めない?
- 989 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 14:54:01 ]
- ごめん、気のせいだった。
10KB単位で読み込むのね、りょーかい。
- 990 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 15:35:14 ]
- FPSを保つコード需要ある?
- 991 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 15:41:04 ]
- 張っておけば喜ぶ人もいるんじゃない?
- 992 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 15:44:47 ]
- ある
つか急激に良スレ化
- 993 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:00:01 ]
- えらそうなこといってあれなんだが、実機ではいまいち正確に保ってくれないんだ
まぁ一応置いておく、誰か改変きぼう public class FPS { private static final int FLAMERATE = 30; //フレームレート。 private static final int FLAMETIME = 1000 / FLAMERATE; //1周期あたりの_秒 private boolean isFix; // FPSを固定するか private long oldTime; // 一つ前の時間(Control) private long beforeTime; // 一つ前の時間(Draw) private long fpsCount; // 計測用FPS private long fps; // 表示用FPS(1秒に一度更新) FPS() { isFix = true; beforeTime = 0; oldTime = 0; }
- 994 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:00:34 ]
- あ、コンパイル通らねぇw
>>984 × if(keyUp & (1<<Display.KEY_UP) != 0 ) { ○ if((keyUp & (1<<Display.KEY_UP)) != 0 ) { 他にもありそうだなぁ(=´∇`=) で、残り7レス。
- 995 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:01:09 ]
- 続き
/** * スレッドのループ内に置くとFLAMERATEを調整してくれる * */ public void control() { if(!isFix) return; long nowTime = System.currentTimeMillis(); //経過時間。 long difTime = nowTime - oldTime; if( difTime >= FLAMETIME ) //時間が余っている場合。 { oldTime = nowTime; return; } difTime = FLAMETIME - difTime; //余り時間分待つ。 try { Thread.sleep( difTime ); } catch( Exception e ){}; oldTime = oldTime + FLAMETIME; }
- 996 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:01:43 ]
- ラスト
/** * FPSを計測して描画する * */ public void draw(Graphics g) { long time = System.currentTimeMillis(); // FPS の計測 if(time - beforeTime >= 1000) { // 1秒経ったところで表示用のFPSに代入 fps = fpsCount; // 初期化 beforeTime = time; fpsCount = 0; } fpsCount++; g.drawString("FPS:" + fps, 5, 15); } }
- 997 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:04:54 ]
- 余り時間計測する前に
Thread.yield(); を呼んで、他のスレッドの処理を入れてやるのが吉
- 998 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:09:24 ]
- さぁうめるざますよ!
- 999 名前:345 mailto:sage [2007/08/24(金) 16:17:39 ]
- >>993
こんな感じでメインループを空回ししてフレーム固定させてる。 ダイアログ出したりサスペンドの処理は長くなるので割愛。 public void appStart(){ long bt = System.currentTimeMillis(); // 処理基準時間 long nt = 0; // 次に処理する時間 long t, ct = 1; while( true ){ t = System.currentTimeMillis() - bt; if( nt > t){ try{ Thread.sleep( 1 ); } catch( Exception e){} continue; } // スキップしたフレーム数分メインループを回す for(int i = (int)(( t - nt ) * FLAMERATE / 1000); i >= 0; i--) { keyUp = keyArea; keyArea = keyDown | this.getKeypadState(); keyUp = keyUp & (~keyArea); mainLoop(); ct++; keyDown = 0; } nt = ct * 1000L / FLAMERATE; paint( getGraphics() ); } }
- 1000 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:18:51 ]
- 345って・・・orz
983でした。ってことで1000
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|