読者です 読者をやめる 読者になる 読者になる

ごらくらいふ

プログラミングしたりゲームしたり

「リトル・レディ」かってに復活開発日誌 #13

f:id:yajamon:20150715095909p:plain

今日の課題

  • 炙りだされた不具合を解決する

前回、BGanime()slideLS()から呼び出されたものを改修したら、不具合が発生した。

f:id:yajamon:20150728140232p:plain

これを解決する

作業録

bga8 ?

詰まっているところを確認したところ、bga8というエレメントが見つからず、moveL()からエラーを吐き出していた。

function moveL(layName, x, y) {
    document.getElementById(layName).style.left = y;
    document.getElementById(layName).style.top = x;
}

対象のエレメントはどこから生成される予定だったのか確認したところ、hane.htmでdocument.writeから出力していた。

// /event/hane.htm

//iはレイヤーの数
var Wsize=30;//画像の横幅 20
var Hsize=20;//画像の縦幅 16
for(i=0;i<8;i++){
    //画像の縮小 (一定比率 5:4)
    if(i==2||i==5){
        Wsize-=5;
        Hsize-=4;
    }
    typewrt+='<SPAN ID="bga'+i+'" ';
    typewrt+='STYLE="top:-100;left:0;';
    typewrt+='position:absolute;';
    typewrt+='font-family:Osaka,Arial;font-size:24pt;font-weight:900">';
    typewrt+='<img SRC="../image/Ahane1.gif" width='+Wsize+' height='+Hsize+'>';
    typewrt+='</SPAN>';
}
document.write(typewrt);

この処理を見る限り、bga8というエレメントは生まれる予定にない。

呼び出し処理の修正

生成処理について修正した覚えはない。むしろ呼び出し箇所について手を加えた記憶がある。

yajamon.hatenablog.com 前々回だ。

// /event/hane.htm

function BGanime(layName,flag){

    /* 初期計算処理 */

    if (flag == 1) {//繰り返しの時
        mvFlag[layName] = false;
        setTimeout(function () {
            slideLS(layName, a, b, a2, b2, c, 10);
        });
    } else {//はじめの場合
        for (i = 0; i < 8; i++) {
            
            /* 追加計算処理 */
            
            mvFlag['bga' + i] = false;  //flag
            setTimeout(function () {
                slideLS('bga' + i, a, b, a2, b2, c, 10);
            }, 10);
        }
    }
}

この2個目のsetTimeout(function(){})内部でiを使っているのが良くなかった。

外側でlayNameを定義し、それを使うようにしたところ、このエラーは解決した。

// /event/hane.htm

function BGanime(layName,flag){

    /* 初期計算処理 */

    if (flag == 1) {//繰り返しの時
        mvFlag[layName] = false;
        setTimeout(function () {
            slideLS(layName, a, b, a2, b2, c, 10);
        });
    } else {//はじめの場合
        for (i = 0; i < 8; i++) {
            
            /* 追加計算処理 */

            var targetLayerName = 'bga'+i;
            mvFlag[targetLayerName ] = false;    //flag
            setTimeout(function () {
                slideLS(targetLayerName , a, b, a2, b2, c, 10);
            }, 10);
        }
    }
}

f:id:yajamon:20150728160150p:plain

エンバグこわい

yajamon.hatenablog.com