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

私の作ったマンボ専用プレイヤーも参考になるかもしれません。
ソーススクリプトがついています。

MCIコマンドの詳細についてはこちらのページにヒントがあります。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/mci/listExt.html




FAQへ戻る