マウスイベント処理
Last-modified: 2019-01-27 (日) 03:09:07 (1518d)
StarLogoウィンドウ内マウス位置を取得したり、発生するマウスイベントを 感知して使う事ができます。 利用できるマウスイベント †マウスイベントとしては、
など、単純なものだけが用意されています。 マウス位置 †現在のマウス位置は次の2つの変数に入っています。
この変数を利用して、マウスが押された場所を取得し、その位置を 使ったStarLogoプログラムを作ることができます。 StarLogoによるマウスイベント処理 †マウスイベントを扱う「古いタイプ」のプログラムでは、プログラマが 「イベントループ」という、
ようなプログラムを作り、処理しました。 StarLogoでは、シミュレーションのループ毎にマウスイベントをチェック する形をとります。実際には、タートルやパッチに対しての処理に対して 「forever」チェックボックスをOnにする事によって、繰り返し実行される TurtleProcedureやObserverProcedureを使うだけです。 マウスが押されたかどうかを感知 †現在マウスが押されたかどうかを感知するための手続きは mouse-down? です。これをif文でチェックすることによって、 マウスが押されたときに特別な処理を行うことができます。 例 †ふだんはランダムウォークしているタートルが、マウスが押されたらその 場所をめがけてやってくる、というもの。 TurtleProcedure †タートルの手続きだけです。次の様になります。 to go if mouse-down? [ let [:sdx mouse-xcor - xcor] let [:sdy mouse-ycor - ycor] setheading (atan :sdx :sdy) ] rt random 30 lt random 30 fd 1 end endの前の3行は、少し方向の付いたランダムウォークです。 そして、その前のifのブロックの中で、 let [:sdx mouse-xcor - xcor] let [:sdy mouse-ycor - ycor] の様にして、:sdx,:sdyにマウスカーソルの位置とタートルの位置の 差を入れています。 次の、 setheading (atan :sdx :sdy) で、:sdx/:sdyという傾きから求めた方向*1 へ、タートルの頭を向けています。 ボタン作成 †今回作ったボタンは次の様なものです。
画像(マウスボタンを押す前) †goボタンを押すと、ランダムウォークのシミュレーションがスタートします。 画像(マウスボタンを押した時) †タートルが動き回っているときに、適当な場所(パッチの外でも良い) マウスボタンを押すと、その場所にタートルが向いて、一斉に向かってきます。
Counter: 446,
today: 2,
yesterday: 0
|