Estoy buscando la manera más rápida y más liviana de arrastrar y soltar formas y sprites en un lienzo JS para fines de desarrollo de juegos.código más limpio de arrastrar y soltar en JavaScript Canvas
Comencé haciendo comprobaciones de distancia usando la posición actual del mouse y los orígenes de los círculos. Funciona, pero cuando se superponen tenemos problemas y no sé qué tan bien funcionará cuando se prueben múltiples sprites y otras formas aún en cada 'frame'.
¡Se agradecen todos los comentarios o sugerencias para mejores métodos!
Prefiero no utilizar una biblioteca como jQuery ya que voy por la velocidad y la ligereza y, por supuesto, ¡para aprender los métodos reales! Aquí es donde estoy:
//add the canvas listeners and functions
canvas.addEventListener("mousemove",mousemove);
canvas.addEventListener("mousedown",mousedown);
canvas.addEventListener("mouseup",mouseup);
function mousemove(e){
mouseX = e.layerX - canvas.offsetLeft;
mouseY = e.layerY - canvas.offsetTop;
//for each circle stored in my array of Circle objects, is my mouse within its'
//bounds? If so, set the circles' (X,Y) to my mouse's (X,Y)
for(i=0;i<circArray.length;i++){
dx = mouseX - circArray[i].x;
dy = mouseY - circArray[i].y;
dist = Math.sqrt((dx*dx) + (dy*dy));
if(draggable && dist < circArray[i].r){
circArray[i].x = mouseX;
circArray[i].y = mouseY;
}
}
}
function mousedown(){
draggable = true;
}
function mouseup(){
draggable = false;
}
Estás pensando en las arrastrables de jQuery UI (http://jqueryui.com/demos/draggable/). Incluso si no va con jQuery, le recomiendo consultar una versión no miniaturizada y ver qué hacen. Los desarrolladores definitivamente han pensado en algunos de estos problemas de rendimiento. Debido a la licencia liberal, es probable que pueda cortar una pequeña parte de la base de código. – buley
Es posible que desee consultar [fabric.js] (https://github.com/kangax/fabric.js). Aquí hay una demostración: http://kangax.github.com/fabric.js/stickman/ –