さて、この問題を3回調べて、私の質問に本当に関連するものが何も見つからなかった後、私は今尋ねます。
私は興味を持ち、キャンバスで非常に基本的な落下砂のおもちゃを作ることができるかどうかを実験することにしました。
「砂」が本来のように地面に堆積するので、私はそれをうまくやりましたが、空中の粒子と地面の粒子の間の衝突検出のために、それは非常に速く遅くなります。
自分で確認してください編集:おそらくデッドリンク、代わりにJsFiddleがあります。
マウスボタンをクリックして押したままにすると、パーティクルが生成されます。そして、約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}
}
}
私がひどく間違っていることがあるかどうか疑問に思っています。私はそれがそれほどひどく遅れることはないはずだとかなり確信しています。ネストされたループなしでそれを行う方法があるかどうかも疑問に思っていますが、私がこの作業を行うことができた唯一の方法は、すべての個々の地上粒子に対してすべての個々の浮遊粒子をチェックすることであるようです。
リンクが壊れている場合は、その言葉を言ってください。コード全体をここに投稿します。
ありがとう