图形2D用于标记具有变量名称的形状

时间:2014-04-24 13:28:10

标签: java graphics

我已经将图形2D实现到JPanel中,并且已经在它上面绘制了一个cirlce。但是,我希望以后能够调用2D形状以便能够移动它们。我怎么做这样的事情?我尝试将其声明为变量,但我不知道如何,任何帮助都会很棒,谢谢。

package com.aqagame.harrykitchener;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Game 
{



    public Game()
    {

        JFrame window = new JFrame ("Main Game");
        JPanel firstPanel = new JPanel(new GridLayout(3, 1))
        {
            public void paintComponent(Graphics g)
            {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setColor(Color.RED);
            }
        };



        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(firstPanel);
        window.setSize(700, 600);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Game();
            }
        });

    }

}

1 个答案:

答案 0 :(得分:1)

第一步可能是一个自己的类,负责绘制游戏内容。 (用匿名的内部类来解决这个问题并不能很好地扩展)。

您想要绘制的形状可以驻留在List中,您可以简单地迭代它们来绘制它们。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Game 
{
    public Game()
    {

        JFrame window = new JFrame ("Main Game");
        JPanel firstPanel = new GamePanel();

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(firstPanel);
        window.setSize(700, 600);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Game();
            }
        });

    }
}

class GamePanel extends JPanel
{
    private final List<Shape> shapes = new ArrayList<Shape>();

    GamePanel()
    {
        shapes.add(new Ellipse2D.Double(10,20,30,40));
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);

        for (Shape shape : shapes)
        {
            g2d.draw(shape);
        }
    }

}

重要提示:顾名思义,这应该成为游戏&#34;。当你继续这样做时,你很可能遇到严重困难。 Stackoverflow不是一个“答案生成机器”,并且游戏无法通过反复试验进行编程,但涉及一些计划。例如,您现在可以使用鼠标轻松选择形状(使用MouseListener和shape.contains(mousePosition)方法),但拖动它们甚至只是用不同的颜色绘制它们需要一些更大的基础结构。例如,您应该考虑像GameEntity类那样封装游戏中出现的实体等。