背景画像のスクロール



Map Chip を組み合わせて作成した背景画像をスクロールします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

Chip(16 dot)単位にスクロール

  1. BG の描画とスクロールに関係する領域の説明です。
    XN,YN は背景画像の大きさで、横と縦に並べる Chip の枚数で指定します。(16倍するとピクセルサイズ)
    XDN,YDN は表示する画面サイズで、横と縦に並べる Chip の枚数で指定します。
    RPG では画面サイスの何倍もの背景画像を使用することが当たり前になっています。
    int *MAP は BG を構成する Chip の並び情報を格納する領域へのポインタで、動的に領域を割り当てます。
        class BG : public SPRITE, public TXT2BIN
        { protected:
            int         XN;             //BG Size 横(XN*16)
            int         YN;             //BG Size 縦(YN*16)
            int         XDN;            //Window 横(XDN*16)
            int         YDN;            //Window 縦(YDN*16)
    
          public:
            int         *MAP;           //BG Map Table
        
  2. Chip(16 dot)を単位として横(縦)方向にスクロールするのは簡単です。
    次のソースコードは BG の左上を基点として Window Size で背景画面を描画しています。
        HRESULT  BG::View()
        {   int    x,y,off;
    
            for(y=0; y<YDN; y++)
                for(x=0; x<XDN; x++)
                {   off= y*XN+x;
                    Show(*(MAP+off),x*16,y*16);
                }
            return S_OK;
        }
        
  3. 横方向にスクロールするときは、off の値を次のように設定すれば良いでしょう。
    xpos は横方向にスクロールするオフセット(Chip 単位)です。
        off= y*XN+x+xpos;
        
  4. 縦方向のスクロールも横方向と同じように考えることができます。
    ypos は縦方向にスクロールするオフセット(Chip 単位)です。
        off= (y+ypos)*XN+x;
        
  5. View() 関数にパラメータを持たして、方向キーの操作でスクロールするプログラムを作成して下さい。

DOT 単位にスクロール

RPG ゲームでは Chip 単位にスクロールしていたのでは話にならず、DOT(ピクセル)単位のスクロールが必要です。
Map Chip を組み合わせた背景画像を DOT 単位にスクロールするにはどうしたら良いのでしょう。

超初心者のプログラム入門(Win32API C++)