Я программирую 2D-игру HTML5 с использованием EaselJS, которая выглядит как симулятор планеты/гравитации, и я решил проследить движение/орбиту планеты с помощью линии, которая следует за каждой планетой, когда она движется. Вот быстрый GIF демонстрация:Рисование нескольких произвольных строк чрезмерно дорогостоящее EaselJS
Проблема: если я создаю строку в потиковое полотно идет полностью медленно (потому что это жеребьевкой линий на каждом тике, что дорого), так что я переместил дорогой код в setInterval
с интервалом 250 мс между циклами, и проблема сохраняется, потому что, когда есть много фигур, она создаст много строк для каждого цикла. Кроме того, если я просто добавлю больше времени между каждым циклом, результат начнет выглядеть ... Minecraft-ish.
Я не имею ни малейшего представления о том, как решить эту проблему, так как все, что я могу думать будет включать в себя создание много линий на каждом цикле. Я попытался использовать кеш, но кеширование этих крошечных подробных строк просто заставило их исчезнуть в конечных кэшированных изображениях, и поскольку проблема заключается не в обновлении строк, а в создании новых, я думаю, что кеширование ничего не сделает для меня.
Вот соответствующий код:
setInterval(function() {
allObjs.forEach(function(obj1) {
if (typeof obj1.xpast !== "undefined" || typeof obj1.ypast !== "undefined") {
var trail = new createjs.Shape();
trail.graphics.s("#fff").ss(1, "round").moveTo(obj1.xpast + .5, obj1.ypast + .5).lineTo(obj1.x + .5, obj1.y + .5);
trail.alpha = 0.25;
stage.addChild(trail);
setTimeout(function() {
createjs.Tween.get(trail).to({
alpha: 0
}, 1000).call(function() {
stage.removeChild(trail);
});
}, 10000);
}
obj1.xpast = obj1.x;
obj1.ypast = obj1.y;
});
}, 750);
К сожалению, я не могу поставить свой код в JSFiddle в данный момент.
Я не знал, что я мог бы просто добавить новые векторы в один и тот же кеш раньше, используя композитную операцию «источник-оверлей». Спасибо, Лэнни. :) –
Lanny, должен ли я очищать инструкции Graphics для каждого кеша вектора I? –
Очистите графику в любое время, когда вы уже нарисовали ее в кеше.В противном случае он снова переопределит эти инструкции. – Lanny