ページ 11

マスク関数の使用法について

Posted: 2010年10月08日(金) 14:18
by ACE
始めましてACEという者です。現在サークル活動でゲーム制作を行っております。
今回はマスク関数の使用法について質問させていただきます。

以前サークルで作ったゲームを配布しようとなったときに他の環境下でも動くか確認したことがあるのですが、
マスク処理が正常に行われないパソコンがありました。当時は締め切りも近く、急遽違う処理を実装して配布しました。

それ以降ゲーム制作にマスク処理を使わないようにしてきたのですが、今制作中のゲームで実装したい表現に
どうしても使わざるを得なくなっています。
今思うと環境依存ではなく私の実装方法が間違っていたのかもしれません。

そこで、関数の使い方や用意するマスク画像等マスク処理を行うときに注意しなければならないことについて
助言いただければと思います。

Re:マスク関数の使用法について

Posted: 2010年10月08日(金) 14:21
by dic
参考にならないハッカーですが
思いつく限りではデスクトップの画像の扱い方かもしれません
8ビット環境、16ビット、24ビット、32ビット
なおかつその中での色素のビットマスクが違う環境があります
使用しているビデオカードの色素の取り扱い方が違います
これ以上は詳しくはないです

Re:マスク関数の使用法について

Posted: 2010年10月09日(土) 00:44
by ACE
dicさん、ご返答ありがとうございます。
やはりマスク処理は環境依存が強いのでしょうか。
こちらの管理人様が公開されているAerobeatでは随所でマスク処理が
使われていて、それに近い表現をしてみたいと思ったのですが…。

Re:マスク関数の使用法について

Posted: 2010年10月09日(土) 00:57
by シエル
ちょっと返答がしにくいですね。

関数の使い方といっても、まず何のライブラリで開発されてるのかわからないので
具体的なアドバイスが出来ません。

また、マスク処理が正常に行われないとありますが、その時の状況もわからないので
具体的なアドバイスは難しいかと。

DXライブラリだったら、私はさっぱりわからないので具体的なアドバイスはできませんが。

Re:マスク関数の使用法について

Posted: 2010年10月09日(土) 20:01
by ACE
>シエルさん
申し訳ありません。詳しい説明もせずに質問していました。

開発環境はC/C++とDXライブラリです。
不具合の具体的な内容としては、マスク画像で隠したい部分がまったく隠れていなかったということです。
マスク画像を変更してみたりもしましたが改善が見られなかったので、
マスク機能自体がうまく動いてないものと認識しています。

因みに正常動作した環境はvista/ノートPC一台、XP/デスクトップPC三台です。
異常動作した環境はXP/ノートPC二台になります。

Re:マスク関数の使用法について

Posted: 2010年10月10日(日) 22:52
by dic
マスク処理関数内でどのような処理をしているかを書いてくれる
よりアドバイスされるかと思います

Re:マスク関数の使用法について

Posted: 2010年10月11日(月) 00:31
by ACE
>dicさん
以下に当時のコードのマスクに関係する部分を記載します。
二年前のコードなのですが覚えている範囲でコメントを追加しました。
//ゲームシーンのコンストラクタ
Result::Result(){
 (中略)
  CreateMaskScreen();     //マスク画面の作成
  graph.push_back(LoadMask("graph/black.bmp"));   //std::vectorにハンドル追加
  DrawMask(0,0,graph[22],DX_MASKTRANS_NONE);      //追加したハンドルでマスク描画
  SetUseMaskScreenFlag(FALSE);                    //一時的にマスク使用フラグを折る
}

//描画関数
void Result::Draw(){
  (マスクを適用しない部分の描画)
  SetUseMaskScreenFlag(TRUE);
 (マスクを適用する部分の描画)
  SetUseMaskScreenFlag(FALSE);
}

//ゲームシーンのデストラクタ
Result::~Result(){
 (中略)
  DeleteMaskScreen();        //マスク画面の削除
}
DXライブラリのレファレンスにあるサンプルプログラムを参考にしました。