如何在Java中使用两个图像?
我想做一个有背景的游戏。我使用了一个可移动的图像,它工作正常。以下是我的源代码: 类1(RType.java): 第2类(Board.java): 第3类(Sprite.java): 第4类(Background.java): 背景类似乎不起作用。我通过执行如何在Java中使用两个图像?,java,swing,Java,Swing,我想做一个有背景的游戏。我使用了一个可移动的图像,它工作正常。以下是我的源代码: 类1(RType.java): 第2类(Board.java): 第3类(Sprite.java): 第4类(Background.java): 背景类似乎不起作用。我通过执行add(newbackground())将类添加到JFrame,但它不工作。救命?!!?movable image类工作正常 您没有提供任何约束来将零部件定向到不同的位置: add(new Background()); add(new
add(newbackground())将类添加到JFrame
代码>,但它不工作。救命?!!?movable image类工作正常
您没有提供任何约束来将零部件定向到不同的位置:
add(new Background());
add(new Board());
JFrame
默认使用BorderLayout
。它有FIRST、LAST、CENTER
etc类型的约束来确定其组件的方向。您可以使用它们,例如:add(newbackground(),BorderLayout.CENTER)代码>
不要使用绘制(图形g)
进行自定义绘制。重写paintComponent(Graphics g)
函数,不要忘记在其内部调用super.paintComponent(g)
那么BorderLayout(我知道它是默认的)会把背景放在角色后面吗
不可以。大多数布局管理器都是二维的,因此不能使用同一个父面板在另一个组件上添加组件。因此,以下措施将不起作用:
add(new Background());
add(new Board());
相反,您需要这样的代码:
Board board = new Board();
Background background = new Background();
background.setLayout( new BorderLayout() );
background.add(board);
add(background, BorderLayout.CENTER);
这仍然不起作用,因为电路板是不透明的,会在背景的顶部作画。您可以通过使电路板不透明来解决此问题
实际上,背景/电路板应该是单个组件。它的工作是绘制背景,然后绘制精灵
用箭头键移动精灵
不要使用KeyListener。有关使用键绑定的原因和解决方案,请参阅
另外,Swing在默认情况下是双缓冲的,因此不需要对组件进行双缓冲。Sage,我想要角色背后的背景。我不知道如何使用BorderLayout将背景置于角色(精灵)后面。@Thelarslog,你错误地认为我想使用BorderLayout
。事实上,JFrame
默认使用BorderLayout
,而不是我。因此,您将两个不同的组件添加到同一个位置,基本上是添加到BorderLayout.CENTER
,因为JFrame的add函数是默认的,所以BorderLayout也是默认的(我知道它是默认的)将背景放在角色后面,同时仍然能够用箭头键移动精灵?我认为您应该将两个图像绘制到同一个组件,并去掉另一个组件。移动图像时,您可以使用repaint(int x,int y,int width,int height)
使用特定位置x,y
重新绘制移动图像。要更快获得更好的帮助,请发布。
package sprites;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Background extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
Image nook;
public Background() {
ImageIcon ii = new ImageIcon(this.getClass().getResource("nook 013.jpg"));
nook = ii.getImage();
}
public void paint(Graphics g) {
Graphics2D g2d = (Grahpics2D) g;
g2d.drawImage(nook, 10, 10, null);
}
}
add(new Background());
add(new Board());
add(new Background());
add(new Board());
Board board = new Board();
Background background = new Background();
background.setLayout( new BorderLayout() );
background.add(board);
add(background, BorderLayout.CENTER);