2014-05-09 1 views
0

기본 뱀 게임을 만들려고합니다. 나는 매우 기본적인 2D Java Game Engine을 가지고있다. 여기에 모든 Update와 Rendering이 일어나는 방법이있다.메서드에서 "ArrayList"에 객체 생성 및 추상 메서드 사용

나는 ArrayListGameObjects이고 나는 "update"와 "render"라는 두 가지 추상적 인 메소드를 가지고있다. 또한 질문과 아무 관련이 없지만 대답 할 때 혼란을 줄일 수있는 변수가 있습니다. 아래의 예제 코드와 같이 게임 클래스 내에 객체를 만든 다음 ArrayList에 추가합니다. 그런 다음 기본적으로 개선 된 for 루프를 사용하여 ArrayList에있는 모든 개체를 업데이트하고 렌더링합니다. 게임을하는 동안

나는 기본적으로 방법으로 객체를 생성 할 실행 (매번 "음식"을 생성하는 신체 부위하는 먹습니다). 내가하는 방법 내부의 신체 일부를 만들려면 다음 코드를 사용하는 경우

, 나는 말을 나는 "렌더링"부분에 사용하는 각 변수에 대한 오류가

이 아닌 최종 변수의 몸을 참조 할 수 없습니다 내가 렌더링 방법에 아무것도 넣어 기본적으로 비어있는 모든 것을두고 ArrayList 0123의이 "머리"를 추가하려고하지 않을 경우 다른 방법 또한

GameObject body = new GameObject(DOT_SIZE, DOT_SIZE, food.boardPosX, food.boardPosY) { 

    @Override 
    void update() { 
    //MOVE PART 
    } 

    @Override 
    void render(Graphics g) { 
     g.fillRect(body.pixelPosX, body.pixelPosY, body.pixelSizeX, body.pixelSizeY); 
    } 
}; 

에 정의 된 내부 클래스 내부 동일한 방법으로을 입력하면 java.util.ConcurrentModificationException 예외가 발생합니다.

상세 내용 : 애초 (헤드와 식품)으로부터 존재이다

  • 개체;

    • 게임 클래스 생성 (그리고 어떠한 방식으로)
    • Game 클래스의 생성자 메소드 호출에 GameObjectsArrayList에 첨가 하였다.

편집 - 추가 정보 : 나는 몸 결승전을 할 때

  • , 나는 The local variable body may not have been initialized 말하는 오류가 발생합니다.

질문 :

  • 어떻게 내가 "몸"개체를 정의해야합니다.
  • 개체의 ArrayList에 추가 할 위치와 방법은 어디서 어떻게해야합니까?

감사합니다.당신이 마지막으로 변수를 선언 할 때

+0

당신에 전달하는 당신은 할당 시도

void render(Graphics g) { g.fillRect(this.pixelPosX, this.pixelPosY, this.pixelSizeX, this.pixelSizeY); } 

: 당신이 제공하는 다음 코드를 기반으로

,

void render(Graphics g) { g.fillRect(body.pixelPosX, body.pixelPosY, body.pixelSizeX, body.pixelSizeY); } 

난 당신이 같은 싶어 뭔가를 생각 익명 클래스를 작성하고, 새 인스턴스를 본문에 할당 한 다음, 올바르지 않은 오버라이드 된 렌더 메소드에서 방금 작성한 본문 인스턴스를 사용합니다. – haifzhan

+0

"렌더링"및 "업데이트"메소드 만 추상입니다. 그래도 여전히 익명의 클래스라고 할 수 있을까요? 또한 내가 사용하는 부품은 추상이기 때문에 중요하지 않다는 것을 이해합니다. 그렇다면 올바른 방법은 무엇입니까? – Sierox

답변

1
When I make body final, I get an error saying The local variable 
body may not have been initialized. 

, 당신은 바로 값을 할당하거나 생성자에 값을 할당해야하거나 오류가 발생합니다.

GameObjectGraphics으로 분리하는 것이 좋습니다. GameObject 개체가 최소한 초기화 된 후에 Graphics 개체를 수정하십시오.

GameObject의 경우 자식 클래스 (본문)에서 render() 및 업데이트를 구현하면 body 개체를 만들 때마다 호출 할 수 있습니다. 예를 들어, GameObject 클래스를 추상 클래스로 만들고,이 두 메서드를 추상화하고, GameObject에서 확장하여 Body 클래스를 만들어 구현합니다. 현재 개체의 값이 fillRect

관련 문제