2013-06-28 2 views
0

저는 오랫동안이 문제에 봉착했습니다.Ascii 기반 게임을 만들려고합니다. JFrame이 표시되지 않습니다

그래서 누군가의 AsciiPanel 라이브러리를 사용하고 있습니다. AsciiPanel이 JFrame에 추가 될 때 Ascii 그래픽이있는 80x24 구식 Windows 명령 줄을 생성하는 라이브러리입니다 (로 게 라이크 등).

AsciiPanel을 JFrame에 추가하려고합니다.

문제는 내가 어디에서나 JFrame을 만들었다 고 생각하지 않는다는 것입니다. 이상한 곳 어디에도 추가하지 않고 코드를 읽을 수 없게 만들지는 않겠습니다. 나중에 커뮤니티에 물어보기로했습니다. 이 코드입니다 :

package com.base.engine; 


import java.awt.event.WindowEvent; 
import javax.swing.JFrame; 
import com.base.game.Game; 
import asciiPanel.AsciiPanel; 


public class Main extends JFrame{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private static AsciiPanel asciiPanel; 
    private static Game game; 
    public boolean gameRunning = true; 

    public Main() { 
     initDisplay(); 
     initGame(); 
     gameLoop(); 
    } 

    private void initDisplay() { 
     asciiPanel = new AsciiPanel(); 
     add(asciiPanel); 
     pack(); 
    } 
    private static void initGame() { 
     // TODO Auto-generated method stub 
     game = new Game(); 
    } 
    private void gameLoop() { 
     while(gameRunning = true) { 
      game.getInput(); 
      game.update(); 
      game.redraw(); 
     } 
    } 

    void windowClosing(WindowEvent e) { 
     gameRunning = false; 
    } 

    public static void main(String[] args) { 
     Main game = new Main(); 
     game.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     game.setVisible(true); 
    } 
} 

가 나는 또한 생각 gameLoop() 나는 그것이 내가 그것을 추가하기 직전에 잘 작동 생각하기 때문에, 그것을 속이고 무슨 수 있습니다.

감사합니다.

+0

당신의 당신이 gameLoop 내부에있는 주문의 각을 제거 봤어을에서 그것을 방지 할 블록 조치()? 루프의 각 부분을 끝내고 잠시 기다릴 수 있도록 잠을 더 주시겠습니까? – Thijser

답변

3

맞아요, 게임 루프가 이벤트 디스패치 스레드를 차단하여 재 칠하는 요청이나 들어오는 이벤트를 처리하지 못하게합니다.

필요에 따라 javax.swing.Timer, SwingWorker 또는 Thread을 사용하는 것이 좋습니다.

스윙은 단일 스레드 프레임 워크입니다 기억 자세한 내용

것들에 대한 Concurrency in Swing에서 봐,이의/모든 UI 구성 요소에 대한 모든 작품 및 업데이트가의 컨텍스트 내에서 발생할 것으로 예상되는 것을 의미 EDT. 마찬가지로

, 동부 서머 타임은 UI를 업데이트 (또는 이벤트 처리)

+0

고마워요. 나는 그것에 대해 조사해 볼 것입니다. – BitLion

+0

내 무지 때문에 유감 스럽지만 여전히 이해가 안갑니다. 턴 기반 게임을 만들려고하기 때문에 타이머 나 프레임이 필요하지 않다고 생각합니다. 조치를 수행 할 때마다 코드를 더 똑똑하게 옮길 수 있습니까? – BitLion

+0

프레임이란 JFrame이 아니라 FPS를 의미합니다. – BitLion

관련 문제