★高速画像描画

「★高速画像描画」の編集履歴(バックアップ)一覧はこちら

★高速画像描画」(2011/02/07 (月) 02:46:41) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*情報 作者名:竜巻 引用元:なし *概要 イメージを高速に描画します。 *解説 ***引数 ●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の&bold(){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 ; ***質問があればお答えします。 ただし完璧ではないのでどちらかというと助言の方がありがたいです。。。 ---- #comment() ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。