FAQ1
■スクリプトってなに?
Q.スクリプトって何のこと?
何でプログラムといわないの?
A.スクリプトとは”命令がいっぱい書いてあるもの”の事です。
こんな文字を出せとか、計算しろ、という命令の集まりがスクリプトです。
HSPでは、XXXXX.asというファイル名になります。
プログラムのもとの形がスクリプトで、他に”ソーススクリプト”といったり
”ソース”や”プログラム”と表現することもあります。
言語側の処理が多く、簡単にプログラムが組める言語では、
その命令の集まりをスクリプトと表現することが多くなりました。
■サブルーチンて何?
Q .サブルーチンて何ですか?
gosub命令は普通のジャンプとどう違いますか?
A.普通のジャンプは行ったっきり。
サブルーチンジャンプはサブルーチンにジャンプすることです。
サブルーチンの終わりには、自分を呼んだところに戻るようになっています。
サブルーチンとは、プログラムの1部を再利用できるように、ひとまとめにしたものです。
gosub命令でサブルーチンを読んだ後は、必ずreturnで戻る必要があります。
サブルーチンはプログラムの色々な部分から呼ばれるので、
終わった後の行き先がgoto *ラベル では指定できません。
だからreturnという命令があるのです。
■IF文に出てくる&って何?
Q.「if a&1:mes "奇数":else:mes "偶数"」このIF文で出てくる”&”って何をしてるの?
A. ”&”は、論理演算のANDです。
a&1が1だったら”奇数”を表示、それ以外は”偶数”を表示という意味です。
a&1とは 変数aと1のANDをとりなさいとう記号です。
ANDとは両方の値が1の時のみ、答えが1という計算式です。
a and b という式のとき、1ビットだけを考えると、以下の4通りになります。
a b a&b
-------
0 0 0
0 1 0
1 0 0
1 1 1
掛け算のように両方が1の時だけ結果が1になるので、ANDの事を論理積といいます。
さて、式での目的は、 変数aの内容が、2進数で「10101011」だったとします。
変数aの1番したの1桁の情報だけを取り出したい!というときには、
変数aと”1番したの1桁”という情報をAND(論理積)すればいいのです。
10101011(変数a)
00000001(”1番したの1桁”a&1に使った1)
--------
00000001(変数a&1の結果)
先ほどは1ビットだけで考えましたが、実際は各ビットごとに論理演算が行われます。
前のリストは数字が横でしたが、1桁ずつたてに考えてください。
この場合は1になりました。
データの1番したの桁が0なら、0&1で結果は0になります。
論理演算はなかなか分かりにくい概念かもしれません。
書籍などで勉強することをおすすめします。
■ビットシフトって何?
Q”ビットシフトってなんですか?
A.意味はビットをシフトさせることです。
ビットとは、ここでは2進数の1桁のことです。
HSPでは”>>”と”<<”を使います。
数値を2進数で考えてください。
たとえば10進数の5は、2進数では101です。
その状態から左右にズラすことをHSPではシフトといいます。
0101 (10進数で5)を左に1つズラすと
1010 (10進数で10)になります。
つまり2倍になります。
これは、2進数の持つ性質です。
逆に右にズラすと1/2になります。
| a=1 a=a << 1 mes a stop |
このようなサンプルを打ちこんで、
変数aの値を変えて実験してみてください。
■画像が出ない
Q.HSP教室のサンプルファイルを実行すると、「画像ファイルがありません」と出ます。
確かめてみたら、ファイルはちゃんとありました。
A.それはHSPのあるディレクトリ(フォルダ)と違うディレクトリ(フォルダ)に
ソーススクリプトやグラフィックを置いているのではないでしょうか?
ためしにhsp2.exeやhsed2.exeのあるディレクトリ(フォルダ)と同じ所に
置いてみてください。
おそらく、カレントディレクトリがhspのあるディレクトリになっているために
出るエラー だと思います。
■exeを作るとエラーが出る
Q.start.axのファイルを作るとき「不正な処理です」とエラーが出て、EXEファイルがつくれません。
A. hspのバージョンが混ざっていませんか?
最新の2.5を手に入れて、新たにフォルダを作ってやってみてください。
EXEファイルの作り方はこちらにあります。
■複数の変数の保存
Q.RPGを作っていて、複数の変数をセーブする必要があります。
複数の値をセーブするのはどうしたらいいでしょうか。
A.2つの方法を紹介します
●方法1
数値の場合は文字に変換して、一つの変数にまとめてセーブします。
サンプルでは、xとyで0から999の範囲の整数です。
(1)データをセーブするとき
| str x,3 str y,3 wdat=x+y bsave "xy.dat",wdat,7 |
(2)データをロードするとき
| bload "xy.dat",wdat strmid x,wdat,0,3 strmid y,wdat,3,3 int x int y |
このようにすれば沢山の変数を1つのファイルで管理できます。
●方法2
すべて数値で、ひとつの配列に入っている場合には、そのまま保存できます。
(1)データをセーブするとき
| dim dat,10 dat.0=10,11,12,13,14,15,16,17,18,19 repeat 10 mes dat.cnt wait 1 loop bsave "test.txt",dat stop |
(2)データをロードするとき
| dim dat,10 bload "test.txt",dat repeat 10 mes dat.cnt wait 1 loop stop |
■MCIコマンドがわからない
Q.MCIコマンドの使い方がわかりません。
A.HSPに付属のサンプルのCDプレイヤーを参考にするといいでしょう。
また、下のスクリプトで”test.avi”というムービーを再生できます。
| mci "open test.avi alias myid" ;エイリアスをつける mci "play myid from 00" WAIT 1000 mci "stop myid" mci "close myid" ; 最後に必ずcloseする end |