Javascript 在setInterval内创建精灵

Javascript 在setInterval内创建精灵,javascript,code.org,Javascript,Code.org,使用setInterval函数,我试图使用javascript在code.org上每秒创建一次sprite,因此我的第一个代码版本如下 setInterval(函数(){ createSprite(200200,20,20) }, 1000) 我的问题是,将setInterval放在Draw函数中会导致它无法正常工作,并且每隔一秒钟就会创建一个精灵,当setInterval未放入函数Draw时,它也不会像我想要的那样绘制精灵 我尝试过的一种解决方案是将Draw函数放入setInterval中,

使用
setInterval
函数,我试图使用javascript在code.org上每秒创建一次sprite,因此我的第一个代码版本如下

setInterval(函数(){
createSprite(200200,20,20)
}, 1000)
我的问题是,将
setInterval
放在
Draw
函数中会导致它无法正常工作,并且每隔一秒钟就会创建一个精灵,当
setInterval
未放入函数
Draw
时,它也不会像我想要的那样绘制精灵

我尝试过的一种解决方案是将
Draw
函数放入
setInterval
中,但它无法识别,并给出错误消息
“Draw已定义,但未在程序中调用”

是否有一种不同版本的
setInterval
Draw
函数内部工作,一种将
Draw
成功放置在
setInterval
内部的方法,一种即使在
Draw
外部也能显示精灵的方法,或者解决此问题的不同方法

具体来说,我要寻找的是每秒创建一个精灵,让它显示在屏幕上,能够在每次生成新精灵时为每个精灵选择不同的速度,并且能够将此函数放入if函数中,并且仍能按预期工作

下面显示了一段显示部分工作的代码:

它的工作原理是每秒生成一个精灵,但如果我尝试为其中一个生成的精灵指定速度,它只对第一个精灵有效,如下所示:


我认为解决问题的唯一方法是声明一个类,然后在setInterval函数中创建这个类的精灵,但我不知道具体怎么做。

所以我认为您的问题是精灵只在一秒钟后生成,对吗

如果是,请尝试以下方法:

createSprite(200200,20,20);
setInterval(function(){createSprite(200200,20,20)},1000);

所以我认为您的问题是精灵只在一秒钟后生成,对吗

如果是,请尝试以下方法:

createSprite(200200,20,20);
setInterval(function(){createSprite(200200,20,20)},1000);
参见注释:

//只是一个生成随机速度的辅助函数
函数random_在_范围内(min,max){返回Math.floor(Math.random()*(max-min+1))+min}
var monster=createSprite(200200,20,20);
monster.velocityX=5;
setInterval(函数(){
//因为您需要为新创建的精灵设置速度
//您需要将此精灵作为变量
var fireball=createSprite(monster.x,monster.y,4,4);
//现在你可以设置它的速度
fireball.velocityX=在(1,6)范围内的随机_;
//基本上就是这样。
//因为你不用“火球”做任何事
//你可以忘记它,你不需要把它保存在任何地方
}, 1000);
函数绘图(){
背景(“白色”);
createEdgeSprites();
怪物。反弹(边缘);
drawSprites();
}
使用工作代码的


看看您的原始代码和您的问题,我认为您可能对JS有一些基本的误解(如果我判断错误,请原谅)。在代码注释中解释了它们。我还添加了一些行来说明我的观点:

var spawner=createSprite(200200,20,20);
var memory_spawner=spawner//已添加
//创建新精灵后,它不会更改“spawner”变量
createSprite(150200,15,15).velocityY=3;//补充
log(记住_spawner==spawner)//添加//您看到它是一样的
//您需要将新创建的精灵指定给一个变量
//您可以将其视为:
//我需要给他们起不同的名字,这样他们才能明白我要带谁去
//如果你不说出他们的名字,他们根本不会听你的
var spawner2=createSprite(100200,10,10);//补充
spawner2.velocityY=1//添加//现在您可以更改另一个精灵的速度
console.log(spawner!==spawner2)//添加//它是另一个精灵
//var thing_to_be_sprowned=createSprite(sprowner.x,sprowner.y,4,4);
//你可能不需要这个。你也不用这个变量。
//该精灵与产卵者同时创建。
//但是如果你需要它,并且你想让它移动-改变它的速度(thing_to_be_sprowned.velocityX=something)而不是sprowner的速度
//如果您将传递给setInterval的函数命名为
//叫它,而不是重复它。像这样:
//函数fire(){…}//定义函数
//fire()//调用函数
//setInterval(fire,1000)//每秒调用一次函数
setInterval(函数(){
console.log(“此函数每秒执行一次”)//已添加
console.log(“Fire!”)//已添加
createSprite(spawner.x,spawner.y,4,4);
console.log(“完成”)//已添加
},1000);
console.log(“下一行只执行一次”)//添加
产卵器速度=5;
//它放在setInterval()之后的事实确实意味着
//它将在调用setInterval()后执行
//但这并不意味着它将在传递给setInterval()的函数之后执行。让我们称之为火,好吗?
//实际上,fire()函数将仅在完成此文件中的所有代码后调用
//setInterval()也只调用一次,每秒只调用传递给它的fire()
函数draw(){//这里您不需要调用draw(),您只需要定义它,以便code.org可以随时调用它
//查看代码绘制函数,我们无法判断何时或多久调用一次
//这取决于code.org的实现细节。
//我们可以添加console.log来了解
console.log(“调用绘图”)//已添加
背景(“白色”);
createEdgeSprites();
产卵器。反弹(边缘);
drawSprites();
}
console.log(“'fire()'尚未调用”)//已添加
控制台