Итак, я создавал игру на холсте в HTML и Javascript. Я хотел сделать какую-то флип-птичью игру, но когда я нажимаю клавишу, анимация игрока выглядит заикающейся. Посмотрите:Smooth Animation in HTML5 Canvas
body {
overflow: hidden;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="Style.css"/>
</head>
<body onload="startgame()">
<canvas id="canvas"></canvas>
<script>
canvas.height=window.innerHeight;
canvas.width=window.innerWidth;
function startgame() {
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var x = 900;
var y = 300;
var w = 25;
var h = 500;
var yperson = 20;
var xperson = 200;
document.addEventListener("keydown", function() {
yperson -= 150;
});
function updateperson() {
yperson = yperson;
}
setInterval(createobject, 10);
function createobject() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
x -= 1;
yperson += 0.5;
yperson *= 1.003;
ctx.fillStyle = "#009999";
ctx.fillRect(x,y,w,h);
ctx.fillStyle = "black";
ctx.fillRect(xperson,yperson,30,30);
if (x <= 50) {
if (yperson < 280 && xperson === x-30) {
x -= 1;
} else if (yperson > 280){
x += 1;
}
}
}
}
</script>
</body>
</html>
Я хочу, чтобы иметь гладкую анимацию вверх. Я видел, как некоторые люди говорили, что это должно быть сделано с requestanimationframe, но я не знаю, как его использовать.
Заранее спасибо.
Выглядит хорошо, но да, 'requestAnimationFrame' будет слегка сглаживаться из-за того, как он обновляет дисплей. –
Я знаю. @SpencerWieczorek Но когда вы нажимаете клавишу, человек становится очень быстрым без анимации. –
Вы просто перемещаете позицию на 150 пикселей. Если вы хотите анимацию, вы хотите применить силу вверх, а не напрямую переводить вверх; в этом случае между анимацией нет анимации. –