2016-04-04 4 views
0

私はムービークリップシンボルを使用してアニメーションCCにドラッグアンドドロップ操作を構築しようとしています。目標はドロップ領域にドロップされたときにアニメートすることです。私は見ましたが、スプライトシートを実装していませんが、良いアイデアのようです。ドラッグ&ドロップでドロップを認識するためにAnimate CCを取得するにはどうすればよいですか?

しかし、私の質問は、発生したときにドロップを認識するようにすることに、より基づいています。私はこれを得るまで、スプライトシートのアイデアをテストすることはできません。 私はこれのような一連のチュートリアル、hereを見てきました。ちょうどthis oneを編集してアニメーションCCまたは他のオブジェクトのシンボルを処理しています。それは私に道のりの良いビットを持っていますが、それはドロップであまりにもうまく動作していません。私はドラッグテーブルを拾うことはできますが、マウスを離してもマウスから降りることはできません。

draggerは、私がドラッグしようとしているアニメーションのシンボルです(明らかでない場合に備えて)。

//refuses to release. doesn't recognize it. 
dragger.on("pressup", function(evt){  
    //lock position of thermometer and play stabby animation 
    dragger.x = dragger.x; 
    dragger.y = dragger.y; 

    if(intersect(evt.currentTarget, this.targetRight)){ //Intersection testing for good 
     alert("YAY you're right AND it works!"); 

    }else if(intersect(evt.currentTarget, this.targetWrong)){ //intersection Testing for bad 
     alert("BOO its wrong, but YAY it works"); 
    } 
    stage.update(evt); 
}); 

、その後、交差のための私のコード(チェックするためには、ドロップ領域の上の場合):

function intersect(obj1, obj2){ 
    var objBounds1 = obj1.getBounds().clone(); 
    var objBounds2 = obj2.nominalBounds.clone(); // <-----Changed this line 

    var pt = obj1.globalToLocal(objBounds2.x, objBounds2.y); 

    var h1 = -(objBounds1.height/2 + objBounds2.height); 
    var h2 = objBounds2.height/2; 
    var w1 = -(objBounds1.width/2 + objBounds2.width); 
    var w2 = objBounds2.width/2; 


    if(pt.x > w2 || pt.x < w1) return false; 
    if(pt.y > h2 || pt.y < h1) return false; 

    return true; 
} 
+0

デモを投稿できますか?あなたのコードはきれいですが、他に何が起こっているのかを見ずには分かりません。 – Lanny

+0

もちろん、ちょっと待ってください。 – Mike

+0

@Lannyここにリンクを貼ります:http://apersonnamedmike.github.io/drag-n-drop-demo/ マウス、それは鶏の青い四角の上にあるので、コードに含まれるアラートの1つを表示する必要がありますが、それは好きではないようです。 – Mike

答えて

1

がチェックアウト

dragger.on("pressmove", function(evt){ 
    evt.currentTarget.x = evt.stageX; 
    evt.currentTarget.y = evt.stageY; 
    stage.update(evt); 
}); 

この部分は私が考えるのトラブルを与えているものですデモが含まれていて、ドラッグを開始するとすぐにエラーが表示されます(インスペクタが開いているときにChromeで常に「エラー時にブレーク」トグルが表示されます)。

"pressup"ハンドラのスコープが設定されていないため、obj2が定義されていないためです。スコープを渡さないと、メソッドはグローバルスコープで呼び出されます。

var objBounds2 = obj2.getBounds().clone(); // Error! 

あなたは簡単にon()メソッドにスコープを渡すことによってこの問題を解決することができます。これにより、thisが現在のスコープを参照するようになります。

dragger.on("pressup", function(evt){ //this function will be very custom, always 
    //lock position of thermometer and play stabby animation 
    dragger.x = dragger.x; 
    dragger.y = dragger.y; 

    if(intersect(evt.currentTarget, this.targetRight)){ //Intersection testing for good 
     alert("YAY you're right AND it works!"); 

    }else if(intersect(evt.currentTarget, this.targetWrong)){ //intersection Testing for bad 
     alert("BOO its wrong, but YAY it works"); 
    } 
    stage.update(evt); 

}, this); // <-------------------- Only thing I changed 

Iスコープを渡すために、on()方法に3番目のパラメータを追加しました。それはそのエラーを解決し、あなたの問題を解決するかもしれません。

乾杯、

+0

ありがとう、私はそれが助けたと思うが、今それは、指定されていないので、geBounds()がobj2で動作していないことを具体的に教えている。私はthis.TargetRightを取得すると、それは私のプロジェクトのインスタンスとして認識していないので、私はそれを推測している? – Mike

+0

'targetRight'とは何ですか?形状であれば、境界を持たないかもしれません。 – Lanny

+0

ええ、それはムービークリップに変身した形です。デモでは、青い四角形の1つです。 targetWrongは同じ取引です – Mike

関連する問題