Я пытаюсь установить «грязную зону» на холсте, чтобы предотвратить перекрашивание неподвижных объектов (фоновое изображение, статические элементы и т. Д.), Т. Е. Необходимо перерисовать только фон, окрашенный за движущимся игроком
РЕДАКТИРОВАТЬ: Как предложено, вот его jsfiddle http://jsfiddle.net/7kbzj/3/
Метод "update" там не работает, так что его moveSprite () можно запустить, нажав ссылку "Move Sprite"... По сути, зона клиппирования должна перемещаться на 10 пикселей вправо при каждом нажатии.Обтравочная маска остается в исходном положении, происходит только перекраска.Странно o_O
Поэтому, когда я инициализирую свой холст, после того, как фон закрашен, установите, я использую метод ctx.save ():
function init() {
canvas = document.getElementById('kCanvas');
ctx = canvas.getContext('2d');
ctx.fillStyle = "rgb(0,128,0)";
ctx.fillRect (0,0,320,240);
ctx.save();
setInterval(function () { update(); }, tpf);
}
Чтобы увидеть работы отсечения,нарисуйте другой цветной фон (синий) в области, которую я хотел обрезать ... результат плохой, только первая область обрезки закрашена синим: (
function update() {
setDirtyArea(x,y,w+1,h)
ctx.fillStyle = "rgb(0,0,128)";
ctx.fillRect (0,0,320,240);
x++;
// paint image
ctx.clearRect(x,y,w,h);
ctx.drawImage(imageObj, x, y);
}
function setDirtyArea(x,y,w,h) {
ctx.restore();
// define new dirty zone
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.clip();
}
Мне бы очень хотелось, чтобы голубая зона распространялась вправо от экрана ... помогите, пожалуйста, я не понимаю, в чем дело! Спасибо, Дж.