2017-10-11 2 views
1

エッジアニメーションを使用する。 私はタイマー付きのゲームを持っています。 ユーザーは一定時間内にn個のドロップオブジェクトをドラッグする必要があります。 私は時間がなくなり、すべてをリセットしたい。 ドロップイベントの正しい場所にドロップされたときにドラッグ可能を無効にします。ゲームを再開するために無効に設定されているdraggablesをリセットするにはどうすればいいですか?

ui.draggable.draggable('disable'); 

私はすべての要素をリセットする場合しかし、コンソールに私は悪名高いが出る:私は

sym.$(".set" + set).draggable("enable"); 

を追加しない場合

**Error: cannot call methods on draggable prior to initialization; attempted to call method 'enable'** 

は、基本的には、その後draggablesが無効になっています。

私はそれらを無効にしないと、回答とスコアを追跡するのに多くの問題が発生します。

これを防ぐにはどうすればよいですか?

いくつかの回避策がありますか、それとも間違ってリセットしていますか?または、私は再する必要があります

for (j = 0; j < logs1.length; j++) { 
    sym.$(logs1[j]).addClass('logs1' + j); 
    sym.$('.logs1' + j).draggable({ 
    zIndex: 1000, 
    axis: "y", 
    revert: function(obj) { 
     if (obj === false) { 
     sym.getSymbol("beaver").stop("stop3"); 
     return true; 
     } else { 
     return false; 
     } 
    }, 
    start: function(event, ui) { 
     sym.$("water").show(); 
     startPos = $(this).offset().top; 
     sym.getSymbol("beaver").stop("stop1"); 
    } 
    }); 
    sym.$('.logs1' + j).droppable({ 
    drop: function(ui, event) { 
     $(this).css({ 
     'top': startPos 
     }); 
    } 
    }); 
    sym.$(droppable[j]).droppable({ 
    accept: ".logs1" + j, 
    drop: dropEvent 
    }); 
} 
K = 0; 

function dropEvent(event, ui) { 
    $(this).css({'border': '3px solid lime'}); 
    logDropFX.play(); 
    ui.draggable.draggable('disable'); 
    ui.draggable.position({ of: $(this), 
    my: 'left top', 
    at: 'left top' 
    }); 
    waterRisingLoop.play(); 
    sym.getSymbol("beaver").stop("stop2"); 
    K++; 
    sym.$("marker").animate({ 
    'top': 400 - (50 * K) 
    }, 1000); 
    var markerPos = sym.$("marker").offset().top; 
    console.log("marker level: " + markerPos); 
    if (markerPos < 250 || K == 5) { 
    clearInterval(timer); 
    done = false; 
    setTimeout(function() { 
     sym.$('levelScreen').animate({ 
     "top": 0, 
     'z-index': 99999 
     }, 1000); 
     sym.$("level").attr('src', 'images/level1Complete.png'); 
     sym.$(".set1").hide(); 
     levelUpFX.play(); 
    }, 2000); 
    } 
} 

リセットコードは次のとおりです。 draggablesをやり直すのは冗長なようです。私は一緒に試してみて、まだエラーメッセージが表示されます。

sym.$("startTimer").bind('click', function() { 
.... // some code before 
    sym.$(".set" + set).show(); 
    for (j = 0; j < logs1.length; j++) { 
     sym.$(('.logs' + set) + j).draggable(); // draggables 
     sym.$(".set" + set).draggable("enable"); // re-enable 
    } 
    timer = setInterval(function() { 
    if (w <= 180 && w > 0) { 
     w = w - 3; 
     sym.$("timer").css({ 
     "width": w 
     }); 
     currentPos = (sym.$("water").offset().top) - 4; 
     sym.$("water").animate({ 
     'top': currentPos 
     }); 
    } 
    }, 1000); 
}); 

答えて

0

OK。私は解決策を見つけた。ドロップイベントのフィードバックチェックでドラッグ可能なアイテムを再度有効にしました。だから私は(簡略化した):

function dropEvent(event, ui) { 
    ui.draggable.draggable('disable'); 
    ui.draggable.position({ of: $(this), my: 'left top', at: 'left top' }); 
    ui.draggable.addClass('done'); 
    K++; 
    if (markerPos < 250 || K == 5) { 
    sym.$('.done').draggable('enable');  
    } 
} 
関連する問題