Я масштабирую свой холст, используя следующую функцию изменения размера:
function resize() {
var w, h;
var size = [1920, 1080];
ratio = size[0] / size[1];
if (window.innerWidth / window.innerHeight >= ratio) {
w = window.innerHeight * ratio;
h = window.innerHeight;
} else {
w = window.innerWidth;
h = window.innerWidth / ratio;
}
$('canvas').width(w);
$('canvas').height(h);
var scale = w/1920;
stage.scaleX = stage.scaleY = scale;
}
window.onresize = resize;
С HTML и CSS
<canvas width="1920" height="1080"></canvas>
<style>
canvas {
width: 1920px;
height: 1080px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
</style>
Это прекрасно работает для самой сцены, но масштабирование содержимого и позиции, кажется, смещаются и не работают.
Так что, если у меня позже будет:
some_container.y = 1000;
Это отрисовывается посередине на большом холсте, но когда я изменяю его размер, он приближается к вершине и, по-видимому, по крайней мере, тоже не пропорционален.
Так что, я думаю, мне нужно как-то применить такое же соотношение к позициям, но я просто не могу понять, что формула верна. Любая помощь будет оценена.
Этот пример (https://codepen.io/funktion/pen/JwwwBx), кажется, масштабируется и перемещается правильно.
Методом проб и ошибок я обнаружил, что проблема заключается в тикере ...
createjs.Ticker.addEventListener("tick", tick);
function tick(event) {
if (!event.paused) {
stage.update();
}
}
НО ... Мне нужен тикер для анимации. Любые мысли будут с благодарностью.