如何解决背景图片涵盖了游戏
我刚刚开始学习 Java,我正在尝试开发一个简单的游戏(非常像 Space Invaders)。我正在尝试为我的游戏设置背景图像,而不仅仅是为背景设置颜色。
问题:背景图像覆盖/重叠我的游戏。我再也看不到我的比赛了。我该如何解决这个问题?
相关代码:
public class Board extends JPanel implements Runnable
{
private Player player;
private Player2 player2;
private EnemyWave enemyWave;
private List<Guard> guards;
private boolean inGame;
private Integer lives;
private Integer lives2;
private String message;
Board()
{
JLabel backgroundImage;
inGame=true;
lives=3;
lives2=3;
player=new Player(START_X,START_Y);
player2 =new Player2(START_X-180,START_Y);
enemyWave = new EnemyWave();
guards = new ArrayList<>();
for(int i=0; i<6 ; i++) {
guards.add(new Guard(GUARD_POSX + i * 125,GUARD_POSY));
}
addKeyListener(new KAdapter());
setFocusable(true);
//setBackground(new Color(168,219,127,116)); // Background color
// BACKGROUND IMAGE
ImageIcon img = new ImageIcon("background.jpg");
backgroundImage = new JLabel("",img,JLabel.CENTER);
backgroundImage.setBounds(0,1200,700);
add(backgroundImage);
setVisible(true);
}
@Override
public void addNotify() {
super.addNotify();
Thread animator = new Thread(this);
animator.start();
}
@Override
public void run() {
long beforeTime,timeDiff,sleep;
beforeTime = System.currentTimeMillis();
while(inGame) {
repaint();
animationCycle(); //mechanics of a game
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if(sleep<0) {
sleep = 2;
}
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printstacktrace();
}
beforeTime=System.currentTimeMillis();
}
gameOver();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Font font = new Font("Verdana",Font.PLAIN,18);
g.setColor(Color.RED);
g.setFont(font);
g.drawString("Player 1 Lives: " + lives.toString(),BOARD_WIDTH - 185,25);
g.drawString("Enemies Left: " + enemyWave.getNumberOfEnemies().toString(),28,25);
g.drawString("Player 2 Lives: " + lives2.toString(),55);
g.setColor(Color.GREEN); // border color where the plane lies
g.drawLine(0,GROUND,BOARD_WIDTH,GROUND);
player.draw(g,this);
if (player.getM().isVisible())
player.getM().draw(g,this);
//create
player2.draw(g,this);
if (player2.getM().isVisible())
player2.getM().draw(g,this);
enemyWave.draw(g,this);
for (Guard guard : guards) {
guard.draw(g);
}
}
}
设置背景图片前:
设置背景图片后(完全覆盖我的游戏):
解决方法
Swing 具有父/子关系。
所以一个组件将:
- 首先根据paintComponent(...) 方法中的绘制逻辑绘制自身。
- 然后绘制添加到面板的所有子组件。
在你的类的构造函数中,你有:
class Class(models.Model):
code = models.CharField(primary_key=True,verbose_name='Code',max_length=50)
将组件添加到面板,这意味着它将在您的自定义绘画之上进行绘画。
不要在背景中使用 JLabel。
只需在paintComponent(...) 方法中绘制图像作为第一步即可。
,在我的 Board 类中添加了这个:
Image bg = Toolkit.getDefaultToolkit().getImage("bg.jpg");
在我的paintComponent方法中添加:
g.drawImage(bg,null);
它奏效了!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。