« エンコード・デコードルーチンの実装(3) | トップページ | プレイルートの矢印 »

2016年10月22日 (土)

ボールおよびパスルートの処理

LongDriver ではボールのパスルートを選手のルートで代用していましたが、ボール専用のルートを導入しました。 LongDriver 下段にボールのマークが有りますが、これをクリックするとボールが表示され、後は選手を操作するのと同様にしてルートを作成できます(フィールド内のボールを見えなくするには LongDriver の左右に有る茶色のバーをクリックして下さい)。パスルートの線は破線で表示されます。また、選手のマークは、各選手とも最初のマークが常に表示されていますが、ボールの場合はルート作成の時だけ表示されるようにしました。

ボールのパスルート作成・表示ルーチンは選手のルーチンと基本的に同じですが、線の種類が違ったり、平時は非表示であったりするので、条件分けによってボールの処理をしています。そのせいでコードが汚くなっています。下記コードで /**/ で挟まれたところがボールと選手を区別して処理している箇所です。似たようなものが他にも数か所有ります。


Diagram.prototype.default = function(){
    var id;
    var pos = {};
    var node;
    for (var i = 22; 0 <= i; i--){
        pos.x = this.plyDefPos[i].x - ground.deltX;
        pos.y = this.plyDefPos[i].y - ground.deltY;
        id = this.player[i] + this.index;
        /**/
        if (11 == i){    // ボール
            this.ball = node = this.makeNode(id, pos, 26, this.player[i], true);
            node.setAttribute("opacity", 0.3);
        } else {    // 選手
            node = this.makeNode(id, pos, 26, this.player[i], false);
        }
        /**/
        node.alt = 0;
    }
}

当初は、ボールおよびパスルートは選手および選手のルートを表示するレイヤーとは別のものを用意していたのですが、基本的に、選手と同じルーチンを使用しているため、ボールおよびパスルートも選手と同じレイヤーを使用することにしました。


function Diagram(index, code, prev, next){
    ・・・

    this.routeLayer = document.createElementNS(svgns, "g");
    this.manLayer = document.createElementNS(svgns, "g");
    //this.ballLayer = document.createElementNS(svgns, "g");    不要になった
    ground.field.appendChild(this.routeLayer);
    ground.field.appendChild(this.manLayer);
    //ground.field.appendChild(this.ballLayer);    不要になった

    ・・・
}

« エンコード・デコードルーチンの実装(3) | トップページ | プレイルートの矢印 »

フットボールのプレイ図ソフト」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: ボールおよびパスルートの処理:

« エンコード・デコードルーチンの実装(3) | トップページ | プレイルートの矢印 »