2015-01-04 3 views
3

두 개는 움직여야하고 (아마도 서로를 통해 단일 축으로 이동해야 함) 3 개의 그래픽을 추가하려고 시도하고 있으며 패널에 추가 된 마지막 그래픽 만 표시합니다.하나의 JPanel에 여러 그래픽 추가하기

즉, 저는 JFrame에 많은 패널을 추가했으며, 가장 큰 패널에서는 특정 좌표를 사용하여 그래픽 객체를 넣었습니다. 코드를 표시하는 것이 더 도움이 될 수 있습니다.

//the gameArea is the referred-to JPanel, above this code  
TankOne tank1 = new TankOne(Color.GREEN); 
TankTwo tank2 = new TankTwo(Color.MAGENTA); 
FieldBar fieldb = new FieldBar(Color.getHSBColor((float) Math.random(),(float) Math.random(),(float) Math.random())); 
JPanel tank1panel = new JPanel(); 
JPanel tank2panel = new JPanel(); 
tank1panel.add(tank1); 
tank2panel.add(tank2); 
gameArea.add(tank1panel); 
gameArea.add(tank2panel); 
gameArea.add(fieldb); 
//repaint code here 

알다시피, 탱크 게임입니다. GUI에 나타나는 것은 마지막 gameArea.add입니다. [여기는 fieldb, 경기장을 보여주는 바입니다].

여기서 시도한 것은 두 개의 새 패널을 gameArea Jpanel에 넣고 그 안에 두 개의 탱크 객체를 배치하려는 것입니다. 아직 주사위가 없습니다.

픽셀 단위로 탱크를 이동할 수있는 해결 방법이 있습니까? 일부 답변에 gridlayout으로 전환하는 것이 포함되어 있지만 추가 패널이 없었기 때문에 보는 것이 도움이되지 않는다고 생각합니다.

답장을 보내 주셔서 감사합니다.

답변

5

각 탱크 JPanel이 단일 탱크의 이미지 (100 % 확실하지 않음)를 표시한다고 생각합니다. 몇 가지 제안 사항이 있지만 내 가정이 근거가없는 경우 말해 주시겠습니까 :

  • 논리를 유지하고 잘 M-V-C로 구분 된보기를 유지하십시오.
  • paintComponent(...) 메서드에서 단일 JPanel의 모든 그래픽을 DrawingPanel이라고도합니다.
  • 배경 이미지는 DrawingPanel의 paintComponent(...) 메서드에서 그려지는 BufferedImage입니다.
  • 탱크 자체는 JPanel로 표현되지 않지만 자체의 작은 BufferedImage 스프라이트가되고 paintComponent 메소드에서 다시 그려 지지만 배경 이미지 뒤에 이 그려집니다.
  • 각 탱크에는 각 방향에 하나씩 4 개의 스프라이트가 필요합니다.
  • 탱크가 대각선을 따라 이동하려면 더 많은 스프라이트가 필요할 수 있습니다.
  • 그리고 포대에 대한 별도의 스프라이트/이미지.
  • 모델 표현의 위치가 변경되면 스프라이트의 그려진 위치를 이동합니다.
  • 터렛 회전과 동일한 작업입니다.
+0

고맙습니다. 환상적입니다. – Quibble

+0

@ JohnMele : 천만에! –

관련 문제