[英]Javascript, loops infinitely and freezes
因此,我正在使用HTML5 canvas和javascript進行簡單的物理模擬。 我正在嘗試進行一些實際的沖突,但是每當發生沖突時,代碼就會開始無限循環並凍結頁面。
我正在使用Google Chrome 24.0.1312.32 beta-m
當查看javascript控制台時,“ console.log(“我正在與某物發生碰撞”)“行變得瘋狂,並且每秒被打印數千次,並完全破壞了頁面。
我不太確定為什么會這樣,我也不知道該怎么辦。 任何幫助和/或輸入將不勝感激。
for (i = 0; i <= 3; i++) {
if (collide(i)) {
console.log("I am colliding with something");
if (typeof getCollideIndx === 'undefined') {
console.log("collide index is not undefined");
if (!getCollideIndx(i)) {
console.log("Made it past null check");
//...update object based on collision
collide()函數為:
function collide(b) {
for (i = 0; i <= 3; i++) {
//Distance between each object
var distance = (Math.sqrt(Math.pow((balls[b].x - balls[i].x), 2) + Math.pow(balls[b].y - balls[i].y, 2)));
if (distance < 32) {
//must be less than 2*radius -- all radii are the same
//makes it so that it doesn't return true when checking its own index
if (!(balls[b].mass == balls[i].mass)) {
return true;
} else {
return false;
}
}
}
}
我看不到您的代碼中的無限循環,我的最佳猜測是此語句
if (typeof getCollideIndx === 'undefined')
每次都失敗,下面的代碼所包含的任何功能都被連續調用
for (i = 0; i <= 3; i++) {
if (collide(i)) {
console.log("I am colliding with something");
if (typeof getCollideIndx === 'undefined') {
console.log("collide index is not undefined");
if (!getCollideIndx(i)) {
console.log("Made it past null check");
//...update object based on collision
同樣在此,我看不到for循環的意義,因為該控件總是返回到調用函數(在collide()函數中)
好吧,被困在for循環中意味着索引變量i
在某處被錯誤地設置。 無法完全看到代碼,我不能肯定地說,但是for(i=0; i<3; i++){...
的循環for(i=0; i<3; i++){...
window
對象分配i
,因為您沒有顯式地確定它的作用域(即for(var i...
)。
例如, 請參見此jsfiddle ,其中第一個函數只會運行一次,而不是運行三次,因為相同的變量i
在第二個函數中會受到影響。
顯然只運行一次!=無限循環,但是如果collide
函數對i
起作用(或者在發現碰撞后可能中斷?),則每次調用i
時, i
的值都會在其for循環的開始處重置為0。
是的,沒有更多的代碼,我不能肯定地說。 但在這種情況下,我的建議是:始終在var
中使用for循環,否則可能會發生奇怪的事情!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.