如何将自定义图像映射到游戏中的多边形?

时间:2014-04-21 22:48:33

标签: java

我试图在java中重新制作小行星,但是我会用秃头鹰作为击落苏联国旗的船。现在,我的秃鹰图像是一个围绕鹰的白色轮廓的正方形。我想删除它,有没有办法以一对一的方式将其映射到多边形的各种各样?

这是我的代码,虽然我不确切知道这对我们有什么帮助:

 public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    GameTest t = new GameTest();
}

public static class GameTest extends JFrame {

    private static final int WINDOW_WIDTH = 800;
    private static final int WINDOW_HEIGHT = 500;
    private GamePanel gamePanel;

    public GameTest() throws IOException {
        super("Deep Fried Freedom");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setLayout(new BorderLayout());
        gamePanel = new GamePanel();
        add(gamePanel);
        center(this);
        setVisible(true);
    }

    public static void center(JFrame frame) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Point center = ge.getCenterPoint();

        int w = frame.getWidth();
        int h = frame.getHeight();

        int x = center.x - w / 2, y = center.y - h / 2;
        frame.setBounds(x, y, w, h);
        frame.validate();
    }//end of center method  
}
}


public class GamePanel extends JPanel {
public static BufferedImage baldEagleImage;

public GamePanel() throws IOException {
    super();
    baldEagleImage = ImageIO.read(new File("baldeagleimage.jpg"));
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.black);// set color black
    g.fillRect(0, 0, getWidth(), getHeight()); // paint background
    g.drawImage(baldEagleImage, 350, 175, null);//paint the launcher
}//end paintComponent method
}//end GamePanel class

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式实现此效果。您最好的选择是使用图像的Alpha通道。只需在Gimp等图像编辑工具中打开图像即可。在此设置中,图像的背景在图像周围变为透明。

另一个选项(不是最好的)但满足您的要求是在Java2D中使用绘画描边。看看使用java2d剪辑功能。您可以获得有关此here

的教程

答案 1 :(得分:0)

通常你会有一个代表船只的Java对象,它有x和y坐标,叫做centerX和centerY。这使您可以在可视区域的范围内在屏幕上显示船的中心。当您希望船舶上下移动时,您可以修改这些值,并且您也可以在这些坐标处g.drawImage想要使用的图像(以及根据需要使任何偏移使图像看起来居中于您的喜好)。

一种常见的方法是在初始化时启动一个线程,并且该线程是一个while(true)块,它对需要更新的所有对象执行update()方法,然后是Thread.sleep(17) )模仿每秒约60帧的帧速率。在这种方法中,你的船有X和Y坐标更新,然后每隔17毫秒在那个位置绘制图像,这就是你如何得到一艘船(以及任何其他物体)看起来像是在他们四处移动屏幕。