나는 간단한 게임을 만들고 있는데, 플레이어는 기본적으로 위험한 암석을 피하면서 좌우로 움직이는 캐릭터를 조정하고 포인트를 증가시키기 위해 다른 보석을 잡으려고합니다.적당히 참조하는 객체
그러나 저는 OO 디자인을 연습하기 위해 MVC 레이아웃을 사용하려고합니다. P :
- 나는 화면에있는 모든 개체를 보유하고 GameScreen 클래스가 여기에 이 처음 문제없이이 일을하기 때문에 내가 잘하면 내가이 잘못을하고있는 중이 야, 무슨이다 .
- 나는 모든 애니메이션과 렌더링뿐만 아니라 카메라를 처리하는 WorldRenderer 클래스를 보유하고 있습니다.
- 마지막으로 사용자로부터 모든 입력을 처리하는 컨트롤러 클래스입니다.
이제 게임 스크린이 내 객체를 만들고 렌더러가 내 객체 상태 및 사용자 입력에 따라 작업을 수행합니다. 그래서 모든 것이 잘 작동합니다.
예를 들어, 컨트롤러가 Jim (문자)을 WALKING STATE로 변경하고 왼쪽을 향하고 있으면 부울을 참으로 변경하고 컨트롤러가 A를 눌렀다 고 전 세계 렌더러에 알리고 텍스처를 D가 눌려지면 월드 렌더러에게 리플 립 등을 알려줍니다. 아무 것도 누르지 않으면 Jim이 유휴 상태로 설정되고 유휴 텍스처가 그려집니다. D :
이제 코드를 체크 아웃 할 수는 있습니다 .... 웃음이
// Draw textures/sprites
batch.begin();
if (GameScreen.jim.currentState == 1) {
if (GameScreen.jim.facingLeft
&& !GameScreen.jim.sprites[1].isFlipX()) {
for (int i = 0; i < GameScreen.jim.sprites.length; i++) {
GameScreen.jim.sprites[i].flip(true, false);
}
} else if (!GameScreen.jim.facingLeft
&& GameScreen.jim.sprites[1].isFlipX()) {
for (int i = 0; i < GameScreen.jim.sprites.length; i++) {
GameScreen.jim.sprites[i].flip(true, false);
}
}
batch.draw(GameScreen.jim.currentFrame, GameScreen.jim.bounds.x,
GameScreen.jim.bounds.y, GameScreen.jim.bounds.getWidth(),
GameScreen.jim.bounds.getHeight());
}
if (GameScreen.jim.currentState == 0) {
if (GameScreen.jim.facingLeft && !GameScreen.jim.jim0.isFlipX()) {
GameScreen.jim.jim0.flip(true, false);
} else if (!GameScreen.jim.facingLeft
&& GameScreen.jim.jim0.isFlipX()) {
GameScreen.jim.jim0.flip(true, false);
}
batch.draw(GameScreen.jim.jim0, GameScreen.jim.bounds.x,
GameScreen.jim.bounds.y, GameScreen.jim.bounds.getWidth(),
GameScreen.jim.bounds.getHeight());
}
batch.end();
그래, 즉의 완전한 닉 봐. 이것은 실제로 작동합니다. 깨지지 않은 것을 고치지 말고 더 많은 것을 배울 때까지이 코드를 수정하지 않을 것입니다. 그러나 더 나은 것이 무엇인지를 아는 것이 좋습니다. 나는 끊임없이 내 짐 다음 변수를 얻기 위해 GameScreen를 참조하는 데
GameScreen.jim.jim0, GameScreen.jim.bounds.x,
GameScreen.jim.bounds.y,
,이 만들어 짐에 배열 등 필드 : 나는이 모든 물건을 좋아하지 않는다. 이 코드는 가장 끔찍한 코드 작성 방법 일뿐만 아니라 완전히 끔찍해 보입니다. :) 짐이 잘 때문에
가Jim.jim0;
이 널 예외가 발생, 아무것도 : 나는 짐 클래스 그렇게하고 대신 할 수없는 방법을 직접 GameScreen를 참조 할 수없는 경우
지금 나는 생각했다. 나는 그를 창조하지 않았다.지금 나는 내 클래스의 상단에이 작업을 수행하는 경우 : 다음
Jim jim;
및 사용 :
jim.jim0;
여전히 널 (null) 예외를.
이 방법을 사용해야합니까? 내가 만든 Jim에 도달하기 전에 먼저 GameScreen을 참조해야하는 것을 피하는 방법에 대해 어떻게 생각합니까? 이건 불가능한가요?
죄송합니다. 텍스트의 벽에는 유감스럽게도 많은 정보가 있으며, 내가 쉐 이후에 대해 설명해주는 것이 좋습니다.
아무것도 설정하지 않았으므로 NullPointerException이 발생합니다. 'Jim jim = new Jim(); '을 시도하십시오. –