Я пишу приложение JavaScript, которое рисует объекты произвольной формы на холсте HTML. Пользователь должен иметь возможность выбирать любой из объектов, нажимая на них.HTML Canvas: тест щелчка мыши с помощью призрачного холста - проблемы с сглаживанием
Чтобы сделать это операцией O (1), я использую теневой холст, т. Е. Не отображаемый холст, который имеет точно такой же размер, где также нарисован каждый объект, нарисованный на обычном холсте, но с цветом который представляет собой ID
.
Таким образом, простой ghostContex.getImageData()
вместе с координатами щелчка мыши дает мне цвет в этом пикселе и, следовательно, ID
объекта.
Все это работает нормально - за исключением случаев, когда я нажимаю на точную границу объекта.
Как нарисовано с сглаживанием на холсте призрак, я получаю неправильный цвет (так как этот цвет представляет собой смесь между правильным ID
и ID
объекта под ним, который был нарисован до ...). Это неправильный цвет, представляющий неправильный ID
и, таким образом, я выбрать совершенно другой объект :(
Как я могу решить эту проблему
Примечание # 1: Я уже с помощью перевода (0,5, 0,5) трюк, чтобы предотвратить большинство сглаживания
Примечание № 2: Я пытался написать это приложение с помощью SVG раньше, но особенно этот выбор объекта был очень медленным, так как я предполагаю, что для обнаружения столкновений было слишком много объектов. Это основная причина почему я хочу использовать O (1) сейчас ... О, и таким образом я могу легко нарисовать гораздо большую линию на холсте призрак, чем линия нарисована на обычном холсте, чтобы сделать сбор намного проще.
N ote # 3: Релевантными браузерами являются Firefox, Chrome, Android 2.3+ родной и родной iOS
Время от времени я разочаровался в медленной скорости попадания SVG, которую я могу использовать, чтобы использовать скрытый холст (возможно, читал его где-то). Это было несколько месяцев назад. Когда я снова начал свои усилия и приступил к его внедрению в рамках проблем сглаживания, которые я исследовал в Интернете, - и там я наткнулся на вас, старое учебное пособие. Так я получил (по крайней мере?), Как назвать это оттуда - спасибо! – Chris