加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

用Java填充HUD

发布时间:2020-12-15 04:27:55 所属栏目:Java 来源:网络整理
导读:我决定使用上面的图片制作HUD,但我不知道 Java中需要使用什么命令,因为我可以分别填充上半部分和下半部分. 我只知道如何使用g.fillRect();命令,它将需要大约20个这些命令来填补这一半. public class HUD { private Player player; private BufferedImage ima
我决定使用上面的图片制作HUD,但我不知道 Java中需要使用什么命令,因为我可以分别填充上半部分和下半部分.
我只知道如何使用g.fillRect();命令,它将需要大约20个这些命令来填补这一半.

public class HUD {

    private Player player;
    private BufferedImage image;
    private Font font;
    private Font font2;
    private  int Phealth = Player.getHealth();

    public HUD(Player p) {
        player = p;
        try {
            image = ImageIO.read(getClass().getResourceAsStream("/HUD/HUD_TEST.gif"));
            font = new Font("Arial",Font.PLAIN,10);
            font2 = new Font("SANS_SERIF",Font.BOLD,10);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void draw(Graphics2D g) {

        g.drawImage(image,10,null);
        g.setFont(font2);
        g.setColor(Color.black);
        g.drawString("Health:",30,22);
        g.drawString("Mana:",25,47);
        g.setFont(font);
        g.drawString(Player.getHealth() + "/" + player.getMaxHealth(),64,22);
        g.drawString(player.getCubes() / 100 + "/" + player.getMaxCubes() / 100,55,47);
        g.setColor(Color.red);
        g.fillRect(1,Phealth * 25,4);
        g.setColor(Color.blue);
        g.fillRect(1,31,player.getCubes() / 33,4);
    }
}

这是到目前为止HUD的代码.
任何填充形状的帮助都会有所帮助.

解决方法

删除了#1的想法! (它似乎没有用.)

好的,想法#2:

?此搜索
?镜像2
?图像3

所以,有3个.png图像.

>首先绘制Image1,然后直接在其上绘制Image2和Image3.
>要填充红色/蓝色条,请相应地剪切Image2和Image3(即切掉它们的左侧)

剪裁上看看this.
根据玩家的HP / Mana,这需要对剪辑量进行一些小的计算,但它应该足够好.

它应该是这样的(在Paint中完成剪切和覆盖)

更新(问题解决了,使用Idea#2!):

码:

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

@SuppressWarnings("serial")
public class TestGraphics extends JFrame implements ActionListener
{
    JPanel utilBar = new JPanel();

    JButton hpUpBtn = new JButton("HP++");
    JButton hpDownBtn = new JButton("HP--");
    JButton mpUpBtn = new JButton("MP++");
    JButton mpDownBtn = new JButton("MP--");

    GraphicsPanel drawingArea = new GraphicsPanel();

    TestGraphics()
    {   
        setSize(600,500);
        setLayout(new BorderLayout());

        add(utilBar,BorderLayout.NORTH);
        utilBar.setLayout(new GridLayout(1,4));

        utilBar.add(hpUpBtn);
        utilBar.add(hpDownBtn);
        utilBar.add(mpUpBtn);
        utilBar.add(mpDownBtn);

        add(drawingArea,BorderLayout.CENTER);

        hpUpBtn.addActionListener(this);
        hpDownBtn.addActionListener(this);
        mpUpBtn.addActionListener(this);
        mpDownBtn.addActionListener(this);

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == hpUpBtn) {
            drawingArea.incHp();
        }
        else if (e.getSource() == hpDownBtn) {
            drawingArea.decHp();
        }
        else if (e.getSource() == mpUpBtn) {
            drawingArea.incMp();
        }
        else if (e.getSource() == mpDownBtn) {
            drawingArea.decMp();
        }

        System.out.println("Player HP: " + drawingArea.getHp() +
                " Player MP: " + drawingArea.getMp());

        drawingArea.revalidate();
        drawingArea.repaint();
    }

    public static void main(String[]agrs)
    {
        new TestGraphics();
    }
}

@SuppressWarnings("serial")
class GraphicsPanel extends JPanel {

    private static int baseX = 150;
    private static int baseY = 150;

    private static final int BAR_FULL = 287;
    private static final int BAR_EMPTY = 8;

    private BufferedImage image1 = null;
    private BufferedImage image2 = null;
    private BufferedImage image3 = null;

    private int playerHp = 100;
    private int playerMp = 100;

    public GraphicsPanel() {
        try {
            // All 3 images are the same as those posted in answer
            image1 = ImageIO.read(
                    getClass().getResourceAsStream("/Image1.png"));
            image2 = ImageIO.read(
                    getClass().getResourceAsStream("/Image2.png"));
            image3 = ImageIO.read(
                    getClass().getResourceAsStream("/Image3.png"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void incHp() { playerHp += (playerHp < 100) ? 5 : 0; }
    public void decHp() { playerHp -= (playerHp > 0) ? 5 : 0; }
    public void incMp() { playerMp += (playerMp < 100) ? 5 : 0; }
    public void decMp() { playerMp -= (playerMp > 0) ? 5 : 0; }

    public int getHp() { return playerHp; }
    public int getMp() { return playerMp; }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Clear the graphics
        g.setClip(null);
        g.setColor(Color.BLACK);
        g.fillRect(0,600,600);

        g.drawImage(image1,baseX,baseY,null);

        int hpPerc = (int) ((BAR_FULL - BAR_EMPTY) * (playerHp / 100.0));
        g.setClip(baseX + BAR_EMPTY + hpPerc,500);
        g.drawImage(image2,null);
        g.setClip(null);

        int mpPerc = (int) ((BAR_FULL - BAR_EMPTY) * (playerMp / 100.0));
        g.setClip(baseX + BAR_EMPTY + mpPerc,500);
        g.drawImage(image3,baseY + 78,null);
        g.setClip(null);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读