javascriptによる物理シミュレーション第3回


 前回でおおかたの説明は終わったので、今週はとにかくプログラミングを進めてもらいます。

 前回からの間に「一時停止機能はどうつけたらいいのですか?」という質問があったので、その方法として、phystem.jsを改良しました。

改良版が欲しい人は、右のリンクを保存すること→phystem.js

 このページが「一時停止機能の説明例」になってます。

 修正点を述べます。

 まず、phystem.jsの197行目の

Phystem.prototype.start = function () { this.goStep(this); };

を、

Phystem.prototype.start = function () { this.goFlg=true; this.goStep(this); };

に直します(this.goFlgというフラグをtrueにしてます)。

 次に、phystem.jsの199行目の

Phystem.prototype.goStep = function (ps) {

の後に、

    if( !ps.goFlg ) {
        return;
    }

と3行追加します。これで、goStep()(←毎回の運動を計算している関数)が、 goFlgがtrueでないと何もしないで戻ります。goStep()関数はその最後で「一定時間ごとに自分を呼び出す」ということをしてアニメーションを実現してますが、それもやらなくなります(つまり、「止まる」)。

 ボタンは、htmlファイルの中に以下のように追加します(psはPhystemです が、自分のに合わせて変更すること)。

<button onclick="ps.goFlg=false;">一時停止</button>
<button onclick="if( !ps.goFlg ) { ps.start(); }">再スタート</button>

 意味はわかると思いますが「一時停止」ボタンを押すとgoFlgがfalseになり、 止まります。「再スタート」ボタンを押すと現在停止中なら「start()」で再始動させます (単に再始動させると、同じものが複数個走るのでチェックが必要)。