Это довольно простое решение:
- Измерьте расстояние между мышью и объектом при нажатии
- Смещение новой позиции на эту сумму.
EaselJS имеет приятные свойства localX
и localY
для событий мыши, которые автоматически дают globalToLocal()
для события мыши, чтобы вы знали, где в текущей цели был нажат объект. Вы можете сохранить эти значения для использования в качестве смещения:
var offset = new createjs.Point();
perso.addEventListener("mousedown", function(e) {
offset.setValues(e.localX, e.localY);
});
Обратите внимание, что я использовал Point с setValues
, поскольку он немного чище, чем объект с x / y подпорками.
Затем просто вычтите это значение из stageX, когда вы делаете нажатие
.
function dragCon(evt) {
var x = evt.stageX - offset.x;
evt.currentTarget.x = Math.max(bounds.x, Math.min(bounds.x + bounds.width, x));
}
Вот скрипка: https://jsfiddle.net/3my1wn4v/
Надеюсь, это поможет!