HSPでは、高速化のために画面の点(ドット)を4つで一組にして取り扱うことが
あります。picload命令で扱う画像フォーマットによっては、斜めに表示されたり、
gcopy命令で高速なコピー、透明色付きのコピーなどを行なう時にも、斜めに崩れる
ことがあります。
そのような時には、screen,buffer,bgscr命令などで初期化するウインドゥの
横方向(X)サイズを4の倍数にしてください。
デフォルトの640などは4の倍数ですが、150とか、250など4の倍数でない横サイズは、
高速な処理には向いていないので避けるようにしてみてください。
lineの終点のドットは描画されないのが、Windows GDI(描画API)の仕様みたいです。 これは連続した線を描画する時に重ならないようにということだと思われます。 現状では、この仕様に合わせてスクリプトを組んでいただくようお願いします。
ユーザーが作成した実行ファイルのアイコンは自由に変更して構いません。 詳しくは、EXE,SCRファイルのアイコン書き換えを 参照してください。 公開や配布の場合には、アイコンを変更するといいでしょう。 変更せずにカップの絵のアイコンをそのまま使っていただいても、もちろん構いません。
タイトル(キャプションバー)とは、ウインドゥの一番上にある行、通常は 「Hot Soup Processor ver???」と表示されている部分のことです。 この内容は、title命令を使って簡単に変更できます。 (「title "TEST"」とすれば、「TEST」に変更されます)
数値を文字列に直すためのstr命令を使えば、16進数の文字列に変換することができます。 詳しくは、str命令のリファレンスを参照してください。
HSPのsndload命令で指定されたMIDIファイルは、Windowsのシステムがファイルを 読み込み演奏するため、packfile編集でEXEファイルにまとめてあっても、読み込む ことができません。 MIDIファイルやAVIファイルだけは、EXEファイルを作る場合でも、packfileでまとめないように 心がけて下さい。(mci命令で指定するファイルも同様です)
何度かボタンを押しているとエラーが出る、clrobj命令でオブジェクトを削除している にもかかわらず、オブジェクトを出すとエラーが出るなどの症状が出ることがあります。 この原因は、オブジェクトIDの限界数(64)を越えていまっているためです。 一番多いミスは、button命令やinput命令などのオブジェクトを画面上に配置するための命令が、 何かのボタンが押されるたびに実行されてしまうというものです。 オブジェクトを、前のものとまったく同じ座標に配置してしまうと複数出ているのに気がつきません。 画面上に配置したオブジェクトは、画面をクリアしない限りは残りますので、最初の 1回だけ配置して、後は配置する命令を通らないようにスクリプトを組むように心がけて 下さい。また、clrobj命令によってオブジェクトを画面上から削除した場合は、 その後にオブジェクトを配置した場合、オブジェクトIDは再利用されます。
button,input,mesbox,combox,listboxなどで配置されるオブジェクトのフォントは、 何も指定しなければデフォルトのフォントが使用されます。 HSP ver2.5以降では、objmode命令により使用されるフォントを変更することができます。
標準機能ではサポートしていません。 画像をgcopy命令などで画面内に配置しておき、独自にマウスクリックを検出するような スクリプト(mousex,mouseyを調べる)を組めば、擬似的な画像ボタンを作成することは できますが、それなりに大変です。 同機能をサポートしている拡張プラグインなどを利用するのも1つの方法です。
MIDIのデバイスドライバによっては、MIDI演奏をストップした直後に、再びMIDI演奏を開始 するとWindowsがフリーズしてしまうものがあるようです。 MIDI演奏終了後に1〜2秒ほどのウエイト(wait 20など)を入れてから、次の演奏を開始する ようにしてみてください。
標準の機能ではできませんが、拡張プラグインDLLによって実現可能です。 詳しくは、
普段は1とか2とか、少ない値しか設定していないはずの変数が、何かの処理をしたとたんに -2159832などのおかしな数値になってしまった。 もちろん、その変数に代入する命令などは一切使っていないはずなのに…。というケースが、 いくつか報告されています。この原因のほとんどは、変数バッファオーバーによるものです。 HSPでは、通常の変数は配列は0〜15の範囲、文字列は63文字以内までしか保持できません。 HSPでは処理を高速化するために、この範囲を越えているかのチェックをしていません。 そこで、これを越えた設定をすると別な変数の値がおかしくなったり、システムエラーが出たりすることがあります。 特に文字列は、簡単に63文字をオーバーしてしまうこともあるので、alloc命令やsdim命令で あらかじめ多めのバッファを確保しておくといいでしょう。
すみません、ちょっとわかりにくい部分なんですが、通常ディレクトリの区切り記号に使われる
「\」記号ですが、HSPでは「\」記号は特別な意味に使われていて、
そのままでは「\」にならないのです。かわりに、「\\」とすると、「\」と同じ意味になります。
ですから、たとえば
exec "c:\Program Files\Netscape\navigator\netscape.exe"ではエラーになって動きませんが、
exec "c:\\Program Files\\Netscape\\navigator\\netscape.exe"とすれば、うまくいくはずです。 この「\」記号の使い方は、他のC言語やJavaなどでも共通なので覚えておいても損はしません(^^)
DOSのBASICをいじっていた人などには、最初はわかりにくいと思いますが、HSPでは 「キーを押さないと進まないなどの無限にループする可能性のある部分では、必ずwaitかawait命令を入れる」 というお約束があります。 waitやawait命令はWindowsの他のタスクに空き時間を回すための重要な役割があります。 これを守らないと、無限ループでWindowsのほぼすべてのタスクを奪ってしまい、 マルチタスク動作に影響が出ます。ウインドゥの動作が変というのも、このあたりが原因だと思います。
上の質問にも関連するのですが、システム変数mousex,mouseyは一度waitかawait命令を入れないと
座標が更新されません。waitやawait命令を入れないで無限ループを作って、
その中でmousex,mouseyを参照しても値は変わらないわけです。
そのあたりに注意すれば、正確なカーソル位置が参照できるはずです。
以下はそのサンプルです。参考にしてみてください。
*main1 x=mousex : y=mousey color 255,255,255:boxf 0,0,99,23 color 0,0,0:pos 0,0:mes "X="+x+"/Y="+y getkey a,1 if a : goto *main2 await 5 goto *main1 *main2 end
WAVの繰り返し再生はsndload命令でロードする際にループ指定をすることで
可能ですが、sndload命令は64K(65535byte)を越えるサイズのWAV再生はサポートしていません。
(64Kを越えるオンメモリでのループはWindows自体がサポートしていないみたいです)
しかし、MCIコマンドを使うとディスクからファイルを読みながら再生され、
64Kを越えるデータも指定することができます。これで繰り返しをするためには、
ちょっと裏ワザっぽいですが、次のようなスクリプトで可能になります。
button "stop",*owari mci "open rnse7.wav alias myid" sndload "",1,1 snd 1 stop *owari end上の例では、"rnse7.wav"というファイルをsndload命令でバッファ1にロードしたことに なります。以降は、snd 1でループ再生させることが可能です。
HSPを使ってフルスクリーン画面に切り替えたソフトを作る場合には、フルスクリーンモードや
screen命令による通常ウインドゥを使わずに、bgscr命令で新しいウインドゥを全画面に表示すると
いいでしょう。
タスクバーを消すためにはちょっとコツがいります。chgdisp命令を使うと、
全画面の再描画が行なわれてタスクバーも描かれてしまいます。そこで、chgdisp命令の後にbgscr命令で
全画面サイズのウインドゥを作成します。
bgscr命令は、枠やタイトルバーが一切ないウインドゥを作成し、すべてのウインドゥよりも手前に表示します。これでタスクバーも隠れるはずです。
chgdisp 1 bgscr 2,640,480,0 cls 4 color 255,255,255 mes "TEST SCREEN..." mes "[ALT]+[F4]で終了します" stop上の例では、ウインドゥID2としてフルスクリーンのウインドゥを表示します。
これはマニュアルでは説明し忘れていました(^^;)
DPMは、packfile編集で指定したファイルを1つにまとめたファイルです。
「DPM作成」をすると、DATA.DPMというファイルが作成されます。
このDATA.DPMには、packfileで指定したファイルすべての情報が含まれています。
これをHSP2.EXEと同じディレクトリに置いておくことで、
HSPからDATA.DPMに含まれるファイルを使用できるようになります。
たとえば、packfileで"test.jpg"というファイルを指定してDATA.DPMを作成したとします。
これで、もしHSPと同じディレクトリに"test.jpg"が存在しなくても、DATA.DPMさえあれば
そこに含まれている"test.jpg"の情報をHSPが自動的に取り出してくれるようになるのです。
なお、DPMファイルは「EXEファイル作成」をした時にも自動的に作成されてしまいますが、
これはEXEファイルに含めるための中間ファイルなので削除しても問題ありません。
すみません、HSPのグラフィックモード設定関係はちょっと間違えやすい仕様になっています。 gmodeでのモード設定は現在、描画対象になっているウインドゥIDに設定されます。 たとえば、ID2からID0に画像をコピーしたい場合には、gcopy命令をID0に対して実行するので、 ID0に対してgmodeの設定をしなければなりません。 つまり、ウインドゥIDごとにgmodeの設定が保持されているのです。 このあたりに注意してgmode命令を記述すれば、正常にモードが設定されるはずです。
これは、HSP2.EXE本体とHSED2.EXE(スクリプトエディタ)のバージョンが合っていない時に発生 します。ダウンロードしたHSP本体と、スクリプトエディタのバージョンをそろえればエラーは出なくなると 思われます。また、作成したEXEファイルやスクリーンセーバーを実行した時に、このエラーが出る場合は、 「start.ax」などのオブジェクトファイルが古いことを示しています。新しいバージョンのスクリプトエディタで、もう一度オブジェクトを作成すればエラーはなくなります。
これは、HSP ver2.4からサポートされたdirlist命令で可能です。 詳しくは、リファレンスマニュアルを参照してください。
これは、HSP ver2.4からexec命令のオプションで可能になりました。 詳しくは、リファレンスマニュアルを参照してください。
HSP ver2.4か、それ以前のバージョンでは、一部の機種で「オブジェクトファイルの作成」メニューを選択すると エラーが出ることがあるようです。HSP ver2.5以降であれば、不具合はないはずですので、そちらでお試し下さい。
これには、いくつか可能性があります。まず、EXE(SCR)ファイルを作成するためには、
「PACKFILE編集」メニューを選んで、まとめあげるデータファイルを指定しなければなりませんが、
必要なファイルの選択を忘れた場合にFile Not Found(エラー13)が出ます。
また、「start.ax」というファイルがpackfile編集で選択されていないと、実行できなくなります。
まれに、packfile編集で指定したファイル名がおかしくなることがあるようなので、
一度「全削除」をして、もう一度すべてのファイルを選択してから、実行ファイルを作成すると
うまくいくことがあります。
小数が扱えるようにという希望は、いくつか寄せられています。すぐには対応が難しいと思いますが、
いずれ考えていきたいと思っています。
とりあえず、現在の整数のままで小数に近いことを行なう強引な方法がいくつかあります。
まず、%の計算などをする場合。たとえば、123という数の30%を算出する場合
は、
123(もとの数) * 30(%数) / 100という計算式で求められます。最初に%の数値を掛けてやるのがポイントです。 (123 /100*30 では、100で割る時点で小数がないので誤差が出てしまいます) また、ここで小数点以下の値を出したい場合は、
123(もとの数) * 30(%数) / 10とすれば、下1桁が小数点以下1位、その上の桁が整数部となります。
a=1234 ; 固定小数点で1.234とする b=a/1000 ; 整数部 取り出す c=a\1000 ; 小数部を取り出す print "a="+b+"."+c ; 小数点をつけて表示するのようにするといいでしょう。これは1つの例で、他にも下数bitだけを小数部とする方法など 色々ありますが、基本的な考え方は同じです。 ver2.55では、スクリプト中に小数を記述して拡張プラグインに値を渡すことが可能になっています。 この機能を利用したhgimg.dllプラグインでは、小数値をサポートする命令がいくつか用意されています。
HSP( Hot Soup Processor )は、Windows用のソフトを作成することができるインタプリタ言語 システムです。BASICに似た簡単な命令セットを覚えるだけで、グラフィックやサウンドを手軽に 扱ったソフトを作ることができます。
CG集や、音楽集、アプリケーション起動メニューなどの単純なものから、アドベンチャーゲームや パズルゲームなどの本格的なアプリケーションまで。また、画面レイアウトの試作や、画像データ の変換、文化祭、学園祭の展示、店頭のデモなどアイデア次第で応用範囲がどんどん広がります。
Microsoft Windows 95(または、NT3.51以上)が動作する機種ならば、どれでも動作させることができます。 HSPで作成したソフトならば、PC98、AT機を問わず多くの機種で使用できます。 また特殊なドライバや、WinG、DirectXなどのランタイムなども一切必要なく単体で動作させる ことができるので、インストールの煩わしさがありません。
インタプリタ方式なので、変更、作成したものをすぐに実行して見ることができます。 速度の遅い機種でもコンパイルなどの時間を待たされることなく効率的な開発ができます。 またHSPは、中間コードを使用して高速に命令を実行するので、通常は処理速度を気にする心配も ありません。
HSPはフリーウエアです。HSPを使うのも、HSPを使って作成したソフトを発表するのも、販売する のもすべて作成者の自由です。HSPを使うためのコストは一切かかりません。 これは、多くの人にWindowsで自由にプログラムを組む環境を提供したいのと、自由なかわりに サポートや保証などはないので各人の責任で使用してほしいという2つの理由からです。
HSPは、C++やVisualBasic、Delphiなどでプログラムを作るよりも手軽に、グラフィック画像の 表示、音の再生、他のアプリケーションとの連携を行なうことができます。また、Windowsでは 複雑になりがちな手続きを覚えることなくDOSのような感覚でソフトを作成できます。 逆に、大規模なアプリケーションや、高度な数値演算、非常に高速な処理を要求される ソフトにはHSPは向いていません。
Windowsには、MCIというサービスが用意されており、MCIに対応したマルチメディア機器をコント
ロールすることができるようになっています。HSPでは、このMCIにコマンドを送る命令が用意され
ているので、MCIに対応した機器であれば簡単に扱うことができます。通常のCD-ROM付きのマシン
であれば、CDトラックの演奏、停止、動画の再生、MIDIデータの演奏などはMCIで扱うことができ
るはずです。
( HSP2.2以降では、より簡単にCD,MIDIの演奏が可能になっています )
Javaも、HSPと同じく中間言語を用いたインタプリタで、フリーに使うことができる言語です。 HSPと比べると、Javaの方が機能も高く、拡張性にも優れています。もし、Javaがどのマシンでも 同じように動作し、手軽に扱うことができればHSPはもう必要ないかもしれません。 しかし、現時点ではJavaで作成したソフト(アプレット)を動作させるにはインタプリタのランタイ ムをインストールしなければならなかったり、互換性に難があったりと、手軽に使ったり配布する ことができるのはまだ先といった感じです。
HSPはVBなどとは違って単純で原始的なシステムです。しかし、その単純さゆえに手軽で思った ことがすぐに実現できます。VBは非常に高度なソフトやシステムを構築することも可能ですが、 多少手続きや設定も面倒になっています。しかし、CG集やメニューなど、それほど高度でないソフ トを作成する時にも同じように手続きや設定が必要になってしまいます。HSPはそんな時に、 小回りをきかせ、VBよりも手軽に早くソフトの作成することができます。
[前のメニューに戻る]