cod*_*ght 5 javascript memory-leaks raphael game-loop
我在javascript中创建一个游戏,我的游戏循环每隔30ms被调用一次,它会泄漏大量内存,因为任务管理器显示firefox内存使用量在大约20秒内增加400mb.我不熟悉如何确保在javascript中收集内存.
function GameLoop(tick) {
move(player1.ship);
}
function Player(name) {
this.id = 0;
this.name = name;
this.ship = Ship(this);
}
function Ship(player) {
this.pos = [1024/2, 768/2];
this.vel = [0, 0];
this.angle = 0;
this.acc = 0;
this.thrust = 0;
this.west = 0;
this.east = 0;
this.turnRate = 5;
this.player = player;
this.size = [40, 40];
this.ship = canvas.rect(this.pos[0], this.pos[1], this.size[0], this.size[1]);
this.ship.attr("fill", "red");
return this;
}
function move(ship) {
var angle = ship.angle;
var max_speed = 20;
var acc_speed = 300;
var acc = 0;
if (ship.thrust) {
acc = 0.25 * acc_speed;
}
else { //slow down
if ((acc - (0.25 * acc_speed)) > 0) {
acc -= 0.25 * acc_speed;
}
else {
acc = 0;
}
}
var speedx = ship.vel[0] + acc * Math.sin(angle);
var speedy = ship.vel[1] - acc * Math.cos(angle);
var speed = Math.sqrt(Math.pow(speedx,2) + Math.pow(speedy,2));
var speedx = ship.vel[0] + acc;
var speedy = ship.vel[1] - acc;
var speed = speedx + speedy;
if (speed > max_speed) {
speedx = speedx / speed * max_speed;
speedy = speedy / speed * max_speed;
}
ship.vel = [speedx, speedy];
ship.pos = [ship.pos[0] + speedx * 0.25, ship.pos[1] + speedy * 0.25];
ship.ship.attr({x: ship.pos[0], y: ship.pos[1]});
ship.ship.rotate(angle);
ship.angle = 0;
delete this.thrust;
delete this.west;
delete this.east;
delete old_angle;
delete angle;
delete max_speed;
delete acc_speed;
delete acc;
delete speedx;
delete speedy;
delete speed;
return this;
}
var player1 = new Player("Player 1");
setInterval(GameLoop, 30);
Run Code Online (Sandbox Code Playgroud)
好吧,我注释掉了一些代码,并找到了违规行,它
ship.ship.rotate(角度); 评论该行后javascript使用4500K.任何想法导致问题的原因,如何在没有这些代码的情况下仍然可以旋转我的对象?
RaphaelJS 中的rotate文档说明如下:
将围绕给定点旋转给定角度添加到元素的变换列表中。
这听起来确实像是一个潜在的罪魁祸首。其中的关键词是add和list。
当你旋转一个元素两次时,变换函数会显示什么?我怀疑旋转的调用会积累越来越大的转换字符串。如果发生这种情况,您可以重置转换,
el.transform("");
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您所看到的问题。
归档时间: |
|
查看次数: |
578 次 |
最近记录: |