iモード携帯電話用Jav ..
993:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/24 16:00:34
あ、コンパイル通らねぇw
>>984
× if(keyUp & (1<<Display.KEY_UP) != 0 ) {
○ if((keyUp & (1<<Display.KEY_UP)) != 0 ) {
他にもありそうだなぁ(=´∇`=)
で、残り7レス。
995:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/24 16:04:54
余り時間計測する前に
Thread.yield();
を呼んで、他のスレッドの処理を入れてやるのが吉
998:デフォルトの名無しさん
07/08/24 16:09:24
さぁうめるざますよ!
999:345
07/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:デフォルトの名無しさん
07/08/24 16:18:51
345って・・・orz
983でした。ってことで1000
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4211日前に更新/254 KB
担当:undef