いつものEXEではなく「たまにはスクリーンセイバー(以下SCR)を作ろうよ」と言うことでSCR作成をしましょう。
サンプルは「HSPインストールフォルダ\sample\ssaver」内にありますが、
サンプルを見たがわからないとかここで教わりたい(いないって)と言う方の為にこの章をご用意しました。
付属のサンプルのものと説明がほとんど変わりませんので結局わからないまま終わるかもしれません(^^;
スクリーンショットは次の通り。

お判りのことと思いますがコードに入る前に作り方がEXEとどう違うのかを書いておきますね。
1.コード(スクリプト)を完全に仕上げる
2.start.axを作成する
3.PACKFILEにstart.axとSCRに必要な音楽・画像を入れる
4.ツールメニューの「スクリーンセイバー作成」を押す
上を見て判るかと思いますが通常のEXEと違うのは4番のスクリーンセイバー作成を押すところだけですね。
スクリプトの書き方が微妙に変わるだけでほぼ同じと言うことで安心してください。
それではスクリプトに最低限記述すべきことから入って行きたいと思います。
以前から何度か出てきていますが、外部からHSPに渡すことのできるメッセージのひとつに
システム変数cmdlineというものが存在しまして、SCRはこのcmdlineを使用して何をするのかを決定します。
SCRにはセーバーを実際に実行すると言うこと以外にプレビュー画面やSCRの設定をする画面がございます。
これらの処理もHSP側でしてしまわないとWINDOWSは理解できません。
cmdlineの話に戻しまして、送られてきたコマンドラインの2文字目がキーポイントとなっており、
この2文字目に何が来たかで処理を変更させなければなりません。
2文字目に「pのアスキーコード(112)」が来たらプレビュー部分に表示させる処理を記述します。
2文字目に「cのアスキーコード(99)」が来たら設定画面部分の処理を記述します。
2文字目に「sのアスキーコード(115)」が来たら実際に実行された場合の処理を記述します。
アスキーコードが何も来なかった場合にも設定画面処理のところにジャンプさせましょう。
それ以外のコードが来たら「そのコードはありません」と言ったようなことを表示してあげましょう。
tmp=cmdline ; 直接peekに送るとエラーになるため一旦変数に代入 peek code,tmp,1 ; 0から始まるので2文字目は1になる if code=='p' : goto *プレビューの処理 if code=='c' | (code==0) : goto *設定画面処理 if code=='s' : goto *実行画面処理 dialog "コードが不正です" end
上記のように書いていけばよいと思います。
ではプレビュー部分の処理から説明していきましょうか。
プレビュー部分とは「画面のプロパティ - スクリーンセーバータグ」内の
ディスプレイ画像部分に表示される画像のところのことです。
表示する大きさは152*112くらいでしょうか。
私のところでは
内容は静止画にするか動画にするかは皆さんにお任せいたします。
どういう流れかを示すのでしたら動画にするとインパクトが出るのではないでしょうか。
*p boxf ,,152,112 : color 255,255 font "MS 明朝",15 pos 48,50 : mes "PREVIEW" stop
コマンド「c」又はコマンドなしでは「設定」ボタンを押したときに表示するウィンドウを作成します。
実際ココで設定した設定によりSCRに変化をつけなければなりません。
*c width 320,240 title "設定ウィンドウ" ; ココに設定するものを書く stop
設定ファイルの読み込み・保存の仕方は何度もやってきましたのでもうご存知ですね?
まだ少し不安な方は6章をご参照ください。
で、最後にSCR実行画面の処理を記述しましょう。
まずbgscrでディスプレイ全体のサイズを作成します。
そしてその後実行中の処理を書いていけばSCRの完成です。
マウス・キーボードのチェックをして動かされたら終了するといった処理は必要ありません。
SCRですので自動的に終了してくれます。
FAQにも書きましたがwaitが20回ないとうまく終了できないようです。
ループさせずstopするSCRでも初めに20回空回りでもさせておきましょう。
*s repeat 20 wait 1 loop bgscr 2,dispx,dispy stop ; 通常は停止せずループさせる(止まる様ではセーバーの意味がなくなってしまう)
空回しをしているのだがスクリーンセイバーの画面IDが2未満である場合もうまく行かなかったりします。
1でうまく行ったりしても使ってはいけませんよ。
これでSCR作成手順説明を終了します。
この章でダウンロードできるスクリプトはSCRの原型だけです。どうぞコチラから。
最後にサンプルSCRを書いておきます。
dim code,4 dim index,1 dim col,3 dim count,3 dim ichi,2 exist "samplesaver.ini" if strsize!=-1 : bload "samplesaver.ini",index : int index dx=dispx/16 : dy=dispy/16 buffer 2,dx*2,dy,0 tmp=index+1 repeat 16 if tmp & 1 : col.0=cnt*16 : else : col.0=0 if tmp & 2 : col.1=cnt*16 : else : col.1=0 if tmp & 4 : col.2=cnt*16 : else : col.2=0 color col.0,col.1,col.2 boxf cnt*5/4,cnt*5/4,dx-(cnt*5/4)-1,dy-(cnt*5/4)-1 loop tmp=cmdline ; 直接peekに送るとエラーになるため一旦変数に代入 peek code,tmp,1 ; 0から始まるので2文字目は1になる if code=='p' : goto *p if code=='c' | (code==0) : goto *c if code=='s' : goto *s dialog "コードが不正です" end *p gsel 0 repeat if count=0 : count=16 : count.1=0 : count.2+ : ichi.0=0 : ichi.1=0 if cnt\2 : count- repeat count pos 160/16*ichi.0,112/16*ichi.1 : gzoom 160/16,112/16,2,1-(count.2\2)*dx,0,dx,dy wait 3 if count-1=cnt : count.1+ if count.1\4=0 : ichi.0+ if count.1\4=1 : ichi.1+ if count.1\4=2 : ichi.0- if count.1\4=3 : ichi.1- loop loop *c screen 0,230,100 title "サンプルセーバーの設定" int index color 192,192,192 : boxf : color objsize 100,25 pos 10,18 : mes "箱の色の設定" pos 120,15 : combox index,100,"赤色\n緑色\n黄色\n青色\n紫色\n水色\n灰色" pos 10,65 : button "キャンセル",ok pos 120,65 : button "OK",ok stop *ok if stat==2 : bsave "samplesaver.ini",index,1 end *s repeat 20 wait 1 loop bgscr 3,dx*16,dy*16 repeat if count=0 : count=16 : count.1=0 : count.2+ : ichi.0=0 : ichi.1=0 if cnt\2 : count- repeat count redraw 0 pos dx*ichi.0,dy*ichi.1 : gcopy 2,1-(count.2\2)*dx,0,dx,dy redraw await if count-1=cnt : count.1+ if count.1\4=0 : ichi.0+ if count.1\4=1 : ichi.1+ if count.1\4=2 : ichi.0- if count.1\4=3 : ichi.1- loop loop
指定色のボックスを埋めていくSCRです。
埋めていく方法はTIPSに出て来た螺旋状に描画していく方法を改良したものです。
152×112の横幅152が160となって計算しているのは152÷16をすると9(9.5)になってしまい
9×16でプレビューウィンドウには幅144ドット分(約1ボックス)空いてしまうんです。
ですので仕方なしに横10ボックスにするため160としたわけです。