gpt4 book ai didi

java - 如果我将 Sprite 添加到 jframe 中,我的背景就会消失

转载 作者:行者123 更新时间:2023-11-30 03:11:19 25 4
gpt4 key购买 nike

我正在尝试制作一个 2d 横向卷轴游戏。我已经能够显示背景,但是一旦添加 Sprite ,框架上显示的唯一内容就是 Sprite 。 (抱歉,如果这是一个简单的错误,但我是 java 新手)

这是我的主课

package com.projectelrond.main;

import javax.swing.JFrame;

import com.projectelrond.Sprites.Ranger;

public class Main {

public int WIDTH = 160, HEIGHT = WIDTH/12 *9, SCALE = 3;

public boolean running = false;

BackGround bg = new BackGround();

JFrame f = new JFrame("name");

public static void main(String[] args) {
new Main();

}

public Main() {

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(WIDTH * SCALE, HEIGHT * SCALE);
f.setResizable(false);

f.add(new BackGround());
f.add(new Ranger());
f.setVisible(true);

running = true;

run();
}

public void run() {
while (running) {
//handles in game events NPCs, Traps etc.
}
}

}

我的背景类(class)

    package com.projectelrond.main;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;


public class BackGround extends JPanel {

private static final long serialVersionUID = 1L;

public BufferedImage Bg;

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(Bg, 0, 0, null);
}

public BackGround() {

try {
Bg = ImageIO.read(new File("src/Images/BG.png"));
} catch (IOException e) {
e.printStackTrace();
}

}


}

最后但并非最不重要的一点是我尝试添加的 Sprite

    package com.projectelrond.Sprites;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Ranger extends JPanel{

private static final long serialVersionUID = 1L;

public BufferedImage RangerIm;

public Ranger() {
try {
RangerIm = ImageIO.read(new File("src/Images/Sprites/Ranger.png"));
} catch (IOException e) {
e.printStackTrace();
}
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(RangerIm, 0, 0, null);
}

}

感谢您的所有帮助,如果您希望分享任何提示,我们将非常感激。

最佳答案

g.drawImage(RangerIm, 0, 0, null);

您正在按实际大小绘制图像。无需为此进行定制绘画。如果您想缩放图像,您可以进行自定义绘画。

相反,您可以将 JLabelImageIcon 一起使用:

BufferedImage rangerIm = ImageIO.read(new File("src/Images/Sprites/Ranger.png"));
JLabel ranger = new JLabel( new ImageIcon(rangerIm) );
ranger.setSize( ranger.getPreferredSize() );

BufferedImage backgroundIm = Bg = ImageIO.read(new File("src/Images/BG.png"));
JLabel background = new JLabel( new ImageIcon(rangerIm) );

background.add( ranger );
f.add(background, BorderLayout.CENTER);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.pack();
f.setVisible(true);

现在,护林员已添加到添加到框架的背景中。另外,您需要在框架可见之前将组件添加到框架中()。 pack() 方法将使框架的大小与背景图像的大小相同。

关于java - 如果我将 Sprite 添加到 jframe 中,我的背景就会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com