2014-12-15 2 views
0

나는 onClick 이벤트에서 뭔가를하는 함수를 가지고있다.JS 함수 내에서 변수를 얻는 것

function onDocumentMouseUp(event) { 
    createsprite(clickedposition); 
} 

createsprite(clickedposition) { 
    var sprite = JSONSPITE // this add correctly sprite to my scene; 
    //// here timer function 1 sec 
    setTimeout(function(){ remove(sprite); }, 1000); 
} 

모든 것이 올바르게 작동합니다. 하지만 두 번 이상 클릭하면 마지막으로 추가 된 변수 스프라이트가 생깁니다. (네, 맞습니다). 그리고 논리적으로는 remove()가 마지막에 영향을 미쳤습니다.

알 수없는 동일한 변수가있는 작업을 처리하는 올바른 솔루션은 무엇입니까? 생성 순서대로 하나씩 클릭 한 후 1 초 후에 각 스프라이트를 제거하십시오.

각 함수 init에 동일한 이름의 변수가 더 많은 경우에도 동일한 함수에서 하나의 변수에만 도달 할 수 있습니다.

+3

는'내가 로컬 범위에 대한, 그래 내가 설정 한 VAR 스프라이트 변수 잊어'createsprite' –

+0

sory에'sprite' 변수를 var'. 질문에 추가되었습니다. – Martin

답변

1

sprite을 전역 변수로 정의했습니다. 해당 함수뿐만 아니라 윈도우 객체에도 생성됩니다. 당신은 당신이 그 함수에서 생성 만 스프라이트를 제거하려면

, 당신은 그것을 변수

var sprite = JSONSPITE; // typo? 

에게이 방법을 확인해야합니다, 스프라이트 변수의 범위는 단지 기능입니다.

편집 : 영업 이익은 이전 설명을하고, 자신의 질문에 변경이되지 않는

여러 스프라이트를 만들고, 그들이 삭제되기 전에 당신이 그들에 액세스 할 수 있도록 어딘가에을 저장하려면, 당신이 할 수 있습니다 보인다 스프라이트의 배열을 만듭니다. 당신은 단지에있는

sprites = []; 

function onDocumentMouseUp(event) { 
    createsprite(clickedposition); 
} 

function createsprite(clickedposition) { 
    sprites.push(JSONSPITE); // Adds the current sprite to the end of the array 
    setTimeout(function(){ 
    var firstSprite = sprites.shift(); // Takes the first sprite out of the array 
    remove(firstSprite); 
    }, 1000); 
} 
+0

안녕하세요 덕분에 오타되었습니다, 나는 문제를 해결했습니다. – Martin

+0

그 tholud 솔루션입니다! 범위를 사용하는 방법이 있습니까? 타임 아웃 시간이 상대적 일 때 (예 : 거리 벡터) 올바르게 작동하지 않기 때문입니다. – Martin

+0

사용자 정의 제한 시간을 원하면 대답의 첫 번째 부분에서 설명한대로 사용하십시오 (예 : 'var sprite = JSONSPITE;'). 'setTimeout (function() {remove (sprite);}, sprite.distance)'과 같이 제거하십시오. –

관련 문제