(Извините, если это дубликат, но я не думаю, что это)KineticJS - Скользящие 4000 плиток с Stage.draggable
Только так вы знаете, я использую Google Chrome 29.0.1547.66 м ,
У меня есть KineticJS Проект происходит в тот момент, когда строит черепичную «шахматную» карту 40 x 100 плиток. Карта занимает около 500 мс для рендеринга, что хорошо. Все 4000 плиток были помещены на один слой.
После того, что закончил, я пытаюсь перетащить на сцену, но я получаю очень плохую работу, как он пытается переместить все 4000 плиток сразу. Речь идет о 160 мс времени процессора.
Я попытался ломать каждую строку вверх в свой собственный отдельный слой в others suggested, но сделал это еще хуже (620ms процессорного времени), как это должно было переместить каждый слой отдельно.
Я бы не сказал, что я очень хорошо разбираюсь в JavaScript, но я не вижу способа улучшить производительность перетаскивания, и я провел некоторое исследование спуска.
Возможно, cachingвесь слой или что-то может сработать?
Проект до сих пор имеет довольно много кода, так что я просто хочу, чтобы показать фрагменты:
//Stage Object
window.stage = new Kinetic.Stage({
container: element,
width: 800,
height: 600,
draggable: true
});
//Map Loop for create and position tiles
var tempLayer = map.addLayer(); //makes a new layer and adds it to stage etc.
for (var y = 0; y < height; y++) { //100 tiles high
for (var x = width-1; x > -1; x--) { //40 tiles wide
var tileImg = map._tiles[mapArray[x][y]-1]; //map._tiles is just an array of Kinetic.Image objects
if (typeof(tileImg) != "undefined"){
var tileClone = tileImg.clone();
map.place(x, y, 0, tileClone, tempLayer); //places tile in world scope positions
}
}
}
tempLayer.draw();
Если я не могу работать, как улучшить производительность, нет кто-то сможет запустить это, и проект должен быть binned, так что все мысли приветствуются! Благодаря!
Не могли бы вы дать нам рабочий jsfiddle, который воспроизводит проблему? – Tschallacka
Вам нужно взаимодействовать с плитами (кроме их перемещения)? Если нет, вы можете рассмотреть большое фоновое html-изображение, которое вы переместите с помощью CSS (или нескольких меньших фоновых изображений). Хотя Kinetic эффективен, 4000 отдельных объектов приносят много программных накладных расходов. – markE