Javascript 当我创建许多对象时,kineticjs会变慢
我在使用javascript和kineticJs方面是新手。我有一个小问题,当我创建了许多对象时,动画会变慢。我以为我已经用.destory()删除了这些对象,但我想不是因为项目进展缓慢 这是我的密码:Javascript 当我创建许多对象时,kineticjs会变慢,javascript,performance,kineticjs,Javascript,Performance,Kineticjs,我在使用javascript和kineticJs方面是新手。我有一个小问题,当我创建了许多对象时,动画会变慢。我以为我已经用.destory()删除了这些对象,但我想不是因为项目进展缓慢 这是我的密码: var framesSegundo = 1000/20; //1000 seconds 20 frames var stage, fondo; var personaje; var intv; // calculate the time between one enemy and the ohe
var framesSegundo = 1000/20; //1000 seconds 20 frames
var stage, fondo;
var personaje;
var intv;
// calculate the time between one enemy and the oher one
var SegEneCreado = 0 ;
var layer = new Kinetic.Layer();
//Group with the chrachters
var grupoPersonajes = new Kinetic.Group({});
var grupoEnemigos = new Kinetic.Group({});
// screen create
var stage = new Kinetic.Stage({
container: 'game',
width: 960,
height: 640
});
//Level Create
function creaNivel(){
//creamos un personaje
personaje = new Kinetic.Rect({
width: 100,
height: 50,
x: 10,
y: stage.getHeight()/2,
fill: 'red'
});
grupoPersonajes.add(personaje);
layer.add(grupoPersonajes);
stage.add(layer);
}
//Create the enemies
function creaEnemigos(){
// we left the time of one second to create enother enemy
if (SegEneCreado <= 0){
if (aleatorio(0,1000)>970){
SegEneCreado = framesSegundo;
//create the enemies
var tipoEnemigo = parseInt(aleatorio(0,3));
if (tipoEnemigo == 0){
var enemigo = createEnemy(stage.getWidth() + 10, 0, 'green');
}
else if (tipoEnemigo == 1){
var enemigo = createEnemy(stage.getWidth() + 10, 0, 'blue');
}
else if (tipoEnemigo == 2){
var enemigo = createEnemy(stage.getWidth() + 10, 0, 'yellow');
}
else {
var enemigo = createEnemy(stage.getWidth() + 10, 0, 'C48BD9');
}
enemigo.setY(aleatorio(0,stage.getHeight() - enemigo.getHeight()));
grupoEnemigos.add(enemigo);
layer.add(grupoEnemigos);
stage.add(layer);
}
}
else{
SegEneCreado--;
}
}
function MoverEnemigos(){
for (i in grupoEnemigos.children){
var asset = grupoEnemigos.children[i];
asset.move(-5,0);
if (asset.getX() + asset.getWidth()<0){
console.log(asset.getX() + asset.getWidth()<0);
asset.move(0,0);
asset.remove();
}
}
}
//random value
function aleatorio(inferior, superior){
var posibilidades = superior - inferior;
var random = Math.random() * posibilidades;
random = Math.floor(random);
return inferior + random;
}
function createEnemy(x, y, color){
var enemy = new Kinetic.Rect({
width: 100,
height: 50,
x: x,
y:0,
fill: color
});
return enemy
}
creaNivel();
intv = setInterval(frameLoop,framesSegundo);
function frameLoop(){
creaEnemigos();
MoverEnemigos();
stage.draw();
}
var framesSegundo=1000/20//1000秒20帧
var阶段,fondo;
个人价值;
var-intv;
//计算一个敌人和另一个敌人之间的时间
var SegEneCreado=0;
var layer=新的动能层();
//与chrachters集团
var grupoppersonajes=新的动力学群({});
var grupoEnemigos=新的动力学群({});
//屏幕创建
var阶段=新的动力学阶段({
容器:“游戏”,
宽度:960,
身高:640
});
//级别创建
函数creaNivel(){
//个人奶油
personaje=新的动能.Rect({
宽度:100,
身高:50,
x:10,
y:stage.getHeight()/2,
填充:“红色”
});
grupoPersonajes.add(personaje);
layer.add(grupoppersonajes);
阶段。添加(层);
}
//制造敌人
函数creaEnemigos(){
//我们留下了一秒钟的时间来制造另一个敌人
if(SegEneCreado 970){
SegEneCreado=框架结构;
//制造敌人
var tipoEnemigo=parseInt(aleatorio(0,3));
如果(tipoEnemigo==0){
var enemigo=create敌军(stage.getWidth()+10,0,'green');
}
否则如果(tipoEnemigo==1){
var enemigo=create敌军(stage.getWidth()+10,0,'blue');
}
否则如果(tipoEnemigo==2){
var enemigo=create敌军(stage.getWidth()+10,0,'yellow');
}
否则{
var enemigo=create敌军(stage.getWidth()+10,0,'C48BD9');
}
setY(aleatorio(0,stage.getHeight()-enemigo.getHeight());
grupoEnemigos.add(enemigo);
添加图层(grupoEnemigos);
阶段。添加(层);
}
}
否则{
SegEneCreado——;
}
}
函数MoverEnemigos(){
对于(我在grupoEnemigos.儿童中){
var资产=grupoEnemigos.children[i];
资产变动(-5,0);
如果(asset.getX()+asset.getWidth()asset.remove
将使敌人离开画布,但不会摧毁敌人的物体
使用asset.destroy
移除敌人对象使用的资源
更有效的方法是“回收”你的敌人,而不是重新创建一个新的敌人:
当敌人离开舞台时,将其X属性设置为-100以指示其处于非活动状态
function MoverEnemigos(){
for (i in grupoEnemigos.children){
var asset = grupoEnemigos.children[i];
if(asset.x()==-100){
// enemy is inactive, do nothing
}else{
// enemy is active
asset.move(-5,0);
if (asset.getX() + asset.getWidth()<0){
// enemy is offstage so make enemy inactive
asset.x(-100);
}
}
}
function createEnemy(x, y, color){
// see if there is an inactive enemy to reuse
for (i in grupoEnemigos.children){
var asset = grupoEnemigos.children[i];
if(asset.x()==-100){
// this enemy is inactive, reuse it
asset.x(x);
asset.y(0);
asset.fill(color);
// this enemy is already in groupoEnemigos so don't add it
// Don't add it again in creaEnemigos
return(asset);
}
}
// no available inactive enemy so create a new enemy
var enemy = new Kinetic.Rect({
width: 100,
height: 50,
x: x,
y:0,
fill: color
});
// this enemy is not in groupoEnemigos so add it
grupoEnemigos.add(enemy);
return enemy
}