|
 |
|
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は色指定が無かったのでそのまま白で塗り潰されています。
ついでにどんな画面サイズでも画面右上に表示されるように調節しておきました。

| |
|
2018/4/24(Tue) 23:32:53|NO.84134
なんと!ありがとうございます!あと、もうひとつよろしいでしょうか?
Gボタンを押すとGメニューが開きますが、その時のアニメーションをWin10風に近づけることは出来ませんか?
Gメニューを終了する時のアニメーションの逆バージョンです。
わがままですみません(´;ω;`)
|
|
2018/4/24(Tue) 23:40:16|NO.84135
追記
アニメーションの速度を少しづつ下げることもできますか?
|
|
2018/4/25(Wed) 18:11:30|NO.84138
すいません(;´Д`)
自己解決しました!
|
|