2014-03-27 2 views
0

저는 Swing을 사용하여 현재 로게 라이크 게임을 개발 중입니다. 타일을 표시하는 데 JLabel 배열을 사용하고 있습니다.JLabel 배열의 디스플레이가 느려집니다.

for (int i=0 ; i<array.length ; i++){ 
    for(int j=0 ; j<array[i].length ; j++){ 
     this.remove(array[i][j]); 
     array[i][j] = new JLabel(new ImageIcon(TILEARRAY[i][j])); 
     this.add(array[i][j]); 
     this.validate(); 
    } 
} 

을하지만 약 0.5 초 전체 패널을 다시 그리기에 대처하는 것은 매우 무거운 : 사용자 입력 방향, 나는 다음과 같은 방법을 사용하여 전체 탭을 다시 그릴 때 (내가 여기에 단순화 된 변수 이름을 사용하고 있습니다) 방향을 누를 때 실시간 디스플레이가 가능할 정도로 빨라질 수 없습니다 (대기 시간에 따라 실제로 루프를 수행하고 전체 변위가 완료되면 그립니다). 스윙을 사용하여 "부드러운"느낌 (스톤 수프 던전 크롤 (타일 버전) 에서처럼 말하자)을 사용하여 더 쉽고 빠르게이를 달성 할 수있는 방법이 있는지 알고 싶습니다.

Java 용 효율적인 2D 라이브러리에 대한 모든 제안도 환영합니다. 나는 Slick2D가 있다는 것을 알고 있지만, 이런 종류의 게임을위한 다른 훌륭한 라이브러리가 있습니까?

감사

this.validate(); 한 번만 모두 레이아웃 기본 설정을 피하기 위해 루프 후

UPDATE를 재 계산

+0

얼마 전에 게임을 만들기 시작했을 때이 라이브러리를 사용했습니다. http://lwjgl.org/. 저 레벨 라이브러리이지만 시간이 많이 걸립니다. 많은 튜토리얼을 가지고 있기 때문에 Unity를 사용해 보시지 마십시오 – Slimu

+0

[JLabel # setIcon]을 사용하지 마십시오 (http://docs.oracle.com/javase/7/docs/api/javax/swing/). JLabel을 제거하고 읽는 대신 JLabel.html # setIcon (javax.swing.Icon))? – BackSlash

+0

어떤 제목이 변경 될지 알고 계십니까? 변경에 영향을주는 타일 만 업데이트 할 수 있습니다. –

답변

2

전화 (내 영어 나쁜 경우 죄송합니다, 나는 영어 원어민 아니에요). ImageIcon을지도에 유지하고 재 작성하는 대신 재사용하십시오. 키는 i + "_"+ j 문자열이 될 수 있습니다.

+0

그게 내가 한 일이지만 타일을 차례로 다시 그려서 이상한 디스플레이 (빠르지 만 부드럽지 않을 정도로 빠름)가 발생합니다. 한 번 전체 배열을 그려야합니다. 편집 : 내 뜻을 알 경우 "파도"효과처럼 보입니다. – Coulis

+0

어떤 레이아웃을 사용합니까? 다른 하나를 선택하는 것이 더 낫지 만 (또는 더 빠른 LayoutManager를 구현하는 것조차도). 또한 JTable에 배치하고 렌더러를 사용하는 것을 고려하십시오. 비슷한 이미지가 많이있는 것 같아요. – StanislavL

+0

GridLayout을 사용하고 있습니다. 내게 더 논리적 인 것처럼 보였습니다. 다른 공연을 사용하면 공연이 늘어날 것이라고 생각하십니까? – Coulis