如何在逻辑结构中将图形组件存储在一起?

时间:2016-01-08 04:44:53

标签: java arrays loops java-2d

我写了一个刽子手游戏,我想添加一些Java2D图形。我相信大多数人都知道这一点,但为了以防万一,让我说清楚。在刽子手中,在每次犯错之后,只需要一点点"悬挂"绘制棒图直到完成。

因此,当我绘制它时,逻辑方法是运行for循环并绘制与错误一样多的组件。因为我知道我需要绘制组件的顺序,所以我可以遍历数组类型以便绘制。现在,如果我只是使用java.awt.Rectangle而不是这样,那就创建一个Rectangle的数组。但是,因为对于hangman我也使用一个Ellipse2D,我需要一种方法将两个图形组件以数组类型格式存储在一起。我可以用它做什么? (我听说过ArrayLists,但我根本不知道如何使用它们,我相信你还需要为它们指定一个对象类型)

示例代码也将大大增加。如果这是不可能的,请告诉我,因为我可以独立地画头。

static int mistakes = 3;
static Ellipse2D head = new Ellipse2D.Double(420, 210, 160, 160); 
static Rectangle torso = new Rectangle(3, 3, 3, 3);
static Rectangle leftArm = new Rectangle(3, 3, 3, 3);
static Rectangle rightArm = new Rectangle(3, 3, 3, 3);
static Rectangle leftLeg = new Rectangle(3, 3, 3, 3);
static Rectangle rightLeg = new Rectangle(3, 3, 3, 3);

Rectangle[] hangman = new Rectangle[5];
hangman[0] = torso;
hamgman[1] = leftArm;
//continue... 

for(int i = 0; i < mistakes; i++) g2d.draw(hangman[i]); //but then the head is left out :( 

1 个答案:

答案 0 :(得分:1)

您可以使用Shape数组:[Shape]称为shapes,或ArrayList<Shape>,然后将其填入Ellipse2DRectangle2D,{{ 1}}和类似的对象。请注意,要绘制Shape派生对象,您需要使用Graphics2D对象,因此在JPanel的Line2D方法中,请务必先将Graphics对象强制转换为Graphics2D:

paintComponent(Graphics g)

然后你的for循环可以循环遍历你的数组,从0循环到errorCount(但首先要确保errorCount永远不会是>数组的长度。例如,

Graphics2D g2 = (Graphics2D) g;