2016-11-07 15 views
1

私は行くよ基本的な機能がある...EaselJS:マウスダウンで子を追加で作成し、その位置に子を追加するために、ステージ上で

タップ(mousedown)を引き起こしました。

*編集:私はマルチタッチでも解決しようとしているので、同時に複数のボールを作成することもできます。

あなたが押さえている間に、その子供をドラッグして(pressmove)、(pressup)をリリースするまで(regx/regY/scaleX/scaleYを使用して)成長します。

私は何事も働いていますが、私は子供を追加することができず、ただちにmousedownを解放して再度押すことなく登録してください。

追加後に手動でmousedownをトリガーする方法はありますか、他の回避策が理にかなっていますか? dispatchEventは機能していないようです。

は、ここに私のステージイベントリスナーとタッチビットです:

  stage.enableMouseOver(10); 
      createjs.Touch.enable(stage, false, false); 
      stage.preventSelection = false; 
      stage.addEventListener("stagemousedown", spawnsnowball); 

そして、ここでは私の関数です。 spawnsnowballにはdisplayObjectというイベントリスナーが必死になっていますが、私がpressmoveとpressupを手に入れる唯一の方法は同じスノーボールを再びクリックすることです。 releasesnowball今すぐ('stagemouseup'リスナーを使用して)それらのすべてのインスタンスを解放しますが、pressupのトリガーを取得できる場合は、イベントターゲットだけを対象にするよう書き直します。

 function spawnsnowball(evt){ 
      var ball = new createjs.Bitmap(loader.getResult("snowball")); 
      ball.crossOrigin="Anonymous"; 
      ball.name="ball"; 
      ball.scaleX = 0.5; 
      ball.scaleY = ball.scaleX; 
      ball.regX = ball.image.width/2; 
      ball.regY = ball.image.height/2; 
      ball.x = evt.stageX; 
      ball.y = evt.stageY; 

      ball.type = balltype; 

      ball.holding = 1; 
      ball.velX = 0; 
      ball.velY = 0; 
      ball.addEventListener("pressup",releasesnowball); 
      ball.addEventListener("pressmove",dragsnowball); 
      ball.onPress = function(mouseEvent) {}; 
      stage.addChild(ball); 
      ball.dispatchEvent("mousedown"); 
      ball.dispatchEvent("pressdown"); 

     } 

     function dragsnowball(evt){ 
      evt.target.x = evt.stageX; 
      evt.target.y = evt.stageY; 
     } 

     function releasesnowball(evt){ 
      for(var i=0;i<stage.getNumChildren();i++){ 
       var shape = stage.getChildAt(i); 
       if(shape.type == balltype){ 
        if(shape.holding){ 
         shape.holding = 0; 
         var dX = shape.x - shape.oldX; 
         var dY = shape.y - shape.oldY; 
         if(Math.abs(dY)>8) 
          dY = 8*dY/Math.abs(dY); 
         if(Math.abs(dX)>3) 
          dX = 3*dX/Math.abs(dX); 

        } 
       } 
      } 
     } 

答えて

0

pressmoveイベントが、それは基本的に最後mousedownイベントのターゲットをオフに格納するため、特別で、その後、pressmovepressupイベントのためにそれを覚えています。

これは、マウスイベントを強制して実際にイベントを偽造することはできないことを意味します。ターゲットからマウスイベントをディスパッチしても、そのトリックは実行されません。

代わりに、最初のドラッグを手動で処理することを検討してください。あなたがstagemousemoveイベントをリッスンし、それを自分で処理することができますので、あなたはすでに、あなたがpressmoveのターゲットになりたいものを知っている:ここで

// Listen to the stagemousemove and manually call the event. 
    var initialDrag = stage.on("stagemousemove", function(event) { 
    event.target = ball; // Re-target the event so your other method works fine. 
    dragsnowball(event); 
    }); 

// When done, remove the move listener. 
// The off() method supports a "once" parameter so you don't have to unsubscribe that listener. 
    stage.on("stagemouseup", function(event) { 
    stage.off("stagemousemove", initialDrag); 
    }, null, true); // Fires one time 

をベースとして、あなたのコードを使用して迅速なサンプルです:http://jsfiddle.net/3qhmur82/

デモには役に立つと思われるコメントもいくつか追加しました。

希望に役立ちます!

+0

ありがとうございました!私はマルチタッチのために解決しようとしています(私はちょうど行って、すべての "ボール型"の子供を見つけて、それらをstagemouseupですべてリリースした同様のソリューションを持っていました)。 それは、私が車輪を回転させていることについてのいくつかの本当に素晴らしい洞察だ。ありがとうございました! – Shoany

関連する問題