shinさん始めまして、DXライブラリの管理人です。
キャラクター画像のベタ塗りは、お察しの通り現状の
DXライブラリでは全く同じ形のベタ塗りされた画像を
用意するのが一般的な方法となります・・・が、最近追加
した、マスク機能を使用すると元のキャラクター画像だけで
一応実現可能です。
宜しければこちらをダウンロードして下さい。m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
最近追加した機能とはZバッファを使ったマスクの機能で、
通常3Dレンダリングで遠くの物体が手前の物体に隠れるように
するために使うZバッファを、マスクの機能として使おう、というものです。
(詳しくはこちらのスレッドの No.11 の書き込みをご覧下さい
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=313 )
その機能を使用してベタ塗りを行うサンプルが以下になります。
(画像をベタ塗りで一枚表示するだけのサンプルです。BetaNuri という関数で
画像のベタ塗り描画をしています)
#include "DxLib.h"
// ベタ塗り関数
void BetaNuri( int x, int y, int GrHandle, int Color )
{
int w, h;
// 画像のサイズを取得する
GetGraphSize( GrHandle, &w, &h );
// Zバッファを有効にする
SetUseZBufferFlag( TRUE );
// Zバッファに画像と同じ大きさのマスクを書き込む
DrawBoxToZBuffer( x, y, x + w, y + h, TRUE, DX_ZWRITE_MASK );
// Zバッファに画像の形でマスクを刳り貫く
DrawGraphToZBuffer( x, y, GrHandle, DX_ZWRITE_CLEAR );
// 画像の大きさのボックスを描画する(マスクが刳り貫かれているところしか塗りつぶされない)
DrawBox( x, y, x + w, y + h, Color, TRUE );
// Zバッファを無効にする
SetUseZBufferFlag( FALSE );
}
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GraphHandle;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// 画像の読み込み
GraphHandle = LoadGraph( "test1.bmp" );
// 赤色でベタ塗り描画を行う
BetaNuri( 0, 0, GraphHandle, GetColor( 255,0,0 ) );
// 裏画面の内容を表画面に反映
ScreenFlip();
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
Zバッファを使ったマスク機能のことが分からなくても BetaNuri 関数を
使用すればベタ塗り描画は出来ます。
ただ、このZバッファのマスク機能には以下の制限がありますので、
ご使用の際には注意してください。
・3D機能を使用した場合のみ有効なので、ソフトウエアレンダリングモードでは使えない
・表画面が描画先になっている場合も無効
・ClearDrawScreen で DrawGraphToZBuffer 等でZバッファに描画した内容がリセットされる