ページ 11

DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 08:44
by 史上最悪のデスペナ
PUL画面.pngで右下の楕円のあたりに、Start.pngをノーブレンドで描画してボタンとし、
Start.pngがある位置にマウスカーソルが来たらPUL画面にStartを加算ブレンドしました。
ボタンが光るようになったのは予定通りなのですが、何故かボタン以外のところが暗くなってしまいます。
Start.pngでは、ボタンの周りは透明にしてあるので加算ブレンドではそこは加算されずに元のPUL画面の色のまま変わらないと考えたのですが・・・・・

ボタン部分のみを明るくしてそれ以外のところは変わらないようにするにはどうしたらいいでしょうか?

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 10:19
by softya(ソフト屋)
白に赤を加算ブレンドしても白のままだと思いますよ。何か違うブレンドしてませんか?
簡単な検証プログラムを提示してもらった方が良いと思います。

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 10:30
by 史上最悪のデスペナ
一部抜粋。こんな感じです。今書いてて思いましたが言葉が足りませんでしたね。
史上最悪のデスペナ さんが書きました:PUL画面.pngで右下の楕円のあたりに、Start.pngをノーブレンドで描画してボタンとし、
Start.pngがある位置にマウスカーソルが来たらPUL画面にStartを加算ブレンドしました。
と書きましたが、

PUL画面.pngで右下の楕円のあたりに、Start.pngをノーブレンドで描画してボタンとし、
Start.pngがある位置にマウスカーソルが来たらその上にさらにStartを加算ブレンドしました。

ですね

コードで「//PUL画面」の下の中かっこはプログラム本体でいくつか画面切り替えがあるので自分の見やすいように一つの画面処理を括ったものです。

コード:

#include "DXLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

//////////////////////////////////////////////////////////////////////////////////////////////

	//PUL画面
	{
		//DXlibの初期化
		if(DxLib_Init() == -1) return -1;

		//バックバッファに描画
		if(SetDrawScreen(DX_SCREEN_BACK) != 0) return -1;

		int MainGrapHnd = LoadGraph( "model\\pic\\PUL画面.png" );
		int ButtonHnd = LoadGraph( "model\\pic\\Start.png" );

		int MouseX, MouseY;

		FontHandle = CreateFontToHandle(NULL, 30, 9);
		int FontHnd1 = CreateFontToHandle(NULL, 20, 5);

		while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
		{
			ClearDrawScreen();

 			DrawGraph( 0, 0, MainGrapHnd, TRUE );
			GetMousePoint( &MouseX, &MouseY);

			if( (470<=MouseX) && (MouseX<=580) && (330<=MouseY) && (MouseY<=390) )
			{
				// 描画ブレンドモードを加算ブレンドにする
				SetDrawBlendMode( DX_BLENDMODE_ADD, 128) ;
				DrawGraph( 470, 330, ButtonHnd, TRUE );

				if(( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0) break;
			} else {
				SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
				DrawGraph( 470, 330, ButtonHnd, TRUE );
			}

			DrawFormatStringToHandle( 485, 345, GetColor(255, 255, 255), FontHandle, "START" );
			DrawFormatStringToHandle( 170, 15, GetColor( 128, 128, 128), FontHnd1, "お知らせ" );

			ScreenFlip();
		}
	}
}

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 10:40
by softya(ソフト屋)
とりあえず加算ブレンドモードに切り替えると以後全部加算ブレンドで動作するので、一回ごとに元に戻してください。

直してみたもの。

コード:

#include "DXLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
 
//////////////////////////////////////////////////////////////////////////////////////////////
 
    //PUL画面
    {
		ChangeWindowMode(TRUE);
        //DXlibの初期化
        if(DxLib_Init() == -1) return -1;
 
        //バックバッファに描画
        if(SetDrawScreen(DX_SCREEN_BACK) != 0) return -1;
 
        int MainGrapHnd = LoadGraph( "model\\pic\\PUL画面.png" );
        int ButtonHnd = LoadGraph( "model\\pic\\Start.png" );
 
        int MouseX, MouseY;
 
		int FontHandle = CreateFontToHandle(NULL, 30, 9);
        int FontHnd1 = CreateFontToHandle(NULL, 20, 5);
 
        while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
        {
            ClearDrawScreen();
 
            DrawGraph( 0, 0, MainGrapHnd, TRUE );
            GetMousePoint( &MouseX, &MouseY);
 
            if( (470<=MouseX) && (MouseX<=580) && (330<=MouseY) && (MouseY<=390) )
            {
                // 描画ブレンドモードを加算ブレンドにする
                DrawGraph( 470, 330, ButtonHnd, TRUE );
                SetDrawBlendMode( DX_BLENDMODE_ADD, 128) ;
                DrawGraph( 470, 330, ButtonHnd, TRUE );
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
 
                if(( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0) break;
            } else {
                DrawGraph( 470, 330, ButtonHnd, TRUE );
            }
 
            DrawFormatStringToHandle( 485, 345, GetColor(255, 255, 255), FontHandle, "START" );
            DrawFormatStringToHandle( 170, 15, GetColor( 128, 128, 128), FontHnd1, "お知らせ" );
 
            ScreenFlip();
        }
    }
}

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 10:49
by 史上最悪のデスペナ
出来ました!ありがとうございます。

常に加算ブレンドになっていたからPUL画面.png自身が自分に加算ブレンドを行って暗くなっていたんですね。

・・・・・・・・・ボタンとか画面がしょぼくてお恥ずかしい。。。。。皆さんどうやって作ってるのか気になる・・・・・・・・・

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 10:52
by softya(ソフト屋)
手前味噌ですが、私のボタンデザインツールです。
「ボタン工房」
http://softyasu.net/btnmaker.html
良かったらお試しください。

【補足】
こちらの彩彩畑も便利かと思います。
「IROMSOFT & IROMBOOK(画像 素材 作成 グラフィック・ツール)」
http://www.hm.h555.net/~irom/

Re: DXLibにおける加算ブレンド

Posted: 2011年11月01日(火) 11:00
by 史上最悪のデスペナ
おぉ。これは凄い。いろんなとこに多用させていただきます。
ゲームネット接続ナビも気になりますね。完成が楽しみです。

彩彩畑は私には合いませんでした^^;あれはGimpで作ったものです。