2

私は小さなゲームに取り組んでいます。このゲームでは、災害が頻繁に発生する必要があります。この災害は、メインフレーム要素を揺るがし、クラス .House を持つすべての要素を建物配列と DOM から削除する必要があります。

このコードはある程度機能しますが、問題は要素を DOM から削除せず、配列からのみ削除することです。それを機能させるのを手伝ってもらえますか?このサイトを初めて使用するので、関連するものを除外していないことを願っています。

setInterval(function() {

    var iDisasterChance = getRandomNumber(1, 12);

    if (iDisasterChance === 1)
    {
        $(".MainFrame").effect("shake", {times: 8}, 4000);
        //$(".House").effect("explode", {pieces: 24}, 4000);
        $(".House").effect("explode", {pieces: 24}, 4000,  $(".House").remove); // TODO: bug - leaves elements in the dom
        //$(".House").remove();
        oCity.aBuildings.length = 0;
        console.log(iDisasterChance +' of 12');
        console.log('*** DISASTER ! AVOIDED ***');
        console.dir(oCity.aBuildings);
        return false;
    }
    else
    {
        console.log(iDisasterChance +' of 12');
        console.log('*** DISASTER AVOIDED ***');
    }
}, 10000);
4

2 に答える 2

5

この方法を試してください。remove メソッド内で jquery オブジェクトのコンテキストが失われるため、コールバックで実行する必要はありremove()ません。remove

$(".House").effect("explode", {pieces: 24}, 4000,  function(){
    $(this).remove(); //now this will get executed once your animation effect is complete and this represents the .House where the effect happened.
});

removeすべての .House が必要な場合は、そうする必要があります。

$(".House").effect("explode", 
                              {pieces: 24}, 4000, 
                              $(".House").remove.bind($(".House"))); //bind will set the context to that of .House.

また

   $(".House").effect("explode", {pieces: 24}, 4000,function(){
          $(".House").remove();
   });

あなたがするときの理由:

$(".House").effect("explode", {pieces: 24}, 4000,  $(".House").remove));

OfCourseremoveメソッドはコールバックに設定され、おそらくコンテキストのコンテキストで設定されDOMelementますjquery object(通常のコールバックで見られるようにthis、DOM 要素として取得され、remove メソッドの jquery バージョンはありません)。function.bindしたがって、コンテキストをバインドするか$.proxy、コールバックでそれを行うために使用できます。

于 2013-09-27T17:45:03.507 に答える
-1

この関数が動作する正確なコンテキストはわかりませんが、コードについて 2 つのことに気付きました。

  1. あなたが現在持っているポストエフェクト$('.House').removeコード$('.House').remove():

  2. あなたのifステートメントは、その2つのケースのうちの1つだけを返します。繰り返しますが、あなたが何をしようとしているのかわかりませんがreturn true;else節に a を入れたいと思うかもしれません。

これらの提案がお役に立てば幸いです。

于 2013-09-27T17:49:50.663 に答える