LGP3講座
LGP3に関する基礎知識からちょっとした小技、
使用している周辺ツールの紹介なんかも
やっていけたらと思います


TOPへ戻る

001 その1 LGP3とは?
002 その2 LGP3に必要なもの
003 その3 2D画像の表示
004 その4 キャラをコントローラで動かす
005 その5 マップチップ表示
006 番外編1 膨大なマップデータ
007 その6 膨大なマップデータの表示
008 膨大なマップをドットスクロール
009 番外編2マップ表示応用編
010 番外編3 フレームスキップ
011 番外編4 応用、モザイク処理
012 番外編5 スプライン、ベジェ
013 番外編6 ラスタースクロール
014 サンプル1 スーパーマリオみたいな挙動

- MultiView (Version 3.4) -

admin mode new input logout
010 番外編3 フレームスキップ 2010/05/13(Thu) 00:09
データはこちら(ZIP形式)

要はコマ飛ばしです(笑)
指定したFPSに満たないスペックのPCでは
コマを飛ばして同期を図るというやつです。

その4でのソースに手を加えてみました。
色が違う箇所がフレームスキップの処理です。


CH0=G@SETUP(640,480,16,1)

CH1=G@CHRLOAD("haikei.bmp") //画像データ読み込み
CH2=G@CHRLOAD("chr.bmp") //画像データ読み込み

FPS=60

GET_SYSTEMTIMER=SYSTIME()


MAINLOP:

//キー入力
I@KEYGET()
STCY=I@KEYBTN(0XD0)-I@KEYBTN(0XC8)
STCX=I@KEYBTN(0XCD)-I@KEYBTN(0XCB)

//キャラ横移動
X=X+STCX*2

//キャラ縦移動
Y=Y+STCY*2

//画面からはみ出さない処理
IF X<=0 THEN X=0 ENDIF
IF Y<=0 THEN Y=0 ENDIF
IF X>=640-64 THEN X=640-64 ENDIF
IF Y>=480-64 THEN Y=480-64 ENDIF

GENHAN=SYSTIME()-GENT
IF GENHAN<=0 THEN GENHAN=1 ENDIF
GENT=SYSTIME()
KLOP=KLOP+1
HANTEI=HANTEI+GENHAN
HANTEI4=HANTEI/KLOP;IF HANTEI4<=0 THEN HANTEI4=1 ENDIF
HANTEI2=1000/HANTEI4
IF KLOP<4 THEN IF HANTEI2 KLOP2=KLOP;HANTEI=0;KLOP=0
IF KLOP2>=2 THEN HANTEI3=HANTEI3+(HANTEI2-FPS);IF HANTEI3>=FPS THEN KLOP=1;HANTEI3=HANTEI3%FPS ENDIF ENDIF
IF HANTEI3<0 THEN HANTEI3=0 ENDIF

//ウェイト
NOWTIME=SYSTIME()
WHILE (NOWTIME-GET_SYSTEMTIMER)<(1000/FPS)
NOWTIME=SYSTIME()
ENDWHILE
GET_SYSTEMTIMER=SYSTIME()

GENT=SYSTIME()


G@CHRCLEAR(CH0)

//背景描画
G@CHRRECT(CH1,0,0,639,479)
G@CHRRECT(CH0,0,0,0,0)
G@CHRCOPYF(CH1,CH0,0)

//キャラ描画
G@CHRRECT(CH2,0,0,63,63)
G@CHRRECT(CH0,X,Y,0,0)
G@CHRCOPYF(CH2,CH0,1)

G@FLIP()

GOTO MAINLOP

1ループが指定のFPSに行かなければ
画像処理に行かずにそのままメインループに…
コマ落ち処理で出た時間の端数を次のコマ処理に持ち越しすることで
無駄なコマ飛ばしを省いています。
(その6の最後に挙げた判定処理と画像処理の間にウェイト
ってのがここにあたるんです。フレームスキップをしないのであれば
あまり意味は無いですが…(^^;))

このソースでは上限60FPS下限15FPSがリミットです。