私は、練習のためだけに、初めて小さなゲームに取り組んでいます。そして、私のフィドルでわかるように、画面にたくさんの弾丸や敵がいると、しばらくするとフレームドロップが始まります。どういうわけかそれをキャッシュすることによってこれを減らす方法はありますか?
事前レンダリングについて何か読んだことがあります。しかし、私はKineticライブラリを使用しているので、これができることではないと思います。フレームドロップを減らすためのヒントとコツはありますか?または、KineticJSを使用して事前レンダリングする方法はありますか?
これが私のフィドルです:http://jsfiddle.net/3nEUv/3/
弾丸の描画は本当の取引破りだと思います:(フィドルの713行目)
function Enemybullet(destinationX, destinationY, enemySprite) {
this.id = 'enemyBullet';
this.x = enemySprite.getX()+(enemySprite.getWidth()/2);
this.y = enemySprite.getY()+(enemySprite.getHeight()/2);
this.damage = enemy.damage;
//The targetX and Y are compensated by the player width and height. Subtract or add the halve of the player accordingly
if (this.x > player.sprite.x) {
var targetX = (destinationX - this.x)-(player.sprite.getWidth()/2);
targetY = (destinationY - this.y)-(player.sprite.getHeight()/2);
} else {
var targetX = (destinationX - this.x)+(player.sprite.getWidth()/2);
targetY = (destinationY - this.y)+(player.sprite.getHeight()/2);
}
var distance = Math.sqrt(targetX * targetX + targetY * targetY);
this.velX = (targetX / distance) * enemyAttackSpeed;
this.velY = (targetY / distance) * enemyAttackSpeed;
this.finished = false;
this.sprite = new Kinetic.Circle({
x: this.x,
y: this.y,
radius: 2,
fill: 'black',
name: 'enemyProjectile'
});
this.draw = function(indexEnemy, indexBullet) {
var mayDelete = false;
this.x += this.velX;
this.y += this.velY;
this.sprite.setAbsolutePosition(this.x, this.y);
//console.log(this.sprite.getX());
if(collisionDetection(this, player) == true) {
player.collide(this);
mayDelete = true;
}
if (bulletLeftField(this.sprite) == true) {
mayDelete = true;
}
if (mayDelete == true) {
delete this;
this.sprite.remove();
//console.log(enemies[indexEnemy].bullets);
if (enemies[indexEnemy]) {
enemies[indexEnemy].bullets.splice(indexBullet, 1);
}
}
ammoLayer.draw();
}
}
前もって感謝します!