Last Update : 2007/09/xx
HSP(Hot Soup Processor)のいろいろなプログラミングTips。v(ーoー)v
ただ単に動作スピード・動作パフォーマンスを落とすだけの無駄な処理を行っていませんか? 見た目は特に何もないけれど、裏側ではHSPがせっせと無意味な処理をしていることがあります。ループ中に同じ命令を何度も呼ぶような「ダメダメ〜」な例をいくつか挙げませう。
| 命令 | コメント |
| objmode命令 | font命令で指定した任意のフォントを、オブジェクトに反映させる命令です。何度も呼び出す必要はありません。 |
| font命令 | 内部では、「フォントファイルの読み込み→論理フォントの生成」という処理が行われるため、若干時間を要します。呼び出した分だけの論理フォントが作成されるので、必要ないのに何度も呼ぶと、動作スピードにモロに響くばかりか、無駄なフォントデータをどんどん作成するだけです。 |
| sysfont命令 | 上のfont命令のようなフォント生成処理はありませんが、何度も呼び出す必要がありません。 |
| randomize命令 | rnd命令・rnd関数の乱数発生パターンを不定にする命令ですが、1度だけ呼んでおけばいいものです。また、何度も呼ぶと逆にパターンが一定状態になってしまう場合があります。 |
| cls命令 | 画面のクリア(クリアスクリーン)以外に、変数やフォントやカラーやオブジェクトなどなど、ありとあらゆるウィンドウ内のデータを初期化する処理が行われます。そういう目的以外ではくれぐれも使いませぬよう。ループ内で何度も呼ぶのはもってのほかです。画面が「ちらつく」のはこれが原因であることが多いです。 単純な描画の消去や背景色の変更はboxf命令+color命令の塗りつぶしで、オブジェクトの消去はclrobj命令で、メモリ上のデータはmemset命令やsdim命令で。 |
| picload命令 | 内部では、「画像ファイルを読み込んで画像データ取得→画像の描画」という2段階の処理を行っています。呼び出すたびに、ハードディスクにあるファイルにアクセスするので、同じ画像ファイルを何度も呼ぶような処理になっていると、動作スピードにモロに響きます。 あらかじめ画像ファイルを仮想ウィンドウ(buffer命令)にすべて読み込んでおき、必要な時に必要な大きさの画像をbcopy命令などでコピーしてきます。 |
| bload命令 | 内部では、「ファイルの読み込み→ファイルデータの取得→メモリ上にデータを展開」という処理を行っています。呼び出すたびに、ハードディスクにあるファイルにアクセスするので、全く同じファイルを何度も呼ぶのは、ものすごい無駄です。 あらかじめファイルの全体(または必要な一部)をすべて読み込んでおき、利用したいデータは、memcpy命令やpeek関数・wpeek関数・lpeek関数を使って切り出します。 |
| bsave命令 | 内部では、「ファイルデータの取得→ファイルに書き込み」というような処理を行っています。呼び出すたびに、ハードディスクにデータがファイルとして書き出されるので、動作スピードに響きます。 memcpy命令やpoke命令・wpoke命令・lpoke命令を使って、メモリ上でデータの書き込みを行い、最後に一度だけファイルとして出力するためのbsave命令を呼ぶ処理にします。 |
| on〜命令 | onexit命令、onkey命令、onclick命令。1度だけ呼んでおけばいいものなので、何度も呼ぶような処理にしませぬよう。 ラベルジャンプを一時的に無効or有効に切り替えるには、それぞれの命令の第1パラメータに数値を指定します。 |
| オブジェクト類 | ループ内でbutton命令、chkbox命令、input命令、mesbox命令、combox命令、listbox命令を何回も呼びだし、cls命令でオブジェクトを削除しては、再設置を繰り返すような処理。何度も呼ぶ形になっていて(限界数1024個の警告エラー)、実はオブジェクトがオブジェクトの真上に重なって大量に設置されていた、なんてな事例がよくあります。 オブジェクトの設置は一度でいいので、それぞれのオブジェクトの制御は、objprm命令を使います。オブジェクトをクリアしたければclrobj命令を。オブジェクトのクリアのみが目的の時に、くれぐれもcls命令を使いませぬよう。 |
表面上ちゃんと動いているようなものもありますが、ダメダメ〜な処理をあえて書いてみーる。
; ダメダメ スクリ1 (乱数を表示?) ; [→ randomize命令を何度も呼ぶ、cls命令で画面がちらつく、無駄にフォント生成] *main cls randomize a = rnd (10) font "MS Pゴシック", 100 mes a wait 10 goto *main
; ダメダメ スクリ2 (ボックスの数値アップ?) ; [→ cls命令によるちらつき、実質的な入力ボックスの大量設置] *main cls a++ input a wait 10 goto *main
; ダメダメスク3 (ボックスの数値アップ?) ; [→ まんま入力ボックスの大量設置] *main a++ pos 0, 0 input a wait 10 goto *main
HSP 3.1のHSP3スクリプトエディタから検索&置換機能の検索モードに「正規表現」が実装されています。特殊な意味を持つ記号を組み合わせることで、キーワードを検索する処理効率をアップすることができますが、ある程度慣れないと少々難しいです。以下、「正規表現」について扱っているページ。
ちなみに、HSPで製作するプログラム自体でこの正規表現を利用したい場合は、COMを利用した方法があります(sample\comobj\comtest8.hsp & sample\comobj\comtest9.hsp)。また、Tatsuo Babaさん製作の正規表現ライブラリ「BREGEXP.DLL」を利用させてもらう方法もあります。(HSP3用モジュールはGoogle検索)
自身のホームページ上に、ソースコード(スクリプト)をそのまま貼り付けたい場合、HTMLで「preタグ」(<pre>〜</pre>)を利用すると便利です。タブスペースが再現されます。当サイトでもそれを利用してソースコードを掲載しています。
// HSPソース mes "PREタグ" stop
HTMLソースでは下のような感じ。
// HTMLタグ <pre> mes "PREタグ" stop</pre>
スタイルシートを使って「preタグ」内の表示色などを変更するー。
// HSPソース mes "PREタグ" stop
// HTMLタグ <pre clas="code"> mes "PREタグ" stop</pre>
// スタイルシート (例)
PRE.code {
font-size:12px; //フォントサイズ
line-height:130%; //行の高さ
padding:7px; //領域内の余白幅
background:#0000FF; //背景色
color:#FFFFFF; //文字色
}
<< HSP Tips 12 || HSP Tips 14 >>
Copyright © 2005-2007 Kpan. All rights reserved.