3

こんにちは Stackoverflow コミュニティ

小さなゲームを作ろうとしているときに、問題が発生しました。どういうわけか、複数の図形をフェードアウトしようとすると、それぞれ図形を含むグループがフェードアウトしないか、ブラウザがスタックオーバーフローを取得します。

問題を解決するために数時間試したので、あなたの助けが必要です。

私が作った小さなフィドルへのリンクはこちらです:http://jsfiddle.net/hnBPT/

ご覧のとおり、フェードアウトするノードとノードのレイヤーを必要とする関数 newFadeShapesOut() があります。ノードをグループに移動し、グループをフェードアウトします。どういうわけか、1 つまたは複数のシェイプがフェードアウトしないか、致命的なエラーが発生することがあります。

フェードアウト機能:

function newFadeShapesOut(shapes, layer, callback, speed){
    if(typeof(speed) == 'undefined'){
        speed = 1;
    }
    var g = new Kinetic.Group();
    console.log(layer.getChildren().length);
    console.log(shapes.length);
    layer.add(g);
    shapes.each(function(shape){
        shape.moveTo(g);
    });
    console.log(layer.getChildren().length);
    console.log(shapes.length);
    var tween = new Kinetic.Tween({
        node: g,
        opacity: 0,
        duration: speed,
        onFinish: function(){
            if(typeof(callback) != 'undefined'){
                callback();
                tween.destroy();
            }
        }
    }).play();
}

PS: Google Chrome をお勧めします。Firefox はクラッシュする傾向があります。

ご協力ありがとうございました。

編集: 申し訳ありませんが、忘れてしまいました。赤い四角をクリックしてスクリプトを有効にできます。

4

2 に答える 2

2

projeqht の機能を自分のやり方に曲げようと何度か試みた後、ついにやり遂げました! どういうわけか、グループをレイヤーに追加すると、コレクションの形状が自動的に更新されます! 代わりに配列を使用すると、機能します。

それが誰かを助けることを願っています!

だからここに私の魅力のように働く私の解決策があります。

function fadeShapesOut(shapes, callback, speed){
    layer = shapes[0].getLayer();
    if(typeof(speed) == 'undefined'){
        speed = 1;
    }
    var g = new Kinetic.Group();
    layer.add(g);
    for(i in shapes){ 
        shapes[i].moveTo(g);
    }
    var tween = new Kinetic.Tween({
        node: g, 
        opacity: 0, 
        duration: speed, 
        onFinish: function(){
            if(typeof(callback) != 'undefined'){
                callback();
            }
            tween.destroy();
        }
    }).play();
}

さらに質問がある場合は、私に連絡してください。

于 2013-08-06T08:47:54.553 に答える