Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/02/13 (土)

ノベル用関数の修正

| 21:12 | ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ノベルテキスト描画は、んなには変わってないけど、それまで関数内で決め打ちだった文字色、影色、文字と影との距離を引数で指定出来るようにした。

 引数を増やした結果(?)引数の省略が出来なくなってしまった。省略しようとすると「引数『X』が不足しています。」と言われてしまうよ! 省略してるのはこじゃないんだが。どうゆうことかよくわからん。

 でも、まあ、プログラム中で全部きっちり指定するつもりだから、別にいいけどね。

 ところでこれまで、文字の高さを(「あ」の文字高さ取得)としていたんだけど、影を大きく取ると重なったり、特に選択肢の時のネガポジが良くないので、(「あ」の文字高さ取得+メッセージ影)に直した。

 文字書体関数内で決め打ちしていたのをやめて、外で指定されている値をのまま使用することにした。

●ノベルテキスト描画({グループ=?}OBJのX,Yへ{数値=$FFFFFF}表示色,{数値=$000000}影色,{数値=2}影,{数値=200}速度でSを)
	XXは整数。
  もし、速度=0ならば
    文字色は影色。
    OBJのX+影,Y+影へSを文字描画。
    文字色表示色。
    OBJのX,YへSを文字描画。
    描画処理反映
     
  違えば、
    XX=X
    (Sの文字数
      Sの回数から1文字抜き出す。

      もしそれ=「{CHR(10)}」ならば
        X=XX
        Y=Y+(それ文字高さ取得+メッセージ影)
        続ける

      文字色は影色。
      OBJのX+影,Y+影へそれ文字描画。
      文字色表示色。
      OBJのX,Yへそれ文字描画。
      描画処理反映
      (速度/1000)秒待つ。
   
      X=X+(それ文字幅取得


 キャラ合成は、立ち絵を背景に重ねるためのもの。

 なでしこの画像合成の不具合が直ったかどうかは試してないけど、とにかく画像合成の場合、左上のドットの色を取得して透過色として扱うことになっていましたが、指定したカラーを透過色として扱うようにしています。

 して、透明度を指定して、サウンドノベルの立ち絵っぽい表示ができるようにした。

●キャラ合成({グループ=?}コピー元を{数値=$00FF00}透過色,{数値=100}透明度で{グループ=?}コピー先のX,Yへ)
	キャラ透過用をイメージとして作成。キャラ透過用の可視はオフ。
	# コピー元を保存
	キャラ透過用の画像はコピー元→名前
	
	# マスクの作成(キャラの透過部分が白、表示部分が黒の画像)
	マスク画像をイメージとして作成。マスク画像の可視はオフ。
	マスク画像の画像はコピー元→名前
	マスク画像を透過色で画像マスク作成
	
	# 背景と立ち絵を半透明合成したものをキャラ画像とする
	# 背景の方を半透明合成しているので、透明度の値を逆にしている。
	# キャラ透過用に背景を重ねたいがどういうわけかエラーになる
 	コピー先をコピー元のX,Yへ(100-透明度)で画像半透明コピー

	キャラ画像をイメージとして作成。キャラ画像の可視はオフ。
	キャラ画像の画像はコピー元→名前

  # コピー元を元に戻す
	キャラ透過用をコピー元の0,0へ画像コピー。
	
	# キャラの透過色部分を黒に変換
	# はじめからキャラの透過色を黒にすると髪や目や文字に黒が使用出来なくなる
	# また、先にマスクを作ってあるので背景と半透明合成したキャラ画像も使える
	マスク画像を画像ネガポジ
	マスク画像をキャラ画像の0,0へ画像ANDコピー
	マスク画像を画像ネガポジ

	# 合成実行
	マスク画像をコピー先のX,Yへ画像ANDコピー		#背景にマスクを重ねる
	キャラ画像をコピー先のX,Yへ画像ORコピー			#背景にキャラを重ねる

	VCL_FREE(マスク画像)
	VCL_FREE(キャラ画像)
	VCL_FREE(キャラ透過用)

 以前の、「→壊す」でエラー出まくる件は、いまだに直っていないみたいなんだけど、のかわりに「VCL_FREE」とゆうまじないを覚えた!



 テキストウィンドウ合成は、矩形指定した範囲は半透明にし、それ以外のところは指定した透過色を透過し、普通に合成するもの。

 全体的には、画像部分透過コピーとかいういまいち分かりづらかった関数名を改めただけですが;

 キャラ合成を使っているので、キャラ合成とセットです。

●テキストウィンドウ合成({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色,{数値=50}透明度で{グループ=?}コピー先のX2,Y2へ)
  透過処理用をイメージとして作成。透過処理用の可視はオフ。
  透過処理用の幅はW。透過処理用の高さはH。

  # 半透明にしたい部分を透過処理用に移す
  コピー元のX,Y,W,Hを透過処理用の0,0へ画像部分コピー

  # コピー元の半透明にしたい部分以外をコピー先へ合成
  塗り色は透過色。線色は透過色。線太さは0。
  コピー元のX,YからX+W,Y+Hへ四角。
  コピー元を透過色,100でコピー先のX2,Y2へキャラ合成。
  
  # 半透明にしたい部分を透過コピー
  透過処理用をコピー先のX+X2,Y+Y2へ透明度で画像半透明コピー

  # コピー元を元に戻す
  透過処理用をコピー元のX,Yへ画像コピーVCL_FREE(透過処理用)

 キャラ合成の方の「透過色,透明度」は省略しても動くのに、テキストウィンドウ合成の方は、エラーになってしまうんだよね。なんでだ(?_?)

 そういえば、キャラ合成と書式を合わせたんだけど、以前画像部分透過コピーだったときには、({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色で{グループ=?}コピー先のX2,Y2へ{数値=50}透明度で)という感じに、透過色と透明度が分かれていて、の時は透過色の省略が出来てたような気がする。

 まだまだいろいろと深遠な謎が多いね。

 省略しないからいいんだけどさ。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160213