DXLibにおける加算ブレンド

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
史上最悪のデスペナ
記事: 521
登録日時: 14年前

DXLibにおける加算ブレンド

#1

投稿記事 by 史上最悪のデスペナ » 14年前

PUL画面.pngで右下の楕円のあたりに、Start.pngをノーブレンドで描画してボタンとし、
Start.pngがある位置にマウスカーソルが来たらPUL画面にStartを加算ブレンドしました。
ボタンが光るようになったのは予定通りなのですが、何故かボタン以外のところが暗くなってしまいます。
Start.pngでは、ボタンの周りは透明にしてあるので加算ブレンドではそこは加算されずに元のPUL画面の色のまま変わらないと考えたのですが・・・・・

ボタン部分のみを明るくしてそれ以外のところは変わらないようにするにはどうしたらいいでしょうか?
添付ファイル
PUL画面.png
メイン画面
PUL画面.png (3.72 KiB) 閲覧数: 3301 回
Start.png
ボタンのつもり
Start.png (3.06 KiB) 閲覧数: 3301 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 14年前

白に赤を加算ブレンドしても白のままだと思いますよ。何か違うブレンドしてませんか?
簡単な検証プログラムを提示してもらった方が良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

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

#3

投稿記事 by 史上最悪のデスペナ » 14年前

一部抜粋。こんな感じです。今書いてて思いましたが言葉が足りませんでしたね。
史上最悪のデスペナ さんが書きました: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();
		}
	}
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 14年前

とりあえず加算ブレンドモードに切り替えると以後全部加算ブレンドで動作するので、一回ごとに元に戻してください。

直してみたもの。

コード:

#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();
        }
    }
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

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

#5

投稿記事 by 史上最悪のデスペナ » 14年前

出来ました!ありがとうございます。

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 14年前

手前味噌ですが、私のボタンデザインツールです。
「ボタン工房」
http://softyasu.net/btnmaker.html
良かったらお試しください。

【補足】
こちらの彩彩畑も便利かと思います。
「IROMSOFT & IROMBOOK(画像 素材 作成 グラフィック・ツール)」
http://www.hm.h555.net/~irom/
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

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

#7

投稿記事 by 史上最悪のデスペナ » 14年前

おぉ。これは凄い。いろんなとこに多用させていただきます。
ゲームネット接続ナビも気になりますね。完成が楽しみです。

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

閉鎖

“C言語何でも質問掲示板” へ戻る