2013-06-05 3 views
0

컴파일러 또는 런타임 오류를 반환하지 않기 때문에 논리 오류라고 가정합니다.알 수없는 논리 오류

내 기능 :

여기
function closetest() { 
    tooclose=false; 
    for (i=0; i<10; i++) { 
    if (Math.abs(entry[0]-entry[i])<100) { 
     tooclose=true; 
    } 
    } 
} 

function xassignment() { 
    for (i=0; i<10; i++) { 
    entry[i+1]=entry[i]; 
    } 
    do { 
     entry[0] = int(Math.random()*(stage.stageWidth - 30)); 
     closetest(); 
    } while (tooclose == false); 
} 

이 기능은

mcMain.addEventListener(Event.ENTER_FRAME, moveChar); 
function moveChar(event:Event):void { 
if (gameOver == false) { 
    if (enemyTime < enemyLimit) { 
     enemyTime++; 
    } else { 
     var newEnemy = new Enemy(); 
     xassignment(); 
     newEnemy.y=-1*newEnemy.height; 
     newEnemy.x=entry[0]; 
     addChild(newEnemy); 
     enemyTime=0; 
    } 
} 
} 

라고한다 나는 이러한 기능을 만든 객체 좌표 무작위로 X 생성에서 제외되는 포함하는 게임을 만들고 있어요 오브젝트가 서로 너무 가까이 떨어지지 않았지만 효과가없는 것으로 확인하십시오.

답변

0

당신은 당신이 관찰하는 어떤 영향을 설명하지 않은,하지만 난이 발견 :이 tooclose 항상 진실되고 발생합니다

for (i=0; i<10; i++) { 
    if (Math.abs(entry[0]-entry[i])<100) { 
     tooclose=true; 
    } 
} 

, 루프는 0에서 시작하기 때문에, 따라서 당신은 자체 entry[0]을 비교합니다. 루프를 1에서 시작하십시오.

+0

변경했으나 해결되지 않았습니다. 내가 관찰 한 결과는 tooclose가 항상 false이고 어떤 객체가 서로 위에있을 것입니다. – Kelly

+0

그러면 실제 문제가 무엇인지 구체적으로 파악하고 이러한 함수가 사용되는 방법을 보여 주어야합니다. – paddy

0

tooclose을 신고하지 않았거나 변경하지 않았습니다. xassignment입니다. 대신 쿼리 할 closetest()에서 부울을 반환해야합니다. 또 다른 논리적 인 오류는 배열에서 이전 값을 1 씩 앞당기면서 인덱스를 증가시키는 것입니다. 그래서 당신은 i = 0, entry [1] = entry [0]입니다. 그런 다음 i이 증가되고, 항목 [2] = entry [1] - bam, 항목 [2]가 항목 [0]에 대한 다시 시작됩니다! 이렇게해서 항목의 전체 배열은 이전의 10 개의 값을 저장하는 대신 이전 시도에서 롤백 한 것과 같습니다. 그것도 수정했습니다. closetest하여 구현이 [X,100,300,500,700] 배열 수신처 경우 절대 차이 (100)의 사용자의 범위를 만족시킬 수없는 위치가 X 없다로

function closetest():Boolean { 
    for (var i:int=1; i<10; i++) { 
     if (Math.abs(entry[0]-entry[i])<100) 
      return true; 
    } 
    return false; 
} 
function xassignment() { 
    for (i=10; i>0; i--) entry[i]=entry[i-1]; 
    do { 
     entry[0] = int(Math.random()*(stage.stageWidth - 30)); 
    } while(closetest()); 
} 

참고하지만, 루프가 무단 것이다. 그래서, 다음과 같이 고칠 : 우리가 10 불규칙적을 시도하고 아무도 만족하지 않는 경우

function xassignment() { 
    for (i=10; i>0; i--) entry[i]=entry[i-1]; 
    var loops:int=10; 
    do { 
     entry[0] = int(Math.random()*(stage.stageWidth - 30)); 
     loops--; 
    } while((loops>0)&&closetest()); 
} 

이 그 루프에서 출구를 강제 - 마지막 시도가 반환됩니다.