我正在写一个基于平铺的平台游戏。目前我正试图让400块瓷砖一次显示出来。这是我的小组。在顶部和左侧,一切都很好,但在右侧和底部,图像被几个像素切断。每张图片为32 * 32。所有blocks
都已初始化。没有为空。这有什么不对?
public class Pane extends JPanel implements ActionListener{
private static final long serialVersionUID = 1L;
Timer timer;
boolean setup = false;
Block[][] blocks;
Level level;
public Pane()
{
level = new Level();
level.Generate();
blocks = level.Parse();
setBackground(Color.WHITE);
timer = new Timer(25, this);
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
for(Block[] b : blocks)
{
for(Block bx : b)
{
// Debug code if(bx.letter.equals("D"))
// Debug codeSystem.out.println(bx.y*32 +" = "+ bx.x*32);
g2d.drawImage(bx.bpic, bx.x*32, bx.y*32, this);
}
}
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
}
答案 0 :(得分:5)
在右侧和底侧,图像被几个像素切除
如果你的意思是整个面板的右侧和底面(不是单个瓷砖),那么它可能是与LayoutManager相关的问题。解决方案取决于您用于添加JPanel的组件的布局管理器。
您可以尝试使用以下命令指定JPanel的最小/首选大小:
Pane pane = new Pane();
pane.setPreferredSize(...);
pane.setMinimumSize(...);
为了根据生成的图像的大小(32 * COL,32 * ROW)指定其最小尺寸。 不幸的是,setPreferredSize调用的有效性取决于Pane父组件的布局管理器。
答案 1 :(得分:4)
JComponent基本上可以做到这一点,并且可以非常轻松地返回MinimumSize
或PreferredSize
,对大多数standard Swing LayoutManagers有效,示例here。