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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0717
くるくるHSPでローディングの作成5解決


くるくる

リンク

2021/7/17(Sat) 10:35:34|NO.93238

MIZUKIさんのFloppy Wordというゲームで見つけたのですが、スコアランキング更新
の左に表示されるくるくる?みたいなのを作りたいです。すでにWindows 10のローディング
(球が5個出てきてクルクル動くやつ)は、知恵袋で見て分かったのですが、Webにある
さまざまなローディングUIを作りたいです。
もし、できなければGIFでなんとかしたいです。
よろしくお願いします。



この記事に返信する


MIZUSHIKI

リンク

2021/7/18(Sun) 01:35:53|NO.93251

こんにちは、Floppy Word作者です。

実はあのローディングは、何か特別なものではなくて自力で描画しています。

#include "a2d.hsp" alCreateImage 0, 40,40 repeat alColor 255,255,255, 255 : alFillRect : alColor 0,0,200, 255 alDrawArc 5,5, 30,30, (cnt*5)\360, (cnt*5)\720-360 +30// + で溜めが入ることで(?)なんとなく加速感が増す(...?) alCopyImageToScreen 0,0, 100,100 redraw 1 await 16 loop

もしGIF画像を使いたい場合は、MCIを使うと簡単に表示できるそうです。
http://lhsp.s206.xrea.com/hsp_tips3.html

; MCIによるGIFファイル表示サンプルソース (by Kpan) [HSP2/3] onexit *exit ; JPEGファイルも一応可。 dialog "gif;*.jpg", 16, "画像ファイル" if stat = 0 : stop ; ウィンドウハンドルを取得 ; (!HSP3の場合はこの部分は不要なのでコメントアウトを) ;mref bmscr, 67 : hwnd = bmscr.13 //コメントアウトした! ; GIFファイルの読み込み mci "open \""+refstr+"\" alias A type mpegvideo style child parent "+hwnd+"" ; 表示位置の設定 (ここではX=50、Y=100) mci "put A window at 50 100 0 0" ; GIFファイルの表示 or 再生 ; (「repeat」はアニメーションGIF用で、通常の画像表示なら不要) mci "play A repeat" stop *exit mci "close A" end



くるくる

リンク

2021/7/18(Sun) 12:44:16|NO.93252

MIZUKIさん、ありがとうございます。
>実はあのローディングは、何か特別なものではなくて自力で描画しています。
そうなんですね。すごくよくできていたのでイージング関数などでWin 10 のクルクルを
伸ばしたものだと思ってずっとWin 10のほうをやっていました。拡張機能を使うと実用性
がぐっと上がりますね。
>もしGIF画像を使いたい場合は、MCIを使うと簡単に表示できるそうです。
GIFについて教えていただきありがとうございます。そちらも使いたいと思います。
もう一つ質問してもよろしいでしょうか?
Floppy Wordで子ウィンドウを表示してクルクルが出てきていたのですがあれはどうやって
行うのでしょうか? これを教えてください。



MIZUSHIKI

リンク

2021/7/18(Sun) 18:12:11|NO.93256

う・・・その下が透けてる子ウィンドウや処理たちは自作モジュールです。

a2d+AlphaLayer/mod_TimerRepeat モジュール
http://suwa.pupu.jp/HSP/index.html

そして・・・すみません!今ちょっと時間が無くなってしまいまして!
取り急ぎ見た目で分かりそうな情報だけ書いていきます。
(また後で捕捉したいと思います。。。)

だいたいこんな感じでくるくる部分は使ってました。
// ★ netincludeという自作モジュールで、GitHubに置いてあるモジュールを取得しに行く処理が入ってます。
// 実行したときのカレントディレクトリに保存されますが、
// もしそういった動作が嫌な場合は上記リンク先からモジュールをダウンロードして通常の#includeに書き換えてください。

#ifdef _debug #include "hspinet.as" #include "mod_regexp.as" #define netinclude(%1,%2=_) addition %1* %2 exist"hsptmp":if strsize>0{t@_@="":d@_@=dir_exe+"\\common\\":notesel t@_@:noteload"hsptmp":noteunsel:matches t@_@,t@_@,"#netinclude\\s*\"(.+?)\"\\s*/\\s*,*\\s*(\\w*)":repeat stat:r@_@="":if t@_@.cnt.2="common"{r@_@=d@_@}exist r@_@+t@_@.cnt.1:t@_@.cnt="0":if strsize<0{if r@_@!d@_@{t@_@.cnt="1":n@_@++}else{t@_@.cnt="2":m@_@++}}loop:if n@_@+m@_@>0{a@_@=dir_cur+"\\\n\nに\n\n":repeat 2,1:if n@_@=0&cnt=1{continue}if m@_@>0&cnt=2{if n@_@!0{a@_@+="\nをダウンロード、\n------\n\n"}else{a@_@=""}a@_@+=d@_@+"\n\nに\n\n"}r@_@=""+cnt:foreach t@_@:if t@_@.cnt!r@_@{continue}a@_@+="・"+t@_@.cnt.1+"\n":loop:loop:dialog a@_@+"\nをダウンロードします",2,"#net\include":if stat=6{netinit:foreach t@_@:if t@_@.cnt="0"{continue}c@_@=dir_cur:if t@_@.cnt="2"{chdir d@_@}split t@_@.cnt.1,"/",r@_@:if stat>0{repeat stat-1:dirlist a@_@,r@_@.cnt,5:if stat=0{mkdir r@_@.cnt}chdir r@_@.cnt:loop}neturl "https://raw.githubusercontent.com/"+getpath(t@_@.cnt.1,32):netload getpath(t@_@.cnt.1,8):chdir c@_@:loop:dialog"再実行して下さい":end}}sdim t@_@} #else #define netinclude(%1,%2=_) include %1 #endif //↑netincludeモジュール // GitHubからモジュールをダウンロード。 #netinclude "MIZUSHIKI/HSP-Module/master/a2d+AlphaLayer.hsp"/ #netinclude "MIZUSHIKI/HSP-Module/master/mod_TimerRepeat.hsp"/ screen 0, 280,480 //アルファレイヤー子ウィンドウ張り付け alCreateImage 0, 180,80 alFont "Times New Roman", 40 ; フォントを設定 alalSetParent 0,,, 50,220 ; ID-0(描画先ウィンドウ)に張り付け //timer_repeat内は一度素通りして、後から勝手に呼び出されます。詳しくはマニュアルを参照ください。 timer_repeat 16 alErase : alColor 200,200,255, 200 : alFillRect alColor 200,0,0, 100 alFillPie 15,15, 50,50, (timer_cnt*5)\360-90, (timer_cnt*5)\720-360 +30// 加速感(...?) alColor 50,50,200, 255 alDrawText ""+timer_cnt/10+"%",70,0,110,80,1,1 alalRedraw 0 timer_loop //適当な処理で動く背景 buffer 1,560,480 : picload dir_tv+"\\pronama.png",1 : pos 280 : picload dir_tv+"\\pronama.png",1 gsel 0 : gmode 0, 560,480 repeat pos (cnt*4)\280-280,0 : gcopy 1 await 16 loop stop



MIZUSHIKI

リンク

2021/7/20(Tue) 03:09:15|NO.93259

お恥ずかしい早とちりをしてしまいました。。。
いま改めて読み返してみると、くるくるさんが知りたいのはどう考えても子ウィンドウの作り方のことでしたね・・・。

Floppy Wordでは前回のスクリプトのように a2d+AlphaLayerモジュールを使っているんですが、
一般的には、子ウィンドウの登録は Win32 API関数の SetParent を使って行います。
その際、ウィンドウスタイルを子ウィンドウ用に変更する必要があります。

#include "user32.as" //win32api関数を使えるようにする #define GWL_STYLE 0xFFFFFFF0 #define WS_POPUP 0x80000000 #define WS_CHILD 0x40000000 picload dir_tv+"\\sozai4.jpg" hw0 = hwnd // screen 0 のウィンドウハンドル bgscr 1, 180,100, 2, (ginfo_sx-180)/2,(ginfo_sy-100)/2 ; 最初は非表示にしといて hw1 = hwnd // bgscr 1 のウィンドウハンドル //ウィンドウスタイルを子ウィンドウ用にする GetWindowLong hw1, GWL_STYLE SetWindowLong hw1, GWL_STYLE, stat | WS_POPUP^WS_POPUP | WS_CHILD ; 安全のためWS_POPUPは付けてからまた外している SetParent hw1, hw0 // bgscr 1 を screen 0 の子ウィンドウに登録 gsel 1,1 //子ウィンドウを再表示 //オマケ なんとなく くるくるローディング風 setease 0,M_PI*2, ease_cubic_inout ; イージング範囲、タイプ等の設定 repeat redraw 0 color 50,255,50 : boxf 0,0,200,200 : color 255,0,0 c=cnt repeat 5 // ズラして5玉描画 x = geteasef((c-cnt*10)\100,100) ; イージング値の取得 pos sin(x)*25+40,-cos(x)*25+40 : mes "●" loop pos 120,40 : mes ""+(cnt/10)+"%" redraw 1 await 16 loop



くるくる

リンク

2021/7/20(Tue) 15:57:52|NO.93260

MIZUKIさん、ありがとうございます。
子ウィンドウのスタイルにする方法がわからなかったので助かりました!
いろいろ教えていただきありがとうございました。



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