저는 행성/중력 시뮬레이터처럼 보이는 EaselJS를 사용하여 HTML5 2D "게임"을 프로그래밍하고 있으며 행성의 운동/궤도를 그것이 움직일 때 각 행성을 따라 간다.여러 임의의 선 그리기가 고가입니다. EaselJS
문제는 다음과 같습니다 : 나는 모든에서 선을 작성하는 경우 (비싼있는 모든 틱에서 라인을 많이 그리기 때문에) 캔버스가 완전히 천천히가는 눈금, 그래서 여기에 빠른 GIF 데모입니다 루프 사이에 250ms 간격으로 비싼 코드를 setInterval
으로 옮겼습니다. 모양이 많으면 루프 당 많은 선이 생기기 때문에 문제가 지속됩니다. 또한 각 루프 사이에 시간을 더 추가하면 결과가 보입니다 ... 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, 내가 캐시하는 모든 벡터에 대한 그래픽 명령을 지워야합니까? –
이미 캐시에 그릴 때마다 그래픽을 지우십시오.그렇지 않으면 명령을 다시 덮어 씁니다. – Lanny