Szukam najszybszego i najlżejszego sposobu przeciągania i upuszczania kształtów i ikonek na JS Canvas w celach związanych z tworzeniem gier.najczystszy kod Przeciągnij i upuść w Javascript Canvas
Zacząłem od sprawdzania odległości za pomocą aktualnej pozycji myszy i początków kół. Działa, ale kiedy się nakładają, mamy problemy i nie wiem, jak dobrze to będzie działać podczas testowania wielu duszków i innych kształtów jeszcze na każdej "ramce".
Wszelkie uwagi i wskazówki dotyczące lepszych metod są mile widziane!
Wolałbym nie korzystać z biblioteki takiej jak jQuery, ponieważ wybieram czystą szybkość i lekkość i oczywiście poznaję rzeczywiste metody! Oto gdzie jestem:
//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;
}
Myślisz o draggables UI jQuery (http://jqueryui.com/demos/draggable/). Nawet jeśli nie skorzystasz z jQuery, bardzo polecam sprawdzenie niezminijalowanej wersji i zobaczenie, co robią. Twórcy zdecydowanie przemyśleli niektóre z tych problemów z wydajnością. Ze względu na liberalną licencję prawdopodobnie można wyciąć mały fragment kodu. – buley
Możesz zajrzeć do [fabric.js] (https://github.com/kangax/fabric.js). Oto wersja demonstracyjna: http://kangax.github.com/fabric.js/stickman/ –