« 台の回転 | トップページ | PCと携帯端末の判別 »

2012年4月14日 (土)

領域表示機能

FlatTable に領域表示機能を追加しました。領域表示機能とは、図のように台に枠を描く機能です(閉じた枠に限定せず開いた線でも可能)。この機能は、経路作図機能を少し変更して実現しました。

配置図

図のような枠線を引くには次のようにします。

  1. 表示したい線の色の基礎球を適当な位置に置き、そこから枠線の開始位置まで経路を作図します。
  2. 枠線を作図します。
  3. 基礎球を台の外へ移動します。
この操作をすると、基礎球は StandBy 位置に移動し、基礎球から枠線開始位置までの線と矢印球が非表示になって、図のように領域表示が完成します。基礎球を台の内に移動すると矢印球が表示されて領域表示は解消されます。

今回のルーチンは主に dragStop() にコーディングされています。ただし、それ以外にもこまごまとした修正は必要でした。


function dragStop(){
    ・・・
    var baseBall = curBall.baseBall ? curBall.baseBall : curBall;
    if (baseBall が台の内){
        if (baseBall.arrow &&
            (baseBall.arrow.getAttribute("display") == "none")
        ){
            // 領域表示の解消
            baseBall.arrow.setAttribute("display", "inline");
            straight(baseBall.next);    // 直線
        }
        baseBall.fLive = true;
    } else if (baseBall.next){
        // 領域表示
        var i = baseBall.id.lastIndexOf("b");
        i = baseBall.id.slice(++i);
        if (tableAngle){
            baseBall.x = -20*i + 288;
            baseBall.y = -195;
        } else {
            baseBall.x = 20*i - 288;
            baseBall.y = 195;
        }
        ballMove(baseBall, tableAngle);
        jump(baseBall.next);    // ジャンプ
        baseBall.arrow.setAttribute("display", "none");
        baseBall.fLive = true;
    } else {
        standBy(false);
    }
    ・・・
}

基礎球・枠線開始位置間の線の非表示化は jump() を流用しています。また、領域表示を解消するための線の再表示は単純に straight() を流用しています。そのため、領域表示前は基礎球・枠線開始位置間がカーブだった場合でも、領域表示解消後は直線になってしまいます。しかし実際問題として、領域表示のために操作した経路で基礎球・枠線開始位置間をカーブにすることは無いと思われるので、カーブを復元できない問題は無視することにします。

« 台の回転 | トップページ | PCと携帯端末の判別 »

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

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: 領域表示機能:

« 台の回転 | トップページ | PCと携帯端末の判別 »