Sto creando un gioco in javascript e il mio gameloop si chiama ogni 30ms, perde molta memoria in quanto il task manager mostra l'utilizzo della memoria di Firefox per aumentare di 400mb in circa 20 secondi. Non ho familiarità con come assicurarsi che la memoria sia raccolta in javascript.sul loop di gioco
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);
Ok ho commentato un qualche codice e hanno trovato la riga all'origine, la sua
ship.ship.rotate (angolo); Dopo aver commentato che line out javascript sta usando 4500K. qualsiasi idea del perché questo sta causando il problema, e come posso ancora ruotare il mio oggetto senza questo bit di codice?
Qual è la definizione di 'Player'? –
non c'è nulla che possa fuoriuscire, certamente niente che potrebbe perdere quasi 1 MB/loop. Che ne dici di mostrare il codice che in realtà _ fa qualcosa? per esempio. l'animazione di movimento? Come ora, stai solo cambiando "ship.angle',' thrust' e 'vel' e non facendo nulla con loro. –
Quale versione di Firefox? Prima di 7.0 FF farebbe un GC solo se raggiunge un limite superiore fisso di RAM ... –