前のページ | 次のページ

title image

ホーム | トップ | 掲示板 | FAQ | 検索 | サイト情報 | リンク

+ ホーム > トップ > ゲーム制作講座 > 画面効果

画面効果(エフェクト)をかけてみよう

ゲーム画面にちょっとした効果を入れてみましょう。ゲームに見栄えがグッと上がると思います (ただし、やりすぎは禁物! テンポが悪くなるかも…)

今回のサンプルソースは、現在公開中のゲーム制作ツール「コミックメーカー」より一部コードを抜粋して、ツールに依存するコードを除去したものです。
どのような画面効果が作れるかは、コミックメーカーをダウンロード後、グラフィック表示エフェクトを「幕を開く(左)」にして試してみてください。

ソースコード
(ちなみにこのHTMLソース、HomePage Builderで読み込むと↓が破損します ^^;)

procedure LeftToEffect(DestImage :TImage; SrcBitmap :TBitmap);
var
  i,j, srcX :integer;
  EffTable :array[0..9] of integer;
  TimeCount :LongInt;
begin
  { Table Initialize }
  for i:=0 to 9 do EffTable[i] := -1;

  TimeCount := GetTickCount;
  i := 0;
  while EffTable[0] < (SrcBitmap.Width div 2) do
  begin
    { Table Starter }
    if 9-i >= 0 then
    begin
      EffTable[9-i] := 9-i;
      Inc(i);
    end;

    for j:=0 to 9 do
    begin
      if (EffTable[j] >=0)and(EffTable[j] < (SrcBitmap.Width div 2)) then
      begin
        srcX := EffTable[j]*2;
        BitBlt(DestImage.Canvas.Handle,
               srcX,0,2,SrcBitmap.Height,
               SrcBitmap.Canvas.Handle,
               srcX,0,cmSrcCopy);
        EffTable[j] := EffTable[j] + 10;
      end;
    end;
    
    { Draw }
    DestImage.Refresh;
    
    { Wait }
    TimeCount := TimeCount + 10;
    repeat
      Application.ProcessMessages
    until GetTickCount > TimeCount;
    TimeCount := GetTickCount;
  end;

end;

えっ、Pascalで書いてあるからC++Builderで使えない?
…確かにそのままでは組み込めませんね。Delphiを使っている人は楽ですけど…
でも、C++BuilderにはPascalコンパイラが入っているので、ちょっと工夫すれば使うことができますよ。
 こちらのコードをダウンロードしてみてください。
 ※ダウンロードして保存して下さい。ネスケの場合は右クリックから「リンクに名前を付けて保存」です。ファイル名は必ず"eff_left.pas"にしてください。ファイル名が違うとエラーが出ます。

コードの使い方
 まず、ダウンロードしたコードを使用するにはプロジェクトに追加する必要があります。
メニューの[プロジェクト]-[プロジェクトに追加]から、eff_left.pasの追加を行ってください。

次に、ヘッダファイルをインクルードさせます。
下の行をソースコードの先頭に追加しておきます。
#include "eff_left.hpp"

この関数では、TImageコンポーネントに画面エフェクトを出力するように作ってあります。
フォームにTImageコンポーネントを配置してください。(名前をImage1として解説を続けます)

エフェクトをかけながら画像を表示します。
 // TBitmap クラスの生成
 Graphics::TBitmap *Bitmap = new Graphics::TBitmap();
 // 画像ファイルをロード
 Bitmap->LoadFromFile("ファイル名");
 // エフェクトをかけながら表示
 LeftToEffect(Image1, Bitmap);
 // TBitmap クラスを破棄
 Bitmap->Free();

以上で、エフェクト処理は完了です。
あっ、Image1とBitmapの画像サイズは必ず同じにして下さいね。

Text & Programing by みっくす


  目次に戻る


 ご意見、ご感想などありましたら、メール又は伝言板への書き込みをお願いします。

E-Mail : m_hikida@muh.biglobe.ne.jp

Copyright (c) 1997-2007 Masaya Hikida