0

ムービー クリップ シンボルを使用して、Animate CC でドラッグ アンド ドロップ インタラクションを構築しようとしています。目標は、ドロップ エリアにドロップされたときにアニメーション化することです。私は見ましたが、そのためのスプライトシートを実装していませんが、それは良い考えのようです.

ただし、私の質問は、ドロップが発生したときにドロップを認識させることに基づいています。これを取得するまで、スプライト シートのアイデアをテストすることはできません。Animate CC やその他のオブジェクトでシンボルを処理するためにこれを編集しているだけの、こちらのようなチュートリアルをたくさん見てきました。かなりうまくいきましたが、ドロップではうまくいきません。ドラッグ可能なものをうまく拾うことができますが、マウスを離してもマウスを離すことができません。

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

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

この部分は、私が思う問題を引き起こしているものです:

//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;
}
4

1 に答える 1

1

含まれているデモをチェックアウトすると、ドラッグを開始するとすぐにエラーが発生します (インスペクターが開いているときは、Chrome で常に「エラー時にブレーク」トグルが設定されていることに注意してください)。

この問題は、「プレスアップ」ハンドラーがスコープ化されていないため、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

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

乾杯、

于 2016-04-04T22:56:21.003 に答える