javascript - 使用 requestAnimationFrame 的简单球动画 HTML5

标签 javascript html animation

我刚刚开始尝试使用 HTML5 和 JavaScript 制作一些动画。 目前我已经为球创建了一个 JavaScript 类。它有一个更新函数来更新球的位置,还有一个绘制函数来绘制球:

 /*global Vector*/
var Ball = (function () {
function Ball(pPostion) {
    this.setPosition(pPostion);
}

Ball.prototype.getPosition = function () {
    return this.mPosition;
};
Ball.prototype.setPosition = function (pPosition) {
    this.mPosition = pPosition;
};
Ball.prototype.draw = function (pContext) {
    pContext.save();
    pContext.beginPath();
    pContext.arc(100, 100, 20, 0, Math.PI * 2, true);
    pContext.closePath();
    pContext.fillStyle = '#ff0000';
    pContext.stroke();
    pContext.restore();
};

Ball.prototype.update = function () {
    this.getPosition().add(new Vector(10, 0));
};

return Ball;
}());

在我的主要部分中,我创建了以下方法:

function ballGameLoop() {
    ball.draw(mainContext);
    ball.update();
    requestAnimationFrame(ballGameLoop);
}

当被调用时,它确实会吸引球,但它似乎根本没有移动。我没有特定类型的方式让球具有动画效果,任何类型的运动都可以。谁能就我可能出错的地方提出任何建议?

最佳答案

从表面上看,您似乎只是在同一坐标处一遍又一遍地绘制圆弧(中心位于(100,100))。

将球的位置纳入其中将是使渲染位置依赖于对象位置的方法。从表面上看,类似以下内容的东西会产生运动:

Ball.prototype.draw = function (pContext) {
    var coordinates = this.getPosition();
    pContext.save();
    pContext.beginPath();
    pContext.arc(coordinates.X, coordinates.Y, 20, 0, Math.PI * 2, true);
    pContext.closePath();
    pContext.fillStyle = '#ff0000';
    pContext.stroke();
    pContext.restore();
};

我当然假设你如何设置 Vector 对象,所以我猜测 x 和 y 可以分别通过 (Vector).X 和 (Vector).Y 访问。

无论如何,这只是我的方法。

关于javascript - 使用 requestAnimationFrame 的简单球动画 HTML5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41043646/

相关文章:

javascript - 如何解析routeProvider中的参数

ios - 如何在 iOS 上显示动画之前正确设置网络超时?

javascript - 正则表达式获取两个字符串之间的所有字符串

javascript - 用元素替换 TextNode 中间的文本

javascript - 强制元素具有相同的边界(单独的内联 block / float :left; clear:right doesn't work)

jquery - 如何纠正字体调整按钮对齐方式

html - 自定义字体龙虾在 IE 中不起作用

android - 如何将位图从一个坐标移动到另一个坐标 - Android 开发

javascript - 如何使用 Google 图表动画制作数值动画?具体是仪表

javascript - 有没有办法处理 Redux 中派生数据的昂贵计算?