在Java中使用图像代替矩形?
这是我第一次尝试用java创建2d游戏,我制作了一个8位的小角色,我想用它来代替屏幕上出现的矩形。我不太明白如何将.png图像放入矩形中,或者如何制作角色,在本例中,是保存到硬盘上的图像。谢谢在Java中使用图像代替矩形?,java,Java,这是我第一次尝试用java创建2d游戏,我制作了一个8位的小角色,我想用它来代替屏幕上出现的矩形。我不太明白如何将.png图像放入矩形中,或者如何制作角色,在本例中,是保存到硬盘上的图像。谢谢 import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class Keying extends JPanel { pub
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Keying extends JPanel {
public Rectangle character;
public int charW = 24;
public int charH = 36;
public boolean right = false;
public boolean left = false;
public boolean up = false;
public boolean down = false;
public Keying(Display f, Images i)
{
character = new Rectangle(180, 180, charW, charH);
f.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_D)
{
right = true;
}
if (e.getKeyCode() == KeyEvent.VK_A)
{
left = true;
}
if (e.getKeyCode() == KeyEvent.VK_S)
{
down = true;
}
if (e.getKeyCode() == KeyEvent.VK_W)
{
up = true;
}
}
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_D)
{
right = false;
}
if (e.getKeyCode() == KeyEvent.VK_A)
{
left = false;
}
if (e.getKeyCode() == KeyEvent.VK_S)
{
down = false;
}
if (e.getKeyCode() == KeyEvent.VK_W)
{
up = false;
}
}
});
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.setBackground(Color.white);
g.setColor(Color.black);
g.fillRect(character.x, character.y, character.width, character.height);
if (right)
{
character.x += 1;
}
if (left)
{
character.x -= 1;
}
if (down)
{
character.y += 1;
}
if (up)
{
character.y -= 1;
}
repaint();
}
}
这个过程相对简单 从加载角色图像开始
public class Keying extends JPanel {
//public Rectangle character;
private java.awt.BufferedImage character;
private java.awt.Point characterLocation;
//...
public Keying(Display f, Images i) throws IOException
{
character = javax.ImageIO.read(...);
characterLocation = new Point(0, 0);
//...
有关更多详细信息,请参阅
然后,您只需绘制字符
图像
@Override
protected void paintComponent(Graphics g)
{
g.drawImage(character, characterLocaiton.x, characterLocation.y, this);
建议
- 避免使用
,因为它很容易关注您不想处理的问题。请改为使用键绑定,有关详细信息,请参阅KeyListener
- 避免将任何逻辑放在任何绘制例程中,绘制可以在任何时间进行,其中许多是您无法控制的,这可能会使您的角色朝着您不期望的方向移动,或者比他们应该的速度更快。相反,这属于负责更新状态和调度绘制请求的主游戏循环
- 永远不要在任何绘制方法中更改组件的状态,这可能会导致绘制请求的无限循环,这将消耗您的系统资源。在您的上下文中,不要调用
(当您调用此选项时,背景已经被绘制)或setBackground
repaint
ImageIO.read
?在与类相同的包中,路径只是.png图像的名称。我猜我必须使用like/test/src/(图像名称)?使用character=ImageIO.read(new File())
b尝试使用类似ImageIO.read(getClass().getResource(“图像名称”))
(别忘了包含图像扩展名)是的:你太棒了!谢谢你,我的朋友