HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0622
kid画面の構成8未解決


kid

リンク

2017/6/22(Thu) 16:30:55|NO.80348

HSPド新人です よろしくお願いします

今 表示優先の高い順に
メッセージ(ID0 でないほうがいいのかな?)
背景1(ID1 メッセージの下枠)
背景2?(ID2 適当なOBJが表示される)
背景3?(ID3 適当なOBJが表示される)
背景4(ID4 本当の背景)

見たいな画面を作りたいのですが gsel 4から gcopy 4,,,,で 背景を表示しようとしても
全く表示されず
gsel 0から gcopy 4,,,,なら表示されるようなのですが
もしかして ID0の画面に合成した画面しか表示できないのでしょうか?
ID0の下に ID1や2を表示して 結果として 合成された画面にしたいのですが・・・
普通に screen指定すると ウインドウが増えて出るだけなので 嫌な予感がします

私が昔いじっていたハードでは 背景画面として扱える画面が BG1 BG2みたいに
何枚か用意されていて 互いに不干渉でした そんな風な画面構成を作成したいのです

なんか 分かりにくい書き方ですみません(汗
 



この記事に返信する


kino

リンク

2017/6/22(Thu) 18:56:40|NO.80349

>もしかして ID0の画面に合成した画面しか表示できないのでしょうか?

ですねー(^^;
標準命令だと、まず画面をクリアーして
他の画面から自力でコピーして重ね合わせていく感じですねー
普通にコピーすると遅いので redraw を使ってみてください 。



ZAP

リンク

2017/6/22(Thu) 20:43:04|NO.80353

表示画面がレイヤー構造になってて、自動的に重ね合わせがなされるのを
イメージしてるのであれば、残念ですが、自分で合成するしかないと思います。



Velgail

リンク

2017/6/23(Fri) 05:55:10|NO.80354

screenしか知らないからこうなっている という風に認識してのヒント集です

1. screenと同じようなシステムに、「bgscr」(枠なし画面)「buffer」(裏の画面)という物があることを認知していないのであれば、認識しておいて(HDLで調べて)ください。
2. コピー時に画面を上書きしてしまう問題がある という場合は、gmodeの説明を元に、透明色を設定してコピーしましょう。

以上が簡易ヒントとなります。これでとりあえず頑張ってみてください。



スペース

リンク

2017/6/23(Fri) 11:33:35|NO.80356

レイヤードウインドウを使えば出来ないことはない。
ただ難易度は高いし環境によっては適切に表示されない可能性があるので、
おすすめはしません。
https://goo.gl/2V0iEK



kid

リンク

2017/6/23(Fri) 11:45:28|NO.80357

はやっ!w
皆様 レスありがとうございます
やはり 通常はID0に合成されて表示されるんですねぇ・・・

bgscr レイヤーウインドウ
全く知らなかったので 早速調べてみます
ありがとうございます!



MIZUSHIKI

リンク

2017/7/2(Sun) 10:37:50|NO.80471

解決はできましたでしょうか。
初心者には、キーワードとヒントだけでは厳しいのかなとも思いました。

初心者でもわかりやすい講座のサイトを教えてあげると、そこから色々学び取れて良いのかな、と思います。

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を上書きしています。

一応、こういう事も出来るんだという資料的な位置づけで。
あまり初心者のうちからこういう方面に進んで行かない方が良いとは思っています。



MillkeySoftw

リンク

2017/7/2(Sun) 15:51:06|NO.80474

アルファチャンネル付きウィンドウが欲しいってことだよね?
普通に Artlet2D モジュールじゃだめなのかな。

[このグループを Artlet2D で作成]
********************************************************
背景1(ID1 メッセージの下枠)
背景4(ID4 本当の背景)
********************************************************

[このグループを HSPウィンドウで作成]
********************************************************
メッセージ(ID0 でないほうがいいのかな?)
********************************************************

文字列まで半透明にしようと考えると難しいかもしれないけど。
単純に、文字列を表示させるまでができればいいなら、Artlet2D の方が良いと思う。


※おにたまさん、32Bit 色深度ウィンドウを標準で作れるようにしてくださいよ。



MIZUSHIKI

リンク

2017/7/2(Sun) 20:54:49|NO.80477

>アルファチャンネル付きウィンドウが欲しいってことだよね?

MilleySoftwさんの言うとおり、 参考として示したサイトの描画部分を、Artlet2D モジュールを使って置き換えたものが1つの理想形になるのではないかと思います。

私が自己満足として試したかったのは、
iPhoneアプリ開発で経験したような(UIViewを)オブジェクトとして独立させて移動させたりアニメーションさせたりというのをWindowsアプリケーションでも出来ないのかなぁと言うのをやってみたくて、、、
今回、透過(アルファブレンド)する子ウィンドウがそれに近かったこともあって、自分を抑えきれずに書いちゃいました。

表示される内容としては完全に同じなので、ループの中ですべて描画し直してredrawが一般的だと思うので、質問者様にはそちらからHSPのセオリーとして学んで頂いたほうが良いと思います。



ONION software Copyright 1997-2021(c) All rights reserved.