解決はできましたでしょうか。
初心者には、キーワードとヒントだけでは厳しいのかなとも思いました。
初心者でもわかりやすい講座のサイトを教えてあげると、そこから色々学び取れて良いのかな、と思います。
kidさんは多分ADVゲームを作りたいのですよね?
自分もザッと調べてみたところ、
http://hsp-game.seesaa.net/article/293155596.html
の辺りがスクリプトも解説絵も入っていて初心者にもわかりやすいかなと思いました。参考にしてみてください。
皆さんも、このジャンルを初めて作るときはこのサイト・講座を見るとわかりやすい、というような情報をお持ちでしょうか?
どこかにまとめ等があると便利ですよね。
・・・・・・・・・で、以下は完全自己満足の領域なのですが、、、
>表示画面がレイヤー構造になってて、自動的に重ね合わせがなされるのを
>イメージしてるのであれば、残念ですが、自分で合成するしかないと思います。
>レイヤードウインドウを使えば出来ないことはない。
というのを試行錯誤してみた結果です。
//コンパイル前に一度だけ実行して素材を集めます。
// (実行ファイル自動作成で出来るhsptmp.exeと同じ場所にファイルがコピーされればOK)
exist dir_exe+"/hsptv/jp6girl.bmp"
if strsize!-1 : bcopy dir_exe+"/hsptv/jp6girl.bmp", dir_cur+"/jp6girl.bmp"
exist dir_exe+"/hsptv/sozai4.jpg"
if strsize!-1 : bcopy dir_exe+"/hsptv/sozai4.jpg", dir_cur+"/sozai4.jpg"
#include "user32.as"
#define GWL_EXSTYLE -20 ;拡張ウィンドウスタイル
#define WS_EX_LAYERED $80000 ;レイヤードウィンドウにする
#define WS_EX_TRANSPARENT $20 ;マウスイベントの透過(ウィンドウをクリックしたことにならず、その下のウィンドウをクリックしたことになる)
#define LWA_COLORKEY 1 ;設定した色を透明にしてウィンドウを描画
#define LWA_ALPHA 2 ;設定した透明度でウィンドウを半透明に描画
#include "module_lwm.hsp" ;レイヤードウィンドウ総合モジュール
dim hw,99;各ウィンドウのウィンドウハンドル(hwnd)を記憶する。
//背景
screen 0, 640, 480
picload "sozai4.jpg" ;背景を読み込み
hw(0) = hwnd
//女の子
bgscr 1,
picload "jp6girl.bmp" ;女の子を読み込み
hw(1) = hwnd
SetParent hw(1), hw(0) ;screen 0 の子ウィンドウにする
GetWindowLong hw(1), GWL_EXSTYLE
SetWindowLong hw(1), GWL_EXSTYLE, stat | WS_EX_LAYERED | WS_EX_TRANSPARENT ;拡張ウィンドウスタイルに WS_EX_LAYERED | WS_EX_TRANSPARENT を追加
SetLayeredWindowAttributes hw(1), 0, 0, LWA_COLORKEY ;背景透過
//メッセージウィンドウ
bgscr 2, 520,150, 0, 60,310
hw(2) = hwnd
color 255,120,120 :boxf ;ウィンドウ色で塗り潰し
SetParent hw(2), hw(0) ;screen 0 の子ウィンドウにする
GetWindowLong hw(2), GWL_EXSTYLE
SetWindowLong hw(2), GWL_EXSTYLE, stat|WS_EX_LAYERED| WS_EX_TRANSPARENT ;拡張ウィンドウスタイルに WS_EX_LAYERED | WS_EX_TRANSPARENT を追加
SetLayeredWindowAttributes hw(2), 0, 128, LWA_ALPHA ;半透明化
//color 0,0,0
//font "MS Pゴシック",24
//mes "じぇいぴーろく子ちゃん"
// ↑ここで文字を書いていっても良いが文字も一緒に透けるので↓
//さらに一手間。アルファブレンドで文字を書く。module_lwmを使用。
//色情報ウィンドウ
buffer 11, 520,150
color 0,0,0 : boxf
//アルファ値情報ウィンドウ (描画ウィンドウ:ここに文字を書く)
buffer 12, 520,150
color : boxf ;黒(アルファ値=0)で塗りつぶし
color 255,255,255;白(アルファ値=255)
font "MS Pゴシック",24
mes "じぇいぴーろく子ちゃん"
my=ginfo_mesy+5
//アルファブレンドレイヤードウィンドウにするウィンドウ
bgscr 10, 520,150, 0, 60,310
hw(10)=hwnd
SetParent hw(10), hw(0) ;screen 0 の子ウィンドウにする(bgscr 2 の子ウィンドウにしたら文字も一緒に透けちゃった)
GetWindowLong hw(10), GWL_EXSTYLE
SetWindowLong hw(10), GWL_EXSTYLE, stat| WS_EX_TRANSPARENT ;|WS_EX_LAYERED//←これはLayeredWindowAlphaの中で設定されている
LayeredWindowAlpha 11,12 ;bgscr 10 に 11,12 の内容を描画
width -1,-1,60,310 ;なんか子ウィンドウにするとあさっての方向に飛んで行くから元に戻している(解決にはmodule_lwmの中身を書き換える必要あり)
//↑設定終わり
//↓女の子を動かして文字を書き込み
repeat
wait 5
//女の子を上下にぴょんぴょんさせる。(bgscr 1 の移動で対応できる)
y=int(sin(cnt/2)*20) ;y = -20 〜 +20 //←cntが増えるたびにこの数値の範囲を行ったり来たりする。
gsel 1
width -1,-1,300,20+y ;bgscr 1(女の子)を移動
//sin値が正から負に変わるタイミングで1回文字を書き込み
if maeSin>=0 && sin(cnt/2)<0 {
//アルファ値情報ウィンドウに文字を書き込み
gsel 12
pos mx,my
mes "「ぴょーん。」"
mx+=ginfo_mesx ;描画後次の位置調整(X方向)
if mx+ginfo_mesx>ginfo_sx :mx=0 :my+=ginfo_mesy+5 ;描画後次の位置調整(Y方向)
//bgscr 10 を再描画
gsel 10
LayeredWindowAlpha 11,12 ;描画し直し
width -1,-1,60,310 ;なんか子ウィンドウにするとあさっての方向に飛んで行くから元に戻している(解決にはmodule_lwmの中身を書き換える必要あり)
}
maeSin=sin(cnt/2) ;前回分としてsin値を保存
loop
stop
//良く考えたら、文字表示用の bgscr 10 を作らなくても bgscr 2 のメッセージウィンドウをアルファブレンドレイヤードウィンドウにしてしまえば良かったかも。
//(まぁ、背景透過、半透明化、アルファブレンド を3つ紹介できてるから良しとするか。)
どうしても、HSPエディタからそのまま実行だけでは出来なかったので、上記のスクリプトを試すには下記手順を踏む必要があります。
【手順】
0. まず準備として、下記2つを入手
・レイヤードウィンドウ総合モジュール :スクリプトと同じ場所に置きます。
https://natadea.wordpress.com/2008/03/20/
・Resource Hacker(ソフト):実行ファイルのmanifest書き換えに使います。
http://www.angusj.com/resourcehacker/
1. スクリプトを適当なところに保存。一度、F5(実行)をして、画像ファイルがスクリプトと同じフォルダにコピーされたことを確認。
2. メニュー>HSP>実行ファイル自動作成(ctrl+F9)でhsptmp.exeを作成。
3. Resource Hackerを起動し、hsptmp.exeをウィンドウにドロップ。
3-1. 左ツリー>Manifest>1:1033 中身を下記に書き換え。
(詳細はコチラを参照下さい。
http://hsp.tv/play/pforum.php?mode=pastwch&num=68871)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="OnionSoftware.hsp3.exe"
type="win32"
/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
<description>XPStyle</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
3-2. コンパイル(F5)を実行し、hsptmp.exeファイルに上書き保存。
4.hsptmp.exeを実行すると。。。
上記の手順で作った成果物がこれになります。
http://suwa.pupu.jp/data/LayeredWindowTest.zip
やってる内容は、
半透明、透過、アルファブレンドなレイヤードウィンドウを子ウィンドウにして重ねてます。
半透明や透過な子ウィンドウはWindows8以降でないと出来ないみたいで、
アプリがWindows8の機能に対応してますよっていう宣言はmanifestに書かないといけないようです。
ということでResource Hackerでmanifestを上書きしています。
一応、こういう事も出来るんだという資料的な位置づけで。
あまり初心者のうちからこういう方面に進んで行かない方が良いとは思っています。