春鈴
〜トラブルシューティング〜


エラーの原因がさっぱりわからない "や\が正常に読み取られない ネストが深すぎるとエラーが出た
スクリプトのまま実行する時はよかったのに
SCRやEXEファイルにしたらおかしくなった
mes命令で変数と文字を同時に出したい repeatが機能しない
数字を割って%を表示させたいのに
ゼロになってしまう
:を使って1行にまとめたら
動作がおかしくなった
else命令が使えない
JPEG画像が表示できない screen命令で小さな画面を作りたいが
ある程度までしか小さくならない
ウィンドゥの大きさを数字にして使いたい
ディスプレイの大きさを数字にして使いたい マウスカーソルの位置を数字にして使いたい 今のディレクトリ(カレントディレクトリ)の
位置を文字列として取得したい
スクリーンセーバーの
コンフィグ画面が表示できない
『画面のプロパティ』で
スクリーンセーバーの小窓が表示されない
palfade命令が機能しない
オブジェクトをたくさん配置したら
画面表示がおかしくなった
ショートカットファイルの操作がうまくいかない 変数の数値型とか文字型とかって何?
iniなどの設定ファイルを使いたいが、
うまく書き込み・読み込みできない
文字型変数の中身を何度か書き換えて
ファイルに書き出したらおかしくなった
HSPスクリプトエディタのテキスト容量を
超えてしまった
dialog命令が飛ばされてしまう

.
エラーの原因がさっぱりわからない
 ・ ;(セミコロン)と :(コロン)を間違っていないか     ・・見づらいならスクリプトエディタの検索機能を使うといいです。
 ・ { と [ を間違っていないか
 ・ , (コンマ)と . (ピリオド)を間違っていないか       ・・『配列の要素が多すぎます』が出たらこれのことが多いです。
 ・命令のスペルミスはないか                 ・・レインボーエディターを使うと 命令のスペルミスを防げます。
 ・命令に使う変数にシステム変数を使っていないか    ・・instr など一部の命令では、システム変数を直接使うことができないようです。
                                    一般の変数に代入して使えばOKです。

 ・C言語などのクセで、変数=命令文 と書いていないか ・・a=rnd ( ) とかね。
 ・ \ の使い方を間違っていないか              ・・mes命令などで\という文字を使うときは注意が必要です。下記参照

.
"や\が正常に読み取られない
 HSPのヘルプに詳しく書いてありますけど、普通に \ と表示したいときは、\\と書きます。
 "は \"と書きます。
 mes命令はもちろん、変数に格納する文字列でも同様です。

.
ネストが深すぎるとエラーが出た
 repeatやgosubの使い方が間違っていると思われます。
 repeat〜loopの間や、gosub〜returnの間でgotoを使ってジャンプしてはいけませんよ。
 repeatの途中でgotoを使いたいときは、breakしてループの外に出てからにしてください。

.
スクリプトのまま実行する時はよかったのに、SCRやEXEファイルにしたらおかしくなった
 packfileの登録を一度全部削除してから、コンパイル、start.axの作成と、最初からSCRやEXEファイルを作り直してみてください。
 dllを使ったのに、同フォルダ内に置き忘れていないかを確認してください。
 asファイルをincludeしたのにpackfileに登録し忘れていないかを確認してください。

.
mes命令で変数と文字を同時に出したい
 HSPヘルプにも書いてありますが、a=1 のとき、
 mes "ナンバー"+a  と書くと ナンバー1 と表示されます。
 mes ""+a+"番目"  と書くと、 1番目 と表示されます。
 mes ""+a+a+a  と書くと、 111 と表示されます。
 mes a+a+a と書くと、 3と表示されます。

.
repeatが機能しない
 変数の初期化がrepeat〜loop内に入っていませんか?
repeat 10
x=0
line x,0,0,x
x++
loop
 とかいうふうに。

.
数字を割って%を表示させたいのに、ゼロになってしまう
 HSPでは基本的に整数しか扱えなくて、小数点以下は切り捨てられてしまいます。
 計算の途中でゼロ以下になったものも切り捨てられるので、パーセントを出すときには
a/b*100  ではダメで
a*100/b  としなければなりません。

.
:を使って1行にまとめたら動作がおかしくなった
 まず、:と;を間違っていないかや、:を入れ忘れていないかを確認してください。
 間違いがなかったら、本来はifの文がある次の行で書いている文を、:を使ってifの文と一緒の行に書いていないかを見てください。
 if命令のあとにifとは関係のない文を書くと、実行されない場合があります。

.
else命令が使えない
 『elseの前にifが見つかりません』とエラーが出たのなら、: を使って if と else を同じ行に書いてください。

.
JPEG画像が表示できない
 JPEG画像にも色々な形式がありまして、
 HSPが対応していない (多分Susieプラグインが対応していない) 形式のJPEG画像はそのままでは表示できません。
 画像をBMPに変換するか、JPEGの中でもHSPが対応している形式に変換し直さなければなりません。

.
screen命令で小さな画面を作りたいが、ある程度までしか小さくならない
 screen命令では制限があるようですが、
 width命令なら小さくできます。
 ただし、screen命令でつくったウィンドゥは、上にメニューが並ぶので一定以下には小さくできません。
 さらに小さくしたい時は、bgscr命令でつくったウィンドゥを使うしかありません。

.
ウィンドゥの大きさを数字にして使いたい
 a=winx で、aにウィンドウの横幅が入ります。
 a=winy で、aにウィンドウの縦の長さが入ります。
 mes winx のように、変数に代入せずに直接使うこともできます。

.
ディスプレイの大きさを数字にして使いたい
 a=dispx で、aにディスプレイの横幅が入ります。
 a=dispy で、aにディスプレイの縦の長さが入ります。
 mes dispx のように、変数に代入せずに直接使うこともできます。

.
マウスカーソルの位置を数字にして使いたい
 a=mousex で、aにウィンドウの左上を0としたマウスの横座標が入ります。
 a=mousey で、aにウィンドウの左上を0としたマウスの縦座標が入ります。
 mes mousex のように、変数に代入せずに直接使うこともできます。
 ただし、マウスカーソルがウィンドウの外にあると数字がおかしくなります。
 ginfo命令を使うと、ディスプレイ全体でのマウス座標が得られます。

.
今のディレクトリ(カレントディレクトリ)の位置を文字列として取得したい
 curdirという変数に自動的に入っています。
 mes curdir とすればよくわかります。

.
スクリーンセーバーのコンフィグ画面が表示できない
 gsel命令で画面をアクティブにしないと表示されません。

.
『画面のプロパティ』でスクリーンセーバーの小窓が表示されない
 picload命令は使えないようです。

.
palfade命令が機能しない
 画面がパレットモードでないと機能しないようです。
 screen命令などでパレットモードに変更してください。

.
オブジェクトをたくさん配置したら画面表示がおかしくなった
 一画面で同時に扱うオブジェクトの数には限界があるようなので、それ以上の設置は無理です。
 オブジェクトを一画面で同時に使わないですむ、他の方法を考えてください。

.
ショートカットファイルの操作がうまくいかない
 ショートカットファイルは拡張子が表示されませんが、実際には.lnkという拡張子がついています。
 ファイル名を指定して実行やコピーなどをするときは、その拡張子まで指定する必要があります。

.
変数の数値型とか文字型とかって何?
 変数には、数値型と文字型の2つの型があります。
 数字だけを扱うか、ひらがなや漢字も含めた全部の文字を扱うかで変数の種類が違うのです。
 数値型の変数なら計算ができますが、文字型の変数に数字が代入されていても計算はできません。
 変数は代入されたものによって型が決められます。これはプログラムの途中で変えることもできます。
a=0     など、数字が代入されれば変数は数値型になります。
a="あい"  など、文字が代入されれば変数は文字型になります。
 また、int命令やstr命令を使っても型は変えられます。
 その際、今まで変数に代入されていたものがどうなるかは、HSPヘルプのint命令、str命令の説明ページに書いてあります。
 詳しくはC言語やBASICなどの参考書をお読みください。

.
iniなどの設定ファイルを使いたいが、うまく書き込み・読み取りできない
 bsave命令でファイルに書き込んだりbload命令でファイルから読み込んだりするときは、
 読み込み・書き込みに使う変数が数値型か文字型かをきちんと決めておかなければなりません。
 文字型の変数を使ってファイルに書き込むと、ファイルには変数に代入されている通りの文字列が書き込まれます。
a=120 : str a   とすると、 120 と書き込まれます。
a="あいうえお"  なら、 あいうえお と書き込まれます。
 こうして書き込まれたものをこの通りに読み込むためには、読み込む変数も文字型にする必要があります。
 数値型の変数を使ってファイルに書き込むと、ファイルには変数に代入されているものをあるコードに変更したものが書き込まれます。
a=120       なら、  x  と書き込まれます。
a=55        なら、  7  と書き込まれます。
a=33        なら、  !  と書き込まれます。
 これはJIS(ASCII)コードというものに従って変換されたもので、
 書き込まれたものを数値型の変数を使って読み込めば、上の例だとそれぞれ 120  55  33 と読み込みますが、
 文字型の変数を使って読み込むと、 x  7  !  と読み込んでしまいます。
 逆に、文字型で書き込んだものを数値型で読み込んでも、JISで数字に変換されたものを読み込んでしまいます。
 ちなみに、
b=55 : a="ホームラン"+b+"本"
 とすると、bは数値型のままですがaには55を含めて文字型として代入されるため、
ホームラン55本    と書き込まれます。

.
文字型変数の中身を何度か書き換えて、ファイルに書き出したらおかしくなった
 変数に長い文字列を代入した後で、短い文字列を代入しなおして bsave命令でファイルに出力すると、
 長いほうの文字列の最後の部分が一緒に出力されてしまうことがあります。
 これは言語の仕様によるもので、現時点では仕方のないことのようです。
 対応策として、bsave命令では文字列のうち何バイトをセーブするか決められるので、それを使います。
 半角文字20文字なら20バイト、全角文字20文字なら40バイトです。この長さは、strlen命令で数えることもできます。

.
HSPスクリプトエディタのテキスト容量を超えてしまった
 ソースファイルが30キロバイト前後になると、HSPスクリプトエディタの容量オーバーで書き加えられなくなります。
 これは、Windows付属のメモ帳と同じ容量のようです。
 ここまでは、レインボーエディターなど他のツールを使えば解決できます。
 しかし、ソースファイルが60キロバイト前後になると、HSPスクリプトエディタの容量オーバーで読み取ることもできなくなります。
 最後まで読み取れなくても、最初の数行だけでも読み取れているうちは、コンパイルしてEXEファイルにすることはできますが、
 63キロバイトを超え、HSPスクリプトエディタが1行も読み取れなくなってしまったら、#include命令などでソースを分割しないと
 EXEファイルにはできなくなります。
 #include命令は、指定したファイルに書いてある文を、この命令を実行した場所にそっくりそのまま書き写すというもので、
 これを使えばファイル分割も簡単に出来ます。

.
dialog命令が飛ばされてしまう
 wait命令やawait命令を使わずにたくさんの処理をしてCPUに余裕がなくなると、
 dialog命令が飛ばされたり、以前に押したEnterキーをそのまま読み取って勝手に前に進んだりします。
 dialog命令の直前にほんの少しでもwait命令を入れれば解決できます。





もどる
雪鈴工芸,はる,ハル,spring,スプリング,trouble,困りごと,解決,HSP,HotSoupProcessor,ホットスーププロセッサ ,hint,ヒント,救う,save,お助け,悩み,苦しみ