AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • HSPモジュール

数は少ないけれど今まで作ってきたHSPのモジュールを公開すべく、tytysiteにページを作っています。余り良い物は無いので期待しないでね。

それにまだページは出来て無いので公開するまでに少し掛かるから忘れていてください(オイ)。


あと、[HSP超入門] ラベル4を少しだけ修正しました。
スポンサーサイト
  • [HSP超入門] ラベル4

ラベルへジャンプする命令にはこれまでに覚えた goto と gosub の2つがあり、HSPはラベルへジャンプする時 必ず goto か gosub のどちらかで行われます。
では button 命令はどちらかと言うと片道切符の goto でラベルジャンプをしています。しかし button 命令でも gosub を使ってジャンプしたい時があります、そういう時のためにHSPではちゃんとその方法が用意されています。
button 命令で gosub を使うには次のようにします。

button gosub "ボタン名",*label

button 命令の直ぐ横に gosub と書くだけです。その後に通常の button と同じパラメーターを指定します。
gosub "ボタン名"
   ↑
ここにはスペースを入れなくても問題有りませんが見やすさのために入れる様にしてください。
「button gosub サンプル1」

button gosub "button",*label
stop

*label
mes "ラベルだお!"
return

このサンプルの場合通常の button 命令の時と同じように動作して分かり辛いですが、ボタンを押した後は return 命令によって stop 命令に戻ってきています。

実は button 命令は HSP のプログラムが止まっている時にジャンプしています。止まっている時と言うのは stop や wait が使われた時です。前に「HSPにくっ付いたウィンドウズの機能は HSP が止まっている時に動いている」と言う話をしましたが、実はボタンはウィンドウズの機能を使っているので HSPが止まっている時にだけ機能します。
button gosub の場合もこれと同じですが、return 命令が実行された時に元の stop か wait に帰ってくると言う事にだけ注意して下さい。
これを知っていればどのタイミングでボタンジャンプが来るか把握する事が出来ます。
「button gosub サンプル2」

button gosub "button",*label
*main
mes "ウェイトの上"
wait 100
mes "ウェイトの下"
goto *main

*label
mes "ボタンクリック"
return

このスクリプトではボタンを押した時 何度ためしても、
ウェイトの上
ボタンクリック
ウェイトの下
の順番でしか表示され無い事が分かります。つまり wait の所でしか ボタンジャンプが起ていないという事です。

ここで間違えないで欲しいのは、HSP が停止している時にジャンプをするのは、button 命令だけで、単品として実行した時の goto 命令や gosub 命令は実行された瞬間にジャンプする と言う事を理解してください。(間違えないと思うけど一応ね)


button gosub "",*label と同様に、
button goto "",*label と明示的に書く事も出来ます。
でも面倒くさいので普通は省略します。
  • む~んな心持

最近は CからのWin32API を習得中です。
といってもまだまだ入門段階ですけど。
やっぱり API は難しいねえ。
難しいというよりも覚え辛いといった感じ。
それに一体どれだけの型名があるのやら・・・。
メッセージの定数名覚えるのも大変。
基本的な物だけでも結構有るもんね。
殆ど記憶力との勝負だな!と思い始める今日この頃。
------------------------------
「6時03分追加」

過去の記事をフンフン眺めていたらこんな文章が・・

「 HSP2までは左から順に計算していくだけでしたが、HSP3になって計算順位が適用される様になりました。ですので掛け算と割り算を先に計算して後から足し算と割り算を計算します。 」

・・・・

「後から 足し算 と 割り算 を 計算します」
「足し算 と 割り算」
「割り算」


・・・!

自分が一番びっくりしたサー!
もちろん誰にも分からない様にこっそりと直したさ~。
地味に大怪我さ~。
  • [HSP超入門] ラベル3

また間が開いてしまいました。
気を取り直してレッツラゴー!

前回までで覚えたラベルの使い方は、ラベルへ跳んだら跳びっぱなしで戻ってきませんでした。これは goto が片道切符だからです。今までの知識だけで戻って来られる様にするには片道切符が2つあれば良さそうですね。

*top
mes "ここは先頭"
goto *label
stop

*label
mes "ジャンプ先だよ"
wait 50
goto *top


stop 命令を入れていますがこれは実行されません、ラベルジャンプによって
*label へ行っているのを明確にする為に入れているだけです。それから無限ループになるので wait を入れています。

下の様にボタンを使った時は、stop で止めているので wait は要りません。*top の位置を button 命令よりも上にしてしまうと、ボタンを押すたびにボタンが作られていくおかしな状態になるので注意。

button "ボタン",*label
*top
stop

*label
mes "ジャンプ先だよ"
goto *top


ラベルが1つや2つなら、片道切符で行ったり来たりしても良いのですが、
ラベルが10個や20個になりさらにラベルジャンプを繰り返したりすると、もう訳が分からなくなってしまいます(本当に)。
*a から *c へ *c から *a へ *a から *b へ *b から *d ....続く。などという具合に 考えただけで恐ろしくなります。
ではどうすれば訳が分からなくなりにくいのか、それはジャンプした後 直ぐに元の場所へ戻って来ればいいのです。しかしそんな事をしようとすると それこそもっと沢山のラベルが必要になりそうな気がしますね。
でも安心して下さい。HSPには初めからそういう事が簡単に出来る便利な命令が用意されています。それが gosub 命令です。goto が片道切符なら gosub はいわば往復切符の様な物ですね。
gosub (ゴーサブ と読む)命令のパラメーターは goto と同じでジャンプ先のラベルを1つ指定します。そしてジャンプ先で return (リターンと読む)命令を呼び出せば元の場所へ戻る事が出来ます。

mes "ここがスタート"
gosub *label
mes "ここが終わり"
stop

*label
mes "ジャンプ先だよ"
return


重要なポイントは、gosub 命令によって *label に跳んだ後 return で元の場所へ戻ってきて、その後何事も無かったかの様にさっきの続きから実行している所です。
ちゃんと元の場所に戻って来れているので、
「 ここがスタート
  ジャンプ先だよ
  ここが終わり  」
という順番で表示されます。

ここで gosub を使う上で注意する事が1つあります。gosub は往復切符ですので、ジャンプした先で return をせずに goto を使って戻ったりしていると、帰り道分の切符が使われずにどんどんたまってしまいます。10枚や20枚ならまだ良いのですがこれが128枚を超えると、HSPがこれ以上持てんわー!!と怒こってエラーを出してしまいます。
「エラーになるサンプル」

*top
gosub *label

*label
wait 1
goto *top
return


と言う事なので、gosub を使った時は必ず return で戻るようにしましょう。
と、ここまで gosub について説明して来ましたが、何でもかんでも gosub にすれば良いと言う事ではなく、goto の方が良い場面も沢山あります。自分のやりたい事に応じて一番上手く行きそうな方を選んで使って行って下さい。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。