스윙, JFrame 및 JPanel을 사용하여 Pacman과 유사한 게임을 만들려고합니다. 크기는 256x256입니다. 그러나 실제로 게임을 컴파일 할 때 화면이 약간 커집니다. 나는 그것이 올바르게 또는 아마도 레이아웃을 다루는 무언가를 오버 라이딩하지 않았기 때문에 그 것인지 알 수 없다.Jpanel 크기가 올바르지 않음
이 추가 내 JFrame의 클래스 인 JPanel의
* 나는 그들이 도움이 아닌지 알아 내려고했기 때문에 주석 몇 가지가 있습니다. 당신이 구성 요소를 추가하고 그래서 문제가 무엇 확실하지 않다 크기 구성 요소에 JFrame의를 설정) (팩을 호출하는 경우
public class GameDevelopment extends JFrame{
//Window Stuff ... hopefully
public static final int DimensionHeight = 256;
public static final int DimensionWidth = 256;
// Level stuff possibly
Tile startingTile;
Player player;
Walls walls;
public static Tile[][] tiles;
public GameDevelopment(){
//Initialize
tiles = new Tile[DimensionWidth/16 ][DimensionHeight/16];
for(int i = 0; i < DimensionWidth/16; i++){
for(int y = 0; y < DimensionHeight/16; y++){
tiles[i][y] = new Tile(i, y);
}
}
startingTile = tiles[tiles.length/2][tiles[0].length/2];
//xStart = (tiles.length/2) * 16;
//yStart = (tiles[0].length/2) * 16;
walls = new Walls();
player = new Player(startingTile);
//Sceen stuff
setTitle("Game");
addKeyListener(player);
addMouseListener(player);
add(new Draw(walls, player), BorderLayout.CENTER);
//setSize(DimensionWidth, DimensionHeight);
pack();
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
SpriteSheet.getSprites();
//Create tiles
GameDevelopment game = new GameDevelopment();
}
나는 알고있다.
화면을 그려주는 Jpanel 클래스입니다. 나 또한 수동으로 화면이 직사각형 모양이어야하고 화면 명확하게 무엇을 해야하는 것보다 큽니다 그렸습니다.
* 하나의 paintComponent를 사용하여이 클래스의 메서드를 그리는 데 필요한 다양한 클래스를 전달합니다.이 클래스는 매우 잘 최적화되지 않았지만 문제가되지 않아야합니다. 돕는
감사 :
나는이 사진을 얻을 결과public class Draw extends JPanel{
//Size
int DimensionHeight;
int DimensionWidth;
// Components
ArrayList components;
int amount;
public Draw(DrawGraphics ... _components){
//Size
DimensionWidth = GameDevelopment.DimensionWidth;
DimensionHeight = GameDevelopment.DimensionHeight;
//this.setPreferredSize(new Dimension(256, 256));
//setMinimumSize(new Dimension(DimensionWidth, DimensionHeight));
//setMaximumSize(new Dimension(DimensionWidth, DimensionHeight));
//setSize(DimensionWidth, DimensionHeight);
setBackground(new Color(80, 0, 255));
System.out.println(getMinimumSize());
//Components
components = new ArrayList();
components.addAll(Arrays.asList(_components));
amount = components.size();
}
@Override
public Dimension getPreferredSize(){
return new Dimension(DimensionWidth, DimensionHeight);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
for(int i = 0; i < 16; i++){
for(int y = 0; y < 16; y++){
g.drawRect(i*16, y*16, 16, 16);
}
}
for(int i = 0; i < amount; i++){
((DrawGraphics)components.get(i)).draw(g);
}
//g.drawRect(0, 0, 16, 16);
repaint();
}
는 이 그려진 사각형 후 약간의 푸른 공간을 보여줍니다!
감사합니다. 또한 다시 칠해서 루프를 반복하고 플레이어의 위치를 계속 그릴 것입니다. 그렇지 않으면 그렇지 않습니다. – Flameo326
@ Flameo326, 다시 한번 paint 메소드에서 repaint()를 호출하면 안됩니다. 애니메이션을 원하면 [Swing Timer] (http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)를 사용하십시오. – camickr