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
004 その4 キャラをコントローラで動かす 2010/05/07(Fri) 22:28
データはこちら(ZIP形式)

//ここから

CH0=G@SETUP(640,480,16,1) //画面設定
CH1=G@CHRLOAD("haikei.bmp") //画像データ読み込み
CH2=G@CHRLOAD("chr.bmp") //画像データ読み込み

//キャラ初期位置
X=0;Y=0

LOOP

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

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

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

//画面からはみ出さない処理
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

//ウェイト
FPS=60
NOWTIME=SYSTIME()
WHILE (NOWTIME-GET_SYSTEMTIMER)<(1000/FPS)
NOWTIME=SYSTIME()
ENDWHILE
GET_SYSTEMTIMER=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()

//LOOPへ戻る
ENDLOOP

//ここまで

ソースが少し長くなりましたが
解説行きます(^^;

まず
//キー入力
I@KEYGET()
STCY=I@KEYBTN(0XD0)-I@KEYBTN(0XC8)
STCX=I@KEYBTN(0XCD)-I@KEYBTN(0XCB)
ここでカーソルキーの情報取得をしています
返り値は
STCY(上:-1 下:1)
STCX(左:-1 右:1)
という処理にしています。


//キャラ横移動
X=X+STCX*4
//キャラ縦移動
Y=Y+STCY*4
ここでキャラの移動ですが、
これはこういうものと思っててください(^^;
キー入力の返り値を利用し、
プログラム1ループ毎の移動ドットを掛けています
*4の数値を大きくすれば移動速度も速くなります
(なお、計算は整数のみです。)


//画面からはみ出さない処理
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
これもこういうものと思っていただければと思います。
上から順に
キャラのX座標が0以下なら0固定
キャラのY座標が0以下なら0固定
キャラのX座標が640-64(つまり576)以上なら640-64固定
キャラのY座標が480-64(つまり416)以下なら480-64固定
キャラの座標は画像の左上を基準にしていますので
画面右端や下端に行った時は画面枠より1キャラ分
数値を引いているということです。

//ウェイト
FPS=60
NOWTIME=SYSTIME()
WHILE (NOWTIME-GET_SYSTEMTIMER)<(1000/FPS)
NOWTIME=SYSTIME()
ENDWHILE
GET_SYSTEMTIMER=SYSTIME()
ここでプログラムの同期をとっています。
変数FPSの数値を変えれば、
秒間フレーム数が変わります。
(一般的に30〜60が理想です。)

ざっと解説しましたが、
このソースを元に数値を色々いじってみるのも良いかもしれませんね。