2011-12-01 2 views
0

저는 게임의 충돌 코드에 이상한 문제가 있었으며이를 추적 할 수있었습니다. 즉, 내 속성의 getter가 NaN을 반환하는 대신 실제 숫자. 여기Getter가 NaN을 반환 함

private var _top:Number; 
private var _bottom:Number; 
private var _left:Number; 
private var _right:Number; 

그리고 게터됩니다 :

public function get top():Number 
{ 
    return _top; 
} 

public function get bottom():Number 
{ 
    return _bottom; 
} 

public function get left():Number 
{ 
    return _left; 
} 

public function get right():Number 
{ 
    return _right; 
} 

값이 생성 될 공공 기능 setSides(tileSize:Number)의를 호출하여 여기에

클래스의 상단에, 속성의 선언이다 클래스 인스턴스 (값은 tileSize 매개 변수에 따라 다름). 실행 한 후에 게터를 사용하여 값을 가져 오는 추적을 실행하지만 모두 NaN을 반환합니다.

게터를 사용하지 않고 setSides() 내에 비슷한 추적을 실행하면 (즉, 직접 변수를 사용하여) 올바른 값을 반환합니다. 그리고 확실히, 나는 또한 getter을 사용하여 함수 안에서 수행 했으므로 문제가 될 것이라고 확신합니다.

누구에게 무슨 일이 일어나고 있는지 알고 계십니까?

편집 : 여기 내 setSides() 기능입니다 :

public function setSides(tileSize:Number):void 
{ 
    var _top:Number = Math.floor(_yPos/tileSize); 
    var _bottom:Number = Math.floor((_yPos + 45)/tileSize); 
    var _left:Number = Math.floor(_xPos/tileSize); 
    var _right:Number = Math.floor((_xPos + 20)/tileSize); 

    trace("top: " + top + " bottom: " + top + " left: " + left + " right: " + right); //This gives the correct values, not NaN 
} 

하지만 (내 추적에있는 보여 것)에 할당하고있어 내 값에 문제가있는 경우에도, I는 0의 값을 할당 한 내 생성자의 각 변수에, 그래서 그들은 클래스가 인스턴스화 된 순간부터 NaN을 제공해서는 안됩니다.

편집 : 오, 내가 지금이 사실을 발견했다. 몇 가지 테스트와 재 편집으로 인해 저는 여전히 변수를 정의하는 것처럼 사용하고있었습니다 (var:Number). 또한 "그들에게 0을 할당하는 것"은 제가 언급 한이 테스트와 재 편집 이전이기도 했으므로 그렇게하지 않았습니다.

+2

이 게터는 정상적으로 보입니다. 'setSides'의 코드와 getter를 사용하지 않고 올바른 값을 얻는 곳을 게시하십시오. 값이 다른 곳에서 변경 될 수 있습니다. – taskinoor

+1

기본적으로 NaN입니다. 값을 설정하는 방법 만 보아도 질문에 대답하는 데 도움이됩니다. –

답변

0

"setSides()"메소드에서 "var"및 "Number"유형을 제거하십시오. 그것들은 지역 변수입니다. 실제로 아무것도 설정하지 않았습니다. 다음과 같아야합니다 :

_top = Math.floor(_yPos/tileSize); 
    _bottom = Math.floor((_yPos + 45)/tileSize); 
    _left = Math.floor(_xPos/tileSize); 
    _right = Math.floor((_xPos + 20)/tileSize); 
+0

감사합니다. 게시 한 즉시 확인했습니다. 왜 구문 (또는 다른 유형의) 오류 오지 않았다 모르겠어요. 또한 생성자에서 0을 할당했습니다 (위의 편집에서 생각한 이유 참조). NaN을 더 이상 얻지 못합니다. – puggsoy

+0

문제 없습니다. 기본값은 양호한 것이므로 NaN 인 이유는 아직 이상하지 않지만 "get"이 초기에 기본값을 가지지 않았거나 그렇게 호출되지 않았기 때문일 수 있습니다. –

0

숫자는 기본적으로 그렇게 .. 유모 있습니다

private var _top:Number =0; 
private var _bottom:Number =0; 
private var _left:Number =0; 
private var _right:Number =0; 

와 같은 클래스 내부 번호로 바르를 설정하는() setSides에서

때문에 추적 작동합니다. setSides()를 시도한 후 getter가 작동합니다. 나는 내가 옳다고 희망한다. 왜냐하면 나는 이것에 대해 매우 확신한다. :)

관련 문제