У меня есть две кнопки, которые позволяют увеличивать и уменьшать масштаб из моего холста анимацииКак масштабировать холст во время анимации?
<button id="zoomInButton">Zoom ++</button>
<button id="zoomOutButton">Zoom -- </button>
<canvas id="myCanvasmatchPage" >
Sorry, your browser doesn't support canvas technology
</canvas>
И у меня есть цикл анимации (пропущенный) с помощью setInterval и холст. Чтобы не было масштабирования, каждый setInterval должен быть вне цикла функции draw. Фактически ctx.scale сбрасывается при нажатии кнопки.
$('#myCanvasmatchPage').attr({width:100,height:200}).css({width:'100px',height:'200px'});
var canvas = document.getElementById("myCanvasmatchPage");
ctx = canvas.getContext("2d");
ctx.translate(0.5,0.5);
var nextFrame =0;
var animationData = [];
var canvasZoom = 1; //initial is scale 100%
var incrementZoom = 0.05;
$("#zoomInButton").click(function()
{
canvasZoom += incrementZoom;
ctx.scale(canvasZoom, canvasZoom);
});
$("#zoomOutButton").click(function()
{
if (canvasZoom > 1){//i dont want to allow a less than 100% scale zoom
canvasZoom -= incrementZoom;
ctx.scale(canvasZoom, canvasZoom);
}
});
var draw = function(){
//cannot set scale within animation loop! keeps resetting!
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(images['background'], 0, 0, 622, 924, 0, 0, 311, 462);
if (nextFrame<=animationData.length){
//animation loop
}else{
clearTimeout(draw);//get out of the loop
return;
}
nextFrame++;
}
setInterval(draw,200);
Мое текущее состояние этого кода заключается в том, что zoomIn 'works', но zoomOut doesn-t. Запись в консоли показала мне, что canvasZoom постоянно увеличивается и уменьшается на 0,05 (иногда 0,05000001 ха-ха), но холст не будет увеличиваться негативно.
Это заставляет меня думать, что проблема заключается в очистке холста, а не от масштабирования.
Вы намерены сделать что-то еще, кроме масштабирования (поворот/перевод/перекос)? – GameAlchemist
@GameAlchemist, на самом деле да, вращение, а также способ перемещения «центра пятна» анимации. – Gamemorize