情報
作者名:竜巻
引用元:なし
概要
イメージを高速に描画します。
解説
引数
●GraphLib_Init({値渡し=?}REQ)
REQ:必要なイメージ個数
●LoadGraph({値渡し=?}pass , {値渡し=?}GRAPHHANDLE , {値渡し=?}alpha)
pass:画像のパス
GRAPHHNDLE:整数値 画像の番号を決定する(ただし1以上、GraphLib_Initで初期化した個数以下)
alpha:透明値のオン/オフ (1か0,またはオンかオフで指定)
●DrawGraph({値渡し=?}XX,{値渡し=?}YY,{値渡し=?}GRAPHHANDLE)
XX:整数値 X座標
YY:整数値 Y座標
GRAPHHANDLE:整数値 LoadGraphで決めた画像の番号
返り値
なし
仕様解説
まずイメージの必要個数を”GraphLib_Init({値渡し=?}REQ)”でREQを引数に初期化します。
次にLoadGraphで画像をイメージとして読み込んで、それを裏画面(BG_IMAGE_BASE)に画像コピーしたあと、Screenflipで母艦に表示します。
STGや高速に描画が必要なゲーム等ではイメージ部品をそのまま扱うと遅くなってしまうため、描画だけを行います。
敵や弾、自機等はグループで扱います。
注意点
なでしこの性質上個体の識別に文字が使えないので、ユーザー側で画像の番号(GRAPHHANDLE)には常に注意しておく必要がある。
複数回ロードする場合は、iで1から10まで繰り返す 等の命令を使うこと。(iは1~10の10個)
感覚としては、画像番号を予約しておく といった感じ。(分かりづらくて申し訳ない。)
//本体
//必要なイメージの個数を指定して初期化する。
●GraphLib_Init({値渡し=?}REQ)
REQ回
BG_IMAGE[回数]をイメージとして作成 //C++とは違い、10回なら1~10の10個の部品ができる。
BG_IMAGE_BASEをイメージとして作成 //
BG_IMAGE_BASE→W=母艦のW
BG_IMAGE_BASE→H=母艦のH
BG_IMAGE_BASE→可視=0
//ビットマップ(画像)をロードする。
●LoadGraph(pass , GRAPHHANDLE , alpha)
BG_IMAGE[GRAPHHANDLE]→画像=pass
BG_IMAGE[GRAPHHANDLE]→可視=0
BG_IMAGE[GRAPHHANDLE]→透明化=alpha
//裏画面に描画する
●DrawGraph({値渡し=?}XX,{値渡し=?}YY,{値渡し=?}GRAPHHANDLE)
BG_IMAGE[GRAPHHANDLE]をBG_IMAGE_BASEのXX,YYへ画像コピー
//裏画面を表画面に反映させる。
●ScreenFlip()
BG_IMAGE_BASEを母艦の0,0へ画像コピー
//裏画面・表画面をクリアする
●全画面クリア
BG_IMAGE_BASEを画面クリア
母艦を画面クリア
//サンプルプログラム
●母艦設計
母艦について
CH=600
CW=600
スタイルは『枠なし』
ドラッグ移動=1
GRAPHHANDLEとは整数 = 0 ; //関数を使うために必要な変数を宣言
SYSTEMTIMEとは整数 ;
//関数群を使うために初期化する。
●GraphLib_Init({値渡し=?}REQ)
REQ回
BG_IMAGE[回数]をイメージとして作成 //C++とは違い、10回なら1~10の10個の部品ができる。
BG_IMAGE_BASEをイメージとして作成 //
BG_IMAGE_BASE→W=母艦のW
BG_IMAGE_BASE→H=母艦のH
BG_IMAGE_BASE→可視=0
//ビットマップ(画像)をロードする。
●LoadGraph(pass , GRAPHHANDLE , alpha)
BG_IMAGE[GRAPHHANDLE]→画像=pass
BG_IMAGE[GRAPHHANDLE]→可視=0
BG_IMAGE[GRAPHHANDLE]→透明化=alpha
//裏画面に描画する
●DrawGraph({値渡し=?}XX,{値渡し=?}YY,GRAPHHANDLE)
BG_IMAGE[GRAPHHANDLE]をBG_IMAGE_BASEのXX,YYへ画像コピー
//裏画面を表画面に反映させる。
●ScreenFlip()
BG_IMAGE_BASEを母艦の0,0へ画像コピー
//裏画面・表画面をクリアする
●全画面クリア
BG_IMAGE_BASEを画面クリア
母艦を画面クリア
//個体に情報を持たせるためのグループ
■GRAPHIC
・x
・y
・img
GraphLib_Init(20) //登録可能なイメージ数を20としてロード先を作成・裏画面を初期化
WAITTIMEとは整数 = 0 ;
GET_SYSTEMTIMEとは整数 = 0;
FRAME_COUNTERとは整数 = 0 ;
FRAME_AVEとは配列 = 0 ;
FRAME_SUMとは実数 = 0 ;
SYSTEMTIMEとは整数 ;
//ビットマップを用意する。
iで1から10まで繰り返す //iは個体判別に必要なので常にユーザー側で確認する必要がある。現在iは1~10まで予約済み
イメージ1ワニ[i]をGRAPHICとして作成 //グループを同時に作成
イメージ1ワニ[i]→img = "wani.gif" //イメージを決定
イメージ1ワニ[i]→x = i * 10 ; //座標を決定
イメージ1ワニ[i]→y = i * 10 ;
LoadGraph( イメージ1ワニ[i]→img , i , 1 ) ; //グループのx,yと画像で裏画面に描画。透明化は1(オン)
ここまで
//上同様
iで11から20まで繰り返す //iは個体判別に必要なので常にユーザー側で確認する必要がある。現在iは1~20まで予約済み
イメージ2なこ[i]をGRAPHICとして作成
イメージ2なこ[i]→img = "nako.png"
イメージ2なこ[i]→x = i * 10 ;
イメージ2なこ[i]→y = i * 10 ;
LoadGraph( イメージ2なこ[i]→img , i , 1 ) ; //グループのx,yと画像で裏画面に描画。透明化は1(オン)
ここまで
#-----------------------------------------------------------------------
#実際の描画
SYSTEMTIME = システム時間 ;
(1)の間
全画面クリア //描画を変更するために画面をクリア
ワニ描画
なこ描画
ScreenFlip() ;
『FPS:』&FRAME_SUMを母艦の10,10へ文字表示
FPS固定(17)
ここまで
●ワニ描画
iで1から10まで繰り返す
DrawGraph( イメージ1ワニ[i]→x , イメージ1ワニ[i]→y , i )
イメージ1ワニ[i]→x = イメージ1ワニ[i]→x + 0.123456
イメージ1ワニ[i]→y = イメージ1ワニ[i]→y + 0.765432
ここまで
●なこ描画
iで11から20まで繰り返す
DrawGraph( イメージ2なこ[i]→x , イメージ2なこ[i]→y , i )
イメージ2なこ[i]→x = イメージ2なこ[i]→x + 0.765432
イメージ2なこ[i]→y = イメージ2なこ[i]→y + 0.123456
ここまで
//正確ではないので悪しからず。
●FPS固定({値渡し}NUM)
もし、FRAME_COUNTER = 60 ならば、
FRAME_SUM = 0 ;
60回
FRAME_SUM = FRAME_SUM + FRAME_AVE[回数] ;
ここまで
FRAME_SUM = FRAME_SUM / 60 ;
FRAME_SUM = 1000 / FRAME_SUM
FRAME_COUNTER = 0 ;
GET_SYSTEMTIME = システム時間 - SYSTEMTIME
WAITTIME = ( NUM - GET_SYSTEMTIME )/1000
もし、WAITTIME >= 0ならば
(WAITTIME)秒待つ //←正確性を欠く犯人。1/1000秒が扱えない
FRAME_AVE[FRAME_COUNTER] = システム時間 - SYSTEMTIME //ループバックしてくるまでにかかった時間
SYSTEMTIME = システム時間 ;
FRAME_COUNTER = FRAME_COUNTER + 1 ;
質問があればお答えします。
ただし完璧ではないのでどちらかというと助言の方がありがたいです。。。
最終更新:2011年02月07日 02:46