Java 如果我在jframe上添加精灵,我的背景就会消失
我想做一个2d侧滚游戏。我已经能够显示背景,但只要我添加一个精灵,框架上唯一显示的就是精灵。(如果这是一个简单的错误,很抱歉,但我是java新手) 这是我的主课Java 如果我在jframe上添加精灵,我的背景就会消失,java,swing,Java,Swing,我想做一个2d侧滚游戏。我已经能够显示背景,但只要我添加一个精灵,框架上唯一显示的就是精灵。(如果这是一个简单的错误,很抱歉,但我是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,
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.
}
}
}
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();
}
}
}
我的背景课程
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.
}
}
}
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();
}
}
}
最后但并非最不重要的一点是我试图添加的精灵
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);
您正在按图像的实际大小绘制图像。没有必要为此做定制绘画。如果要缩放图像,可以进行自定义绘制
相反,您可以使用带有图像图标的JLabel
:
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()方法将使框架与背景图像的大小相同。谢谢你,它起了作用。我想我把你告诉我的事情弄糟了,但它没有起作用。如果你知道我如何移动我添加的游骑兵,我会很高兴,因为如果你知道,它将节省我大量的搜索(和挫折感)试图让它移动。提前感谢您使用ranger标签的setLocation(…)方法。
RangerIm=ImageIO.read(新文件(“src/Images/Sprites/ranger.png”)代码>应该是RangerIm=ImageIO.read(getClass().getResource(“/Images/Sprites/Ranger.png”)代码>否则,一旦构建和部署应用程序,就会出现问题