Re: 裏画面に対するブレンド ( No.1 ) |
- 名前:優柔不断 日時:2008/09/15 13:13
>動的に2次元配列をnewによって確保したいと考えています。Width×Height個のメモリを確保したく以下のコードを書いたのですが、
>「'int *' 型は 'int' 型に変換できない」と怒られてしまいました。
Mapの型をint**にしてください。
|
Re: 裏画面に対するブレンド ( No.2 ) |
- 名前:レッド 日時:2008/09/15 14:18
優柔不断さん、ご返信誠にありがとうございます。
コードを以下のように書き直したのですが、
「'int *' 型は 'int * *' 型に変換できない」
とのエラーが出ます。
int** Map;
Map=new int[Width+3];//この行でエラー
for(int i=0;i<Width+3;i++)
Map[i]=new int[Height];
最初はint**型で2次元の動的配列を作ろうとしていたのですが、
他のC++について解説しているサイトを見ると
int*型を用いて2次元のメモリを確保していたため、
途中からint*にしていました。
基本的なことで誠に申し訳ございません。
|
Re: 裏画面に対するブレンド ( No.3 ) |
- 名前:IW 日時:2008/09/15 16:01
>これは効率的にどうなのでしょうか。
描画したデータをメモリに書き戻すことになるのでちょっと重そうですね。
>メッセージ領域の全ての画像を半透明化するにはどうしたらよいのでしょう
単純に考えるなら
1 メッセージウィンドウの下になる背景を描く
2 GetDrawBlendMode()で現在のブレンドステータスを保持する
3 SetDrawBlendMode()で半透明指定(DX_BLENDMODE_ALPHA)をする
4 メッセージウィンドウを描く
5 2で保持したステータスを SetDrawBlendMode()で指定して元に戻す
6 メッセージウィンドウ上のメッセージを描く
でいいのではないでしょうか。
|
Re: 裏画面に対するブレンド ( No.4 ) |
- 名前:レッド 日時:2008/09/15 17:17
IWさん、返信誠にありがとうございます。
お恥ずかしいことに私、
GetDrawBlendMode() と DrawBlendGraph の動きを勘違いしておりました。
てっきり、DrawBlendGraphでないと画像のブレンドができないものと思い込んでおりました・・・。
メッセージウィンドウの半透明化につきましては、
IWさんのやり方をさせて頂きます。
お騒がせして誠に申し訳ございませんでした。
|
Re: 裏画面に対するブレンド ( No.5 ) |
- 名前:優柔不断 日時:2008/09/16 00:20
>Map=new int[Width+3];//この行でエラー
int*の動的配列を用意する必要があります。
|
Re: 裏画面に対するブレンド ( No.6 ) |
- 名前:通 日時:2008/09/16 01:01
> int** Map;
> Map=new int[Width+3];//この行でエラー
型がまるっきり違います。
Mapはint**型ですが、
ここでnewが返すのはint*型になります。
優柔不断さんが仰るとおりint*型の配列が必要です
まず、intのポインタのポインタ変数を宣言します。
int** Map;
次に、このポインタのポインタに対し、
intのポインタの配列を確保
Map = new int* [M];
用意したM個のポインタのそれぞれに、
N個の領域をそれぞれ確保します。
for( int i = 0; i < M; i++ ){
Map[ i ] = new int [N];
}
ただし、これらの領域はMap[0][0]のように
扱うことは出来ても、メモリ領域上では
まとまっている訳ではないので扱いには
注意が必要です。
開放も確保したそれぞれの配列と
Mapに対して行う必要があります。
C/C++での基礎部分ですので、上記の説明で
わからないなら無理に使わない方が無難です。
|
Re: 裏画面に対するブレンド ( No.7 ) |
- 名前:レッド 日時:2008/09/16 16:39
優柔不断さん、通さん、返信誠にありがとうございます。
おかげさまで任意のサイズの2次元配列を動的に確保することができました。
細かい説明、本当にありがとうございます。
基本的な事柄でお騒がせしてしまい、本当に申し訳ございません。
精進するよう努力いたします。
本当にありがとうございました。
|