« 散乱角の \(\sin\), \(\cos\) | トップページ | 減速倍率 »

2012年7月20日 (金)

アニメーションを管理する4つの変数

FlatTable のアニメーションには、それを管理するために4つの変数が使われています。

  • ballList
  • knotAry[][]
  • runList
  • clusterMem (これは局所変数)
この4つの変数について説明します。

ballList

ballList は次のように、何か処理したい対象を設定する時の基礎として使われます。球の番号に対応した桁のビットが、その球のフラッグになっています。

    var propose = ballList & ~mask;

ballList は次のルーチンで値が設定されます。

// ballList の設定
function makeBallList(){
    ・・・
    ballList = 0;
    for (var i = 0; i < nBall; i++){
        ball = animPage.childNodes[(nBall - 1 - i)*2 + 3];      // (1)
        srcBall = curPage.childNodes[(nBall - 1 - i)*2 + 3];    // (2)
        if (srcBall.fLive){        // (3)
            ball.x = srcBall.x;
            ball.y = srcBall.y;
            ballMove(ball, tableAngle);
            ball.src = srcBall;
            ballList |= (1 << i);
            knotAry[0][i] = srcBall;
            knotAry[1][i] = srcBall;
            ball.setAttribute(display, inline);
        } else {
            ball.src = null;
            ballList &= ~(1 << i);
            ball.setAttribute(display, none);
        }
    }
}
(1),(2)の childNodes[(nBall - 1 - i)*2 + 3]i 番の球を表しています。(3)の fLive は、その球が台上に配置されていることのフラッグです。台上に配置されている場合に ballList に組み込まれます。

knotAry[][]

次に knotAry[][] について説明します。配置図には経路の始点から終点まで全ての節点が表現されています。しかし、経路ごとに見た場合、アニメーションの対象として、それらの節点が同時に複数個使用されることは有りません。例えば次の図において、



1番の球は、今 a から b に向かっているのか、 b から c に向かっているのか・・・ということは一意でなければなりません(複数はダメ)。その対象を保持しているのが knotAry[0][i] です( i は球の番号)。因みに、 knotAry[1][i] は、その次の局面で対象となる球が保持されており、適切なタイミングで

    knotAry[0][i] = knotAry[1][i];
が実行されます。 knotAry[1][i] が決定されるタイミングとアニメーションの局面が変わるタイミングが異なるために、バッファとして knotAry[1][i] が使用されています。アニメーションの局面が変わるとは、例えば1番が a から b に向かっていたのが b から c に向かうようになることを言います。

runList

runList は現在動いている球の配列です。次のようなルーチンで設定されます。

    ball = animPage.childNodes[(nBall - 1 - i)*2 + 3];
    target = knotAry[0][i];
    if (nextBall = target.next){
        ・・・・
        runList.push(ball);
    }
ここに target は配置図に載っている球で、 ball はアニメーション用ページにおいて target = knotAry[0][i] に相当するものです。runList に入っている球は、停止したら runList から除外されます。

clusterMem

下図のようなコンビショットをアニメーションする時に必要になるのが clusterMem です。先の3つの変数は大域変数ですが、この clusterMem は局所変数です。この変数は clusterCheck() で作成され、塊りを構成している球のリストをビットのオン・オフで保持しています。ビットの桁が球の番号に対応します。下図の場合、手球が1番に当たった後で動き始める球は、 clusterMem を構成している1番・2番の2個となっています。



« 散乱角の \(\sin\), \(\cos\) | トップページ | 減速倍率 »

ビリヤードの配置図ソフト」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: アニメーションを管理する4つの変数:

« 散乱角の \(\sin\), \(\cos\) | トップページ | 減速倍率 »