2014-10-19 5 views
1

이동, 충돌 및 변수 (Variables 클래스는 변수를 저장하는 곳으로 모든 변수가 public이고 static입니다.) Java를 처음 사용하기 때문에 실제로 이해할 수 없습니다 정적 키워드는 무엇을합니까, 그래서 내 문제는 정적 키워드와 관련이있을 수 있습니다.). My Collision 클래스에는 맵 내의 충돌을 검사하는 메서드가 있습니다. 이제이 방법은 완벽하게 작동합니다 :Java : 변수가 증가하지 않습니다

someObject.checkCollision(Variables.playerX, Variables.playerY); 
someOtherObject.playerMovement(Variables.playerX, Variables.playerY); 

이 보인다 :

여기
public void playerMovement (int x, int y) 
{ 
    if (RightKeyPressed == true & collisionRight == false) { 
     x += Variables.speed; 

    } 
} 

내가이 메소드를 호출하는 방법입니다 : 여기

public void checkCollision(int x, int y) 
{ 

    if (x == 100){ 
     Variables.collisionRight = true; 

    } else { 
     Variables.collisionRight = false; 
    } 
} 

나는이 작동하지 않습니다 내 이동 클래스의 메소드를

나에게이 문제는 다음과 같다.

x += Variables.speed; 

내가 변경하는 경우

x 

Variables.playerX 

모든 것이 잘 작동하지만 나는 그것이 작동하는 방법이 아니다

합니다.

작동하지 않습니다. 기본적으로 (Variables.playerX + = Variables.speed) 모든 메소드는 샘플입니다.

내 x (Variables.playerX) 변수가 3 (내 Variables.speed 변수)로 증가하지 않는 이유를 알고 싶습니다.

+1

그냥 사용 (RightKeyPressed &! collisionRight) –

+1

제목이 유용하지 않습니다. 특정 문제를 설명해야합니다. –

답변

2

무슨 일이 일어나고 있는지 Variables.playerX이으로 x 값으로 이 전달되고 있습니다. 함수가 x을 수정하면 효과적으로 Variables.playerX의 로컬 복사본을 수정합니다.

public void playerMovement (Variables vars) 
{ 
    if (RightKeyPressed && !collisionRight) { 
     vars.x += vars.speed; 
    } 
} 

P.S. :

상기 논의

(기준으로) 대신 xyVariables 객체를 전달하는 것이다이 문제를 해결하기 위해 Is Java "pass-by-reference" or "pass-by-value"?Java is Pass-by-Value, Dammit!

편도 참조 if 상태를 어떻게 다시 작성했는지 유의하십시오. 당신이 가지고있는 것이 정확하지는 않지만, 관용적으로 우리는 truefalse에 대한 부울을 명시 적으로 비교하지 않습니다. 또한 short-circuit이기 때문에 부울 컨텍스트에서 &&||&|보다 선호됩니다.

+0

그래서'Variables.playerX' 변수의 값을 변경하는 클래스에서 메소드를 만들까요? –

+0

@GeorgiTonchev : 참조를 전달합니다. 업데이트 된 답변을 참조하십시오. – NPE

관련 문제