【发布时间】:2016-06-25 18:41:53
【问题描述】:
所以我用 HTML 和 Javascript 在画布上创建了一个游戏。我想制作一些飞扬的小鸟游戏,但是当我按下一个键时,玩家的动画看起来非常卡顿。看看:
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 像素。如果你想要动画,你想向上施加一个力,而不是直接向上平移;在这种情况下,两者之间没有动画。
-
好的,但是我如何给一些动画做广告呢? @SpencerWieczorek
-
@MartijnVenvande 您的问题重复实际上是一件好事:a)您无需等待即可找到所有相关的、已评分的答案,b)现在更多不同措辞的问题描述了相同的问题,增加第三方快速找到答案的可能性。因此,请考虑恢复您上次的编辑。
标签: javascript html animation canvas requestanimationframe