Harvestは小説の題名。(FRP)の応用分野の一つであるアニメーション・プログラムの解説をしよう。言ってもとても簡単なプログラムである。Bananaのロゴをカーソルがあるところに近づけるというプログラムである。画面は以下のようだが、ロゴがカーソルに向かって動き回るというのがこのプログラムである。ユーザ・インタフェース例によって、ユーザ・インタフェースを最初に用意する。今回の画面は、白地のパネルにロゴを張ることにすると、フレーム、パネルは次のように定義できる。]また、フレームの書き換え時間を、これはネットワークをモニタする時間にもなるが、20ミリ秒と定義しておく。]8.2イベント・ネットワークの構築イベント・ネットワークは前の記事で説明した通り、入力、イベント・グラフ、出力から構成される。それでは、これらを順を追って説明しよう。入力まず、入力は(フレーム書き換えの)タイマーとマウスからになるので、次のようにする。eventsイベント・グラフ次はイベント・グラフである。これには、マウスの位置、ロゴ(spriteと呼ぶ)の位置、ロゴの描写が含まれる。最初にマウスの位置を表すイベント・グラフを考える。マウスの位置はイベントとして離散的に入力される。これから、ある時間でのマウスの位置を知るためには、離散的に入力された位置の点列から、連続な時間で定義された位置に変更する必要がある。これには前に説明したstepperを用いる。従って、連続的な時間に対して、マウスの位置は次のように変化する。emouse)ところで、イベントでの位置はデータ型Pointで与えられるが、計算をベクトルで行うために、位置をデータ型Vectorで表したい。この変換は関数fromPointが行ってくれる。fromPointで行う必要がある。emouse))となる。emouse))となる。従って、マウスの位置を表すイベント・グラフは次のようになる。emouse)なお、fromPointerは次のように定義されている。pt))また、マウスの位置を得るために用いたjustMotionは次のように定義されている。Nothingそれでは、ロゴの位置をイベント・グラフで表すことにする。このプログラムでは、フレームの書き換え時間(20ミリ秒)が、モニターしている時間間隔である。現在の時点でモニターしたカーソルの位置(\(\vec{mouse}\))はロゴ(\(\vec{pos}\))の位置から離れていたとする。この時、次のモニターの時間が来たときに、先ほどのカーソルの位置にロゴを移動したい。\)の速度で進めばよい。APIを利用すればよい。上の図の(*)のところを速度とすればよいことが分かる。そこで、速度をspeedupで表すと次のように表すことができる。45とあるのは、ロゴの左、真ん中の少し上にカーソルが来るようにするための調整値である。この速度を用いて、次のロゴの位置を求めると以下のようになる。APIで次のような働きをする。0)はロゴの初期位置であり、posは現在のモニター時点での位置である。現在の位置は、accumBで移動距離の累積を計算しそれより求められている。accumBの関数がなかなかわかりにくいのでが、次のような例があるので、これから推察するとよい。[(time1,"xy"),(time2,"xyz")]上記のプログラムで、初期値は"x"である。次の時間time1では、これに"y"が追加される。次の時間では、さらに"z"が追加される。0)、次のモニター時間が来たときに、その時に進んだ距離が足され、さらに次のモニター時間で、さらに進んだ時間が足されるという操作が行われていると考えるとよい。clipToFrameはロゴがフレームからはみ出さないようにする。プログラムは次のようになっている。b)イベント・グラフの最後はロゴの描写である。これはロゴのビットマップをもらってposのところに描く。b)また、ビットマップは次で与えられる。出力は次のようになる。プログラムプログラムはこのホームページで公表されているが、転載しよう。Programmingで表現する(10)今年の秋は、天候に恵まれ、秋たけなわの日が多い。ゲームの出力を行うのはグラフィックスである。参加グループ知識リンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!bitterharvestさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。