我试图在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
答案 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毫秒在那个位置绘制图像,这就是你如何得到一艘船(以及任何其他物体)看起来像是在他们四处移动屏幕。