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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0424
Kainアニメーションについて教えてください!5解決


Kain

リンク

2018/4/24(Tue) 14:46:47|NO.84120

HSP初心者です。私はいまHSPでWindows 10風のツールをWindows XPパソコンで作成しています。
Win10風のアニメーションをbgscr命令で作ったのですが、やはりちらつきが発生してしまいます。
ほかのパソコンでも同じ症状でした。
bgscrを使わずにアニメーションを付けるにはどうしたらいいですか?
アニメーションの内容は、ソースにあります。
(自分は4:3モニターを1024x768で使用しているため、ワイドのものではおかしな場所に表示されます)


*bar wait 5 bgscr 0,10,25,,1015,0 color 0,0,0 boxf wait 5 bgscr 0,15,30,,1010,0 color 0,0,0 boxf wait 5 bgscr 0,35,31,,990,0 color 0,0,0 boxf wait 5 bgscr 0,60,33,,965,0 color 0,0,0 boxf wait 5 bgscr 0,90,35,,935,0 color 0,0,0 boxf bgscr 0,120,35,,905,0 color 0,0,0 boxf color 255,255,255 pos 25,8 mes "Gメニュー wait 110 bgscr 0,90,35,,935,0 color 0,0,0 boxf wait 5 bgscr 0,60,33,,965,0 color 0,0,0 boxf wait 5 bgscr 0,35,31,,990,0 color 0,0,0 boxf wait 5 bgscr 0,30,30,,1000,0 color 0,0,0 boxf *taiki wait 5 bgscr 0,30,30,,1000,0 color 0,0,0 boxf color 255,255,255 pos 7,6 mes "G" cx=0,0 cy=0,0 onclick gosub *click1 repeat wait 0 loop *click1 if wparam==1{ mx=mousex:my=mousey if ((cx.0<=mx)&&(mx<=cx.1))&&((cy.0<=my)&&(my<=cy.1)){ goto *open } } *open bgscr 0,140,1024,,885,0 color 0,0,0 boxf wait 4 bgscr 0,175,1024,,849,0 color 0,0,0 boxf wait 4 bgscr 0,200,1024,,824,0 color 0,0,0 boxf wait 6 bgscr 0,220,1024,,804,0 color 0,0,0 boxf wait 6 bgscr 0,235,1024,,789,0 color 0,0,0 boxf wait 6 bgscr 0,245,1024,,779,0 color 0,0,0 boxf wait 8 bgscr 0,247,1024,,777,0 color 0,0,0 boxf wait 8 bgscr 0,250,1024,,774,0 color 0,0,0 boxf wait 8 *gmenu color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " 設定をお選びください。 mes " button "ソフト終了",*en mes "ソフトを終了します。 mes " button "バージョン",*Varsion mes "Gメニューのバージョン mes "情報を表示します。 mes " objsize 100,25 button "タスクマネージャー",*Task mes "タスクマネージャーを mes "起動します。 mes " button "メモ帳",*notepad mes "メモ帳を起動します。" mes " mes " cx=0,0 cy=0,0 onclick gosub *click boxf cx.0,cy.0,cx.1,cy.1 color 255,255,255 pos 10,6 mes " × repeat wait loop *click if wparam==1{ mx=mousex:my=mousey if ((cx.0<=mx)&&(mx<=cx.1))&&((cy.0<=my)&&(my<=cy.1)){ goto *close } } *close color 0,0,0 boxf wait 8 wait 4 bgscr 0,200,1024,,824,0 color 0,0,0 boxf wait 4 bgscr 0,175,1024,,849,0 color 0,0,0 boxf wait 6 bgscr 0,140,1024,,885,0 color 0,0,0 boxf wait 6 bgscr 0,105,1024,,920,0 color 0,0,0 boxf wait 8 bgscr 0,70,1024,,960,0 color 0,0,0 boxf wait 8 bgscr 0,35,1024,,990,0 color 0,0,0 boxf wait 8 bgscr 0,30,1024,,1000,0 color 0,0,0 boxf wait 8 bgscr 0,20,1024,,1005,0 color 0,0,0 boxf wait 8 bgscr 0,15,1024,,1010,0 color 0,0,0 boxf wait 8 bgscr 0,10,1024,,1015,0 color 0,0,0 boxf wait 8 bgscr 0,5,1024,,1020,0 color 0,0,0 boxf wait 8 goto *taiki *en bgscr 0,140,1024,,885,0 color 0,0,0 boxf wait 4 bgscr 0,175,1024,,849,0 color 0,0,0 boxf wait 4 bgscr 0,200,1024,,824,0 color 0,0,0 boxf wait 6 bgscr 0,220,1024,,804,0 color 0,0,0 boxf wait 6 bgscr 0,235,1024,,789,0 color 0,0,0 boxf wait 6 bgscr 0,245,1024,,779,0 color 0,0,0 boxf wait 8 bgscr 0,247,1024,,777,0 color 0,0,0 boxf wait 8 bgscr 0,250,1024,,774,0 color 0,0,0 boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " Gメニューを終了しますか? mes " button "はい",*endok mes " button "いいえ",*jump pos 10,6 mes " × repeat wait loop *Varsion bgscr 0,140,1024,,885,0 color 0,0,0 boxf wait 4 bgscr 0,175,1024,,849,0 color 0,0,0 boxf wait 4 bgscr 0,200,1024,,824,0 color 0,0,0 boxf wait 6 bgscr 0,220,1024,,804,0 color 0,0,0 boxf wait 6 bgscr 0,235,1024,,789,0 color 0,0,0 boxf wait 6 bgscr 0,245,1024,,779,0 color 0,0,0 boxf wait 8 bgscr 0,247,1024,,777,0 color 0,0,0 boxf wait 8 bgscr 0,250,1024,,774,0 color 0,0,0 boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " バージョン情報 mes " mes " Gmenu 1.0 未完成 mes " button "戻る",*jump pos 10,6 mes " × repeat wait loop *endok color 0,0,0 boxf wait 8 wait 4 bgscr 0,200,1024,,824,0 color 0,0,0 boxf wait 4 bgscr 0,175,1024,,849,0 color 0,0,0 boxf wait 6 bgscr 0,140,1024,,885,0 color 0,0,0 boxf wait 6 bgscr 0,105,1024,,920,0 color 0,0,0 boxf wait 8 bgscr 0,70,1024,,960,0 color 0,0,0 boxf wait 8 bgscr 0,35,1024,,990,0 color 0,0,0 boxf wait 8 bgscr 0,30,1024,,1000,0 color 0,0,0 boxf wait 8 bgscr 0,20,1024,,1005,0 color 0,0,0 boxf wait 8 bgscr 0,15,1024,,1010,0 color 0,0,0 boxf wait 8 bgscr 0,10,1024,,1015,0 color 0,0,0 boxf wait 8 bgscr 0,5,1024,,1020,0 color 0,0,0 boxf wait 8 end *jump goto *open *task exec "taskmgr" goto *close *notepad exec "notepad" goto *close



この記事に返信する


あらや

リンク

2018/4/24(Tue) 18:59:39|NO.84126

なんというか……がんばりましたね。

bgscrは使うたびにウィンドウが初期化されるので
アニメーションに使うとチラつくのは当然です。
ざっくり言うと ウィンドウ消去して新規作成 を何度も繰り返している様なものです。

最初にbgscrで全画面ウィンドウを作成し
(全画面でなくても必要な最大の大きさがあれば充分です)
その後はwidth命令でサイズと位置の変更を行なう方が良いかと思います。

ウィンドウサイズ・位置変更処理に大幅な修正をさせていただきました。

bgscr 0, ginfo(20), ginfo(21), 2; // 最初は最大サイズで非表示ウィンドウを作成 color 0,0,0:boxf cspeed = 40.0; // ウィンドウサイズ・位置変更速度(小さい数値を入れるとガタガタする) *bar wait 5 gsel 0, 1; // ウィンドウ表示を追加 width 10,25,1015,0 // ウィンドウサイズ及び位置の変更はwidth命令で実行 以下同様 color 0,0,0:boxf winsx = 10.0; // 現在のウィンドウサイズX winsy = 25.0; // 現在のウィンドウサイズY winpx = 1015.0; // 現在のウィンドウ位置X winpy = 0.0; // 現在のウィンドウ位置Y lwinsx = 120.0; // 変更後のウィンドウサイズX lwinsy = 35.0; // 変更後のウィンドウサイズY lwinpx = 905.0; // 変更後のウィンドウ位置X lwinpy = 0.0; // 変更後のウィンドウ位置Y gosub *change_winsize; // ウィンドウサイズ・位置変更実行 color 255,255,255 pos 25,8 mes "Gメニュー wait 110 color 0,0,0:boxf lwinsx = 30.0; lwinsy = 30.0; lwinpx = 1000.0; lwinpy = 0.0; gosub *change_winsize; *taiki color 255,255,255 pos 7,6 mes "G" cx=0,0 cy=0,0 onclick gosub *click1 repeat wait 0 loop *click1 if wparam==1{ mx=mousex:my=mousey if ((cx.0<=mx)&&(mx<=cx.1))&&((cy.0<=my)&&(my<=cy.1)){ goto *open } } *open cls // ボタン消去のために追加 color 0,0,0:boxf lwinsx = 250.0; lwinsy = 1024.0; lwinpx = 774.0; lwinpy = 0.0; gosub *change_winsize; *gmenu color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " 設定をお選びください。 mes " button "ソフト終了",*en mes "ソフトを終了します。 mes " button "バージョン",*Varsion mes "Gメニューのバージョン mes "情報を表示します。 mes " objsize 100,25 button "タスクマネージャー",*Task mes "タスクマネージャーを mes "起動します。\nWindows10ではエラーになる mes " button "メモ帳",*notepad mes "メモ帳を起動します。" mes " mes " cx=0,0 cy=0,0 onclick gosub *click boxf cx.0,cy.0,cx.1,cy.1 color 255,255,255 pos 10,6 mes " × repeat wait loop *click if wparam==1{ mx=mousex:my=mousey if ((cx.0<=mx)&&(mx<=cx.1))&&((cy.0<=my)&&(my<=cy.1)){ goto *close } } *close cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 lwinsx = 30.0; lwinsy = 30.0; lwinpx = 1000.0; lwinpy = 0.0; gosub *change_winsize; goto *taiki *en cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " Gメニューを終了しますか? mes " button "はい",*endok mes " button "いいえ",*jump pos 10,6 mes " × repeat wait loop *Varsion cls // ボタン消去のために追加 color 0, 0, 0:boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " バージョン情報 mes " mes " Gmenu 1.0 未完成 mes " button "戻る",*jump pos 10,6 mes " × repeat wait loop *endok cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 lwinsx = 5.0; lwinsy = 1024.0; lwinpx = 1020.0; lwinpy = 0.0; gosub *change_winsize; end *jump cls // ボタン消去のために追加 color 0,0,0:boxf goto *gmenu *task exec "taskmgr" goto *close *notepad exec "notepad" goto *close *change_winsize psx = (lwinsx - winsx) / cspeed; // 1回毎のサイズ変更値X psy = (lwinsy - winsy) / cspeed; // 1回毎のサイズ変更値Y ppx = (lwinpx - winpx) / cspeed; // 1回毎の位置変更値X ppy = (lwinpy - winpy) / cspeed; // 1回毎の位置変更値Y repeat int(cspeed) wait 1; winsx += psx; winsy += psy; winpx += ppx; winpy += ppy; width int(winsx), int(winsy), int(winpx), int(winpy); // サイズ・位置変更はwidthで行なう loop return;

マウスクリックの範囲に使っている変数cx,cyですが
ちゃんと範囲設定をした方が良いかと思います。
x,y共に0以上0以下の範囲の時
という変な条件になっているせいでウィンドウ内のどこをクリックしても反応しています。

ボタンだけは一応例外になっていますが、
ときどきボタンクリックしてもボタン外クリックと判定されることがあります。



あらや

リンク

2018/4/24(Tue) 21:15:52|NO.84129

失礼勘違いしていました。

onclick gosub〜
と書いているのにgosubで飛んだ先にreturnが無いので
どこをクリックしても次の行が実行されていたんですね。

returnが無いので何度かクリックするとエラーになるはずです。

bgscr 0, ginfo(20), ginfo(21), 2; // 最初は最大サイズで非表示ウィンドウを作成 color 0,0,0:boxf cspeed = 40.0; // ウィンドウサイズ・位置変更速度(小さい数値を入れるとガタガタする) *bar wait 5 gsel 0, 1; // ウィンドウ表示を追加 width 10,25,1015,0 // ウィンドウサイズ及び位置の変更はwidth命令で実行 以下同様 color 0,0,0:boxf winsx = 10.0; // 現在のウィンドウサイズX winsy = 25.0; // 現在のウィンドウサイズY winpx = double(ginfo(20))-winsx+1.0; // 現在のウィンドウ位置X winpy = 0.0; // 現在のウィンドウ位置Y lwinsx = 120.0; // 変更後のウィンドウサイズX lwinsy = 35.0; // 変更後のウィンドウサイズY lwinpx = double(ginfo(20))-lwinsx+1.0; // 変更後のウィンドウ位置X lwinpy = 0.0; // 変更後のウィンドウ位置Y gosub *change_winsize; // ウィンドウサイズ・位置変更実行 color 255,255,255 pos 25,8 mes "Gメニュー wait 110 color 0,0,0:boxf lwinsx = 30.0; lwinsy = 30.0; lwinpx = double(ginfo(20))-lwinsx+1.0; // 変更後のウィンドウ位置X lwinpy = 0.0; gosub *change_winsize; *taiki color 255,255,255 pos 7,6 mes "G" cx=0,30 cy=0,30 onclick goto *click1 *taiki2 stop *click1 if wparam==1{ mx=mousex:my=mousey if ((cx.0<=mx)&&(mx<=cx.1))&&((cy.0<=my)&&(my<=cy.1)){ goto *open } } goto *taiki2; *open cls // ボタン消去のために追加 color 0,0,0:boxf lwinsx = 250.0; lwinsy = double(ginfo(21)); lwinpx = double(ginfo(20))-lwinsx+1.0; // 変更後のウィンドウ位置X lwinpy = 0.0; gosub *change_winsize; *gmenu color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " 設定をお選びください。 mes " button "ソフト終了",*en mes "ソフトを終了します。 mes " button "バージョン",*Varsion mes "Gメニューのバージョン mes "情報を表示します。 mes " objsize 100,25 button "タスクマネージャー",*Task mes "タスクマネージャーを mes "起動します。\nWindows10ではエラーになる mes " button "メモ帳",*notepad mes "メモ帳を起動します。" mes " mes " cx=int(winsx)-30,int(winsx) cy=0,30 onclick goto *click boxf cx.0,cy.0,cx.1,cy.1 color 255,255,255 pos 10,6 mes " × *taiki3 stop *click if wparam==1{ mx=mousex:my=mousey if( ((cx.0<=mx)&&(mx<=cx.1)) && ((cy.0<=my)&&(my<=cy.1)) ) { goto *close } } goto *taiki3; *close cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 lwinsx = 30.0; lwinsy = 30.0; lwinpx = double(ginfo(20))-lwinsx+1.0; // 変更後のウィンドウ位置X lwinpy = 0.0; gosub *change_winsize; goto *taiki *en cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " Gメニューを終了しますか? mes " button "はい",*endok mes " button "いいえ",*jump pos 10,6 mes " × repeat wait loop *Varsion cls // ボタン消去のために追加 color 0, 0, 0:boxf wait 8 color 255,255,255 pos 10,5 mes " Gメニュー pos 1,13 mes "________________________________ pos 10,40 mes " バージョン情報 mes " mes " Gmenu 1.0 未完成 mes " button "戻る",*jump pos 10,6 mes " × repeat wait loop *endok cls // ボタン消去のために追加 color 0,0,0:boxf wait 8 lwinsx = 5.0; lwinsy = double(ginfo(21)); lwinpx = double(ginfo(20))-lwinsx+1.0; // 変更後のウィンドウ位置X lwinpy = 0.0; gosub *change_winsize; end *jump cls // ボタン消去のために追加 color 0,0,0:boxf goto *gmenu *task exec "taskmgr" goto *close *notepad exec "notepad" goto *close *change_winsize psx = (lwinsx - winsx) / cspeed; // 1回毎のサイズ変更値X psy = (lwinsy - winsy) / cspeed; // 1回毎のサイズ変更値Y ppx = (lwinpx - winpx) / cspeed; // 1回毎の位置変更値X ppy = (lwinpy - winpy) / cspeed; // 1回毎の位置変更値Y repeat int(cspeed) wait 1; winsx += psx; winsy += psy; winpx += ppx; winpy += ppy; width int(winsx), int(winsy), int(winpx), int(winpy); // サイズ・位置変更はwidthで行なう loop return;

onclick gosub〜 を
onclick goto〜 に変更

repeat wait loop を
stop に変更

cxとcyの値もそれっぽい数値を入れておきました。
×ボタンの背景?になるboxfは色指定が無かったのでそのまま白で塗り潰されています。

ついでにどんな画面サイズでも画面右上に表示されるように調節しておきました。



Kain

リンク

2018/4/24(Tue) 23:32:53|NO.84134

なんと!ありがとうございます!あと、もうひとつよろしいでしょうか?
Gボタンを押すとGメニューが開きますが、その時のアニメーションをWin10風に近づけることは出来ませんか?
Gメニューを終了する時のアニメーションの逆バージョンです。

わがままですみません(´;ω;`)



Kain

リンク

2018/4/24(Tue) 23:40:16|NO.84135

追記

アニメーションの速度を少しづつ下げることもできますか?



Kain

リンク

2018/4/25(Wed) 18:11:30|NO.84138

すいません(;´Д`)
自己解決しました!



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