Я хочу использовать KineticJS как холст для рисования, и он отлично работает на настольных браузерах, но очень вялый на мобильных браузерах. Прямо сейчас я просто постоянно нажимаю на слой, когда мышь перемещается, и устанавливая новые точки в линию маркера.Ускорение моего холста с рисунком KineticJS на мобильном телефоне
Что я могу сделать, чтобы оптимизировать скорость на этом немного больше, не теряя гладкости рисунка?
var stage;
var input;
var marker;
var points = [];
function initialize() {
stage = new Kinetic.Stage({
container: 'container',
width: $(window).width(),
height: $(window).height()
});
input = new Kinetic.Layer();
stage.add(input);
marker = new Kinetic.Line({
stroke: 'red',
strokeWidth: 16,
lineCap: 'round',
lineJoin: 'round'
});
input.add(marker);
stage.on('mousedown touchstart', handleMouseDown);
stage.on('mouseup touchend', handleMouseUp);
}
function handleMouseDown() {
points = [];
stage.on('mousemove touchmove', handleMouseMove);
}
function handleMouseMove() {
points.push(stage.getPointerPosition());
marker.setAttr('points', points);
input.draw();
}
function handleMouseUp() {
stage.off('mousemove touchmove');
}
Это хорошая альтернатива, но разве это не устраняет непосредственную и «гладкость рисования»? – projeqht
Я слышу вас, друг мой, но ... Я читал OP, говоря «Ускорение ...», «очень вяло», «оптимизируйте скорость». Эта схема кодирования поможет с потребностью в скорости, выбирая несколько дорогих ничьих в 1 эффективную ничью. Этот код не выполняет сглаживания строк, но он дает мобильному процессору больше времени для прослушивания mousemoves. Мобильный процессор может собирать больше точек данных и, следовательно, производить более плавный результат. У меня есть код, который сглаживает пути, разбивая точки, но мой опыт показывает, что эти вычисления сплайнов представляют свои собственные проблемы с производительностью на мобильных устройствах. – markE
Я согласен, что это определенно сохранит некоторую вычислительную мощность, так как вызов handleMouseMove скорее всего облагается налогом. Одна из проблем, которую я вижу, - это то, что я нацелен на мобильные устройства, и у Android есть некоторые известные проблемы, когда setTimeout не работает стандартным образом на всех устройствах. – Josh