Here is a sample.
Preview:
https://bit.ly/4j6NThy
JavaScript code:
const root = this;
let spawnedItem;
function main()
{
createjs.Touch.enable(stage);
stage.mouseMoveOutside = true;
root.stop();
root.menu.children.forEach(child => child.mouseChildren = false);
root.menu.on("mousedown", menuDown);
root.menu.on("pressmove", menuMove);
root.menu.on("pressup", menuUp);
root.map.on("mousedown", mapDown);
root.map.on("pressmove", mapMove);
}
function menuDown(e)
{
spawnedItem = new e.target.constructor();
spawnedItem.x = e.currentTarget.x + e.target.x;
spawnedItem.y = e.currentTarget.y + e.target.y;
spawnedItem.mouseChildren = false;
root.addChild(spawnedItem);
setDrag(spawnedItem);
}
function menuMove()
{
drag(spawnedItem);
}
function menuUp(e)
{
var dropPoint = { x: spawnedItem.x, y: spawnedItem.y };
if (root.mapRec.hitTest(dropPoint.x - root.mapRec.x, dropPoint.y - root.mapRec.y))
{
root.map.addChild(spawnedItem);
spawnedItem.x = dropPoint.x - root.map.x;
spawnedItem.y = dropPoint.y - root.map.y;
}
else
root.removeChild(spawnedItem);
spawnedItem = null;
}
function mapDown(e)
{
setDrag(e.target);
}
function mapMove(e)
{
drag(e.target, root.mapRec.nominalBounds);
}
function setDrag(target)
{
target.offset =
{
x: stage.mouseX / stage.scaleX - target.x,
y: stage.mouseY / stage.scaleY - target.y
};
}
function drag(target, dragArea)
{
target.x = stage.mouseX / stage.scaleX - target.offset.x;
target.y = stage.mouseY / stage.scaleY - target.offset.y;
if (dragArea)
{
target.x = clamp(dragArea.x, target.x, dragArea.x + dragArea.width);
target.y = clamp(dragArea.y, target.y, dragArea.y + dragArea.height);
}
}
function clamp(min, value, max)
{
if (value < min)
return min;
if (value > max)
return max;
return value;
}
main();
Download / source / files:
https://bit.ly/3W9A6wy
Regards,
JC