Javascript 简易落沙玩具
好吧,在把这个问题查了三遍之后,我发现与我的问题没有任何真正相关的东西,现在我要问了。Javascript 简易落沙玩具,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,好吧,在把这个问题查了三遍之后,我发现与我的问题没有任何真正相关的东西,现在我要问了。 我很好奇,决定尝试一下,看看是否能在画布上制作一个非常基本的落沙玩具 我确实成功地做到了这一点,因为“沙子”像它应该的那样堆积在地面上,但由于空气粒子和地面粒子之间的碰撞检测,它的速度非常快 编辑:可能是死链接 通过单击并按住鼠标按钮生成粒子。当你产生了大约200个粒子后,它会被带到膝盖上 for(i in P){ if(P[i].Y<canvas.height-1){ P[i]
我很好奇,决定尝试一下,看看是否能在画布上制作一个非常基本的落沙玩具 我确实成功地做到了这一点,因为“沙子”像它应该的那样堆积在地面上,但由于空气粒子和地面粒子之间的碰撞检测,它的速度非常快 编辑:可能是死链接 通过单击并按住鼠标按钮生成粒子。当你产生了大约200个粒子后,它会被带到膝盖上
for(i in P){
if(P[i].Y<canvas.height-1){
P[i].Y++
for(j in G){//This loop seems to cause the lag
if(P[i].X==G[j].X&&P[i].Y==G[j].Y-1){
G[G.length]={X:P[i].X,Y:P[i].Y}
}
}
}else{
G[G.length]={X:P[i].X,Y:P[i].Y}
}
}
for(i在P中){
如果(P[i].Y,则更容易记住每一堆沙子的高度(例如画布中的每一列或x坐标),并进行检查。您可以直接使用索引(应与x坐标相同),因此无需在所有地面位置循环以找到正确的位置
您只需对每个空气中的沙粒进行一次检查,即检查相应柱的桩高
此外,当沙子撞击到桩体时,将其从“活动粒子”列表中删除,这样您就不必每次都对其进行检查,使外部for
-循环尽可能小/短
使用桩的高度重新绘制每个桩(当沙粒有单独的颜色时,效果不好…)或者将不再掉落的沙子放在单独的内存结构中,以便正确地重新绘制这些堆。听起来是一个不错的解决方案;就像光线投射与光线跟踪。我会在有时间的时候测试它,如果它有效,我会给你最好的答案。谢谢:)只是想到了一些想法,可能还有更多优化的可能性……:)对其进行了测试,性能显著提高..谢谢。我将你的答案加上1,并将其选中标记链接指向的代码已更改。哦,我应该将该链接更新为不太可能损坏的链接。我将快速创建一个JSFIDLE。