使用 JavaScript 访问 CSS 样式太慢
Accessing CSS styles with JavaScript is too slow
我正在使用 JavaScript 创建一个简单的重力物理游戏。当我意识到我可能做错了什么时,我几乎没有开始,因为它非常慢。
我使用圆形 html div 元素作为行星,使用小 div 元素作为球(这是一个迷你高尔夫游戏)。我的代码如下所示:
function Ball([x, y, r]) {
this.b = document.createElement("DIV");
this.b.className = "ball";
this.b.style.width = r * 2 + "px";
this.b.style.height = r * 2 + "px";
this.b.style.left = x + "px";
this.b.style.top = y + "px";
this.start = [x, y];
this.v = [0, 0];
this.planets = levels.list[levels.currLevel][1];
// the above line just has the information for each planet
document.body.appendChild(this.b);
}
Ball.prototype.physics = function () {
var b = this;
var a = [0.25, -0.09];
this.planets.forEach(function (info) {
// change acceleration from each planet
});
b.v[0] += a[0];
b.v[1] += a[1];
b.b.style.left = (parseFloat(b.b.style.left) + b.v[0]) + "px";
b.b.style.top = (parseFloat(b.b.style.top) + b.v[1]) + "px";
setTimeout(function () {b.physics();}, 30);
}
主要问题似乎是我正在以每秒 JavaScript 33 次的速度访问 CSS 属性。
我是一个相当新的程序员,所以如果有一种完全替代的方法来制作形状并在不处理 DOM 元素和 CSS 的情况下移动它们,我真的很想知道关于它!
使用requestAnimationFrame代替setTimeout会获得更好的性能。
顺便说一句,最好使用 canvas 到 运行 你的游戏,它的速度非常快。你可以看看 PIXI.js 或 EaselJS.
我正在使用 JavaScript 创建一个简单的重力物理游戏。当我意识到我可能做错了什么时,我几乎没有开始,因为它非常慢。
我使用圆形 html div 元素作为行星,使用小 div 元素作为球(这是一个迷你高尔夫游戏)。我的代码如下所示:
function Ball([x, y, r]) {
this.b = document.createElement("DIV");
this.b.className = "ball";
this.b.style.width = r * 2 + "px";
this.b.style.height = r * 2 + "px";
this.b.style.left = x + "px";
this.b.style.top = y + "px";
this.start = [x, y];
this.v = [0, 0];
this.planets = levels.list[levels.currLevel][1];
// the above line just has the information for each planet
document.body.appendChild(this.b);
}
Ball.prototype.physics = function () {
var b = this;
var a = [0.25, -0.09];
this.planets.forEach(function (info) {
// change acceleration from each planet
});
b.v[0] += a[0];
b.v[1] += a[1];
b.b.style.left = (parseFloat(b.b.style.left) + b.v[0]) + "px";
b.b.style.top = (parseFloat(b.b.style.top) + b.v[1]) + "px";
setTimeout(function () {b.physics();}, 30);
}
主要问题似乎是我正在以每秒 JavaScript 33 次的速度访问 CSS 属性。
我是一个相当新的程序员,所以如果有一种完全替代的方法来制作形状并在不处理 DOM 元素和 CSS 的情况下移动它们,我真的很想知道关于它!
使用requestAnimationFrame代替setTimeout会获得更好的性能。 顺便说一句,最好使用 canvas 到 运行 你的游戏,它的速度非常快。你可以看看 PIXI.js 或 EaselJS.