« DBStationビネット~スクリプト編というか怪 | トップページ | 黒い○ンダム »

2007/05/22

ルーレットスクリプトの言迷

何の気なしに作ったルーレットスクリプトですが、ちょっと面白い現象があったので、真面目に弄ってみました。キーイベントでスタート・ストップするのはご自分で、と書きましたが、私の方でも考えてみました。スタートさせるのは簡単ですが、問題は止める方かな? 単純に考えたら、SetEventAfterID をkillしてやればいい筈。それだけでいいのかは自信がないけど、一応動くみたいなのでヨシとしましょう。

SIGTEST0.jpg

ぐちゃぐちゃ書くよりやってもらうのが早いので、以下のスクリプトをご自分で試してください。上の画像のように進路表示機を置いてやればいいかと。で、進路表示機に以下の『SIGNAL_A Script』を、LAYOUT(メニューのスクリプト編集)に『LAYOUT Script』を書きます(キーイベントはLAYOUT全体で管理した方が分かりやすく間違いがないので、SetEventKeyはすべてLAYOUTに書くようにしています)。

--------------------------------------------
//LAYOUT Script
--------------------------------------------

Var evid01
Var evid02

SetEventKey this, Start, evid01, s
SetEventKey this, Stop, evid02, q

BeginFunc Start
  call SIGNAL_A Sig01
EndFunc
BeginFunc Stop
  KillEvent SIGNAL_A.ID
EndFunc

--------------------------------------------
//SIGNAL_A Script
--------------------------------------------

Var ID
Var NowSig
Var MaxNo
Var MinNo

set MaxNo 109
set MinNo 100
SetSignal MinNo
//call this Sig01

BeginFunc Sig01
  GetSignal NowSig
  add NowSig 1
  if> NowSig MaxNo
    mov NowSig MinNo
  endif
  SetSignal NowSig
  SetEventAfter this Sig01 ID 1000
EndFunc

--------------------------------------------
とりあえずこれでルーレットになります。「s」でスタート、「q」でストップです。ただし、SetEventAfter の時間が1000=1秒なので、これでは目押しできてしまいますね。実用的には10くらいにすべきですが、以下の実験のために、ここでは1000にしておきます。

で、ここから本題。これは実際にやってもらうしかないですヨ。

  1. s」キーでスタートさせます。数字が1秒ごとに1ずつ増えていきます。
  2. さらにもう一度「s」を押します。表示はどう変りましたか?
  3. ついでにもう一度(3度目)「s」を押します。あれ?っちゅう感じですね。
  4. q」キーを押して表示をストップさせます‥‥‥でも?
  5. もう一度「q」を押します。それでも‥‥‥ならば、もう一度(3度目)「q」を‥‥‥まあ、そういうことです。

何が起こっているのか興味深く、また、よく分からんところですが、Sig01ID を1つしか宣言していないのに、Sig01メソッド(タスク)がそれぞれ別のIDで複数同時に走っている、ってことろでしょうか? マルチタスクになっていることは間違いないようですが‥‥‥。

|

« DBStationビネット~スクリプト編というか怪 | トップページ | 黒い○ンダム »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/103983/15160098

この記事へのトラックバック一覧です: ルーレットスクリプトの言迷:

« DBStationビネット~スクリプト編というか怪 | トップページ | 黒い○ンダム »