「ゲームプログラミング/RPG」の版間の差分

削除された内容 追加された内容
→‎武器・防具の装備システム: コードミスを修正。
半透明レイヤーを重ねるコードを書く際、どうコードを書けばいいかというと、答えは直感に反しますが、答えは、レイヤーで隠される画像側のプログラムのほうにコードを書くことになるかと思います。(隠す側の画像のプログラムではないのです。)
1,992 行
:または、(win32 API やGDI + だけのプログラミングをあきらめて) Direct X を使うなど、
いろいろと対策しましょう。
 
 
 
半透明レイヤーを重ねるコードを書く際、どうコードを書けばいいかというと、答えは直感に反しますが、答えは、レイヤーで隠される画像側のプログラムのほうにコードを書くことになるかと思います。(隠す側の画像のプログラムではないのです。)
 
たとえば、戦闘中に背景でマップ画面が半透明の黒レイヤーで隠されている場合、戦闘画面用コードではなく、マップ画面の描画コード側に、半透明処理を描くことになります。このため、フラグ管理をする事になり、たとえば「レイヤー変数 reiyaa が 1なら、このマップ画像に半透明レイヤーを載せる」のようなコードをマップ側に書く必要があるのです。
 
コレはなぜそうなるかというと、理由は、windowsでは何故かHDCで宣言した画像ハンドルをグローバル変数としては保管できないからです。形式的にグローバル変数として宣言すれば、コンパイルは通りますが、しかし関数の終了時にwindowsが勝手に画像データを消去してしまうので、このときに半透明処理の演算結果も処理されてしまいます。(別の節でも説明しましたが、つまりwindowsでは、何故か画像データをグローバル変数的に別の関数から呼び出すことが出来ないのです。)
 
winodwsには、こういった制約があるので、なので戦闘画面の背景マップの例の場合なら、どうすれば背景マップだけ黒色の半透明レイヤーで隠せるかというと、結果的にマップ画面側に黒色の半透明レイヤー処理を書かなければなりません。(でないと、レイヤーが無効になったりします。)
 
そして、半透明レイヤーで演算したあとに、最後に裏画面を本画面に転写すればいいのです。