Wykonałem samouczek, który wykorzystuje drugie niewidzialne płótno do wykonywania prób pobrania/trafienia. Narysuj wszystkie kształty, jeden po drugim, na drugim płótnie, aż jeden z nich będzie miał czarny piksel, w którym znajduje się położenie myszy. Wtedy znalazłeś swój obiekt!
Oto nieco z samouczka pisałem o wyborze przedmiotów z płótna:
// gctx is ghost context, made from the second canvas
// clear(gctx)
// ...
// run through all the boxes
var l = boxes.length;
for (var i = l-1; i >= 0; i--) {
// draw shape onto ghost context
drawshape(gctx, boxes[i], 'black', 'black');
// get image data at the mouse x,y pixel
var imageData = gctx.getImageData(mx, my, 1, 1);
var index = (mx + my * imageData.width) * 4;
// if the mouse pixel exists, select and break
if (imageData.data[3] > 0) {
mySel = boxes[i];
offsetx = mx - mySel.x;
offsety = my - mySel.y;
mySel.x = mx - offsetx;
mySel.y = my - offsety;
isDrag = true;
canvas.onmousemove = myMove;
invalidate();
clear(gctx);
return;
}
}
Moje pełne demo używa tylko prostokąty, ale w nowszej wersji użyję okręgi/ścieżki/tekst.
Jeśli chcesz zobaczyć wersję demo i mój pełny kod, to jest to here.
Dzięki. W końcu zrobiłem coś podobnego, chociaż pozostałem na płótnie zapisywania, nie robiąc żadnych pociągnięć i wypełnień podczas przerysowywania kształtów. – Brousselaine
@Simon Sarris Skorzystałem z twojego tutorialu, aby to zrobić: http://edumax.org.ro/extra/new/mindmap/ (użyj siatki jako mapy i kliknij prawym przyciskiem myszy dla menu) Próbuję również wybrać ścieżki za pomocą twoja metoda. Rozumiem, że masz samouczek na ten temat, ale czy jest jakiś sposób, aby dać nam wskazówkę na temat kilku podstawowych kroków, które podążysz? (specjalnie dla funkcji path .contains()) –
Niestety, prawie cały mój wolny czas spędzam właśnie na pisaniu książki. Wrócę do mojej serii samouczków prawdopodobnie pod koniec tego roku. Wybieranie ścieżek można wykonać za pomocą funkcji 'isPointInPath' kontekstu, ale należy zapisać wszystkie kroki potrzebne do utworzenia każdej ścieżki i załadować aktualną ścieżkę kontekstu za każdym razem, gdy trzeba przetestować. –