我正在制作一款2D垂直射击游戏,其中一切都是编码(和工作)但图形。我之前没有使用过Graphics类,所以这对我来说都是新手。以下是我用于将所有内容绘制到JFrame的代码:
public void paintAll()
{
Graphics h = new Graphics2D();
for(Bullet j : GameState.getEnBullets()){
h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
for(Enemy j : GameState.getEnemies()){
h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
for(Bullet j : GameState.getPlayBullets()){
h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
this.paint(h);
}
第一行“Graphics h = new Graphics2D();”产生错误,因为Graphics2d是抽象的,但我不知道从哪里开始。
我需要代码来获取我拥有的所有图像并将它们绘制到JFrame中的点。我提醒你,我以前从未这样做过,所以请告诉我这是否是错误的做法。
答案 0 :(得分:6)
改为覆盖paintComponent()
;它将提供Graphics
上下文。您可以cast将其Graphics2D
。
Graphics2D g2d = (Graphics2D) g;
附录:这假设您在paintComponent()
中覆盖了JComponent
,然后将其添加到JFrame
。
答案 1 :(得分:4)
与Will的第二个主题(我的直升机视图)有关同一事物Error with timer and JFrame
的联系然后通过安德鲁汤普森的魔法世界来纠正直觉
我补充说(我希望这是正确的,因为我不喜欢paint,paintComponent或paintComponents以及自定义图形)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class MinimumSize extends JFrame {
private static final long serialVersionUID = 1L;
public MinimumSize() {
setTitle("Custom Component Test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void display() {
add(new CustomComponent());
pack();
setMinimumSize(getSize());// enforces the minimum size of both frame and component
setVisible(true);
}
public static void main(String[] args) {
MinimumSize main = new MinimumSize();
main.display();
}
}
class CustomComponent extends JComponent {
private static final long serialVersionUID = 1L;
@Override
public Dimension getMinimumSize() {
return new Dimension(100, 100);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}