ページ 11

SetDrawBrightの利用法

Posted: 2013年8月06日(火) 18:38
by 土門
相談させて下さい。
二種類の画像を個別に描画するとして、
その片方だけにSetDrawBrightの影響を与えて、
もう片方の画像には影響を与えないようにする、といった場合
影響を与えたくない方のDrawGraphの手前に
SetDrawBright(255, 255, 255);をおいてやる方法しかないのですか?

自分のイメージでは

コード:

Draw(){
   //こちらは変化させたい
      SetDrawBright(i, i, i);
      DrawGraph(0,0,Aハンドル,false);←A画像
   
   //こちらは変化させない
   DrawGraph(0,0,Bハンドル,false);←B画像 ※B画像は必ずA画像より手前に描画
}
な感じでいけるかなと思ったんですが、
このままだとB画像まで変化させてしまいました。

なので、自分はB画像の手前に
SetDrawBright(255, 255, 255);をおいているのですが、
なんか毎回これをしなきゃならないのかな?と違和感があります。

もっと簡単に、たとえば、変化させたい画像だけをピンポイントに
SetDrawBrightで変化させる書き方ってありますか?

Re: SetDrawBrightの利用法

Posted: 2013年8月06日(火) 18:45
by みけCAT
例えば、初期化処理で

コード:

int Aハンドル_2;

int sx,sy;
int ds=GetDrawScreen();
GetGraphSize(Aハンドル,&sx,&sy);
Aハンドル_2=MakeScreen(sx,sy,TRUE);
SetDrawScreen(Aハンドル_2);
SetDrawBright(i,i,i);
DrawGraph(0,0,Aハンドル,TRUE);
SetDrawBright(255,255,255);
SetDrawScreen(ds);
として、
提示されたDraw()の中でAハンドルの代わりにAハンドル_2を使用したらどうですか?(未検証です)

【追記】
iが変動するとしたら、あまりよくない方法ですね。

Re: SetDrawBrightの利用法

Posted: 2013年8月06日(火) 18:59
by softya(ソフト屋)
こういう恒久的にパラメータ変化させる関数は必ず自分で戻す必要があります。

Re: SetDrawBrightの利用法

Posted: 2013年8月06日(火) 20:03
by 土門
みけCATさん
ありがとうございます。
ただ、正直自分の書いたものより手間の増える方法ですよね。
いくつもの画像をフェードアウト、フェードインをする場合の話ですので。。

副管理人さん
やはりSetDrawBrightは、個別は無理で
描画中のすべての画像に影響を与えるんですね。
了解です。


不細工ですが、自分のこの方法でいきたいと思います。

Re: SetDrawBrightの利用法

Posted: 2013年8月06日(火) 20:05
by softya(ソフト屋)
土門 さんが書きました:みけCATさん
ありがとうございます。
ただ、正直自分の書いたものより手間の増える方法ですよね。
いくつもの画像をフェードアウト、フェードインをする場合の話ですので。。

副管理人さん
やはりSetDrawBrightは、個別は無理で
描画中のすべての画像に影響を与えるんですね。
了解です。


不細工ですが、自分のこの方法でいきたいと思います。
出来れば考え方として変えたら戻すとした方がバグがなくなります。
つまり不要となったらすぐに戻すのです。

Re: SetDrawBrightの利用法

Posted: 2013年8月06日(火) 22:20
by ISLe
SetDrawBrightのパラメータをスタックするユーティリティクラスを作成すると便利かもしれません。