★高速画像描画

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

情報

作者名:竜巻
引用元:なし

概要

イメージを高速に描画します。

解説

引数

●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 ;


質問があればお答えします。

ただし完璧ではないのでどちらかというと助言の方がありがたいです。。。

名前:
コメント:


ツールボックス

下から選んでください:

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