我写了一个刽子手游戏,我想添加一些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 :(
答案 0 :(得分:1)
您可以使用Shape数组:[Shape]
称为shapes
,或ArrayList<Shape>
,然后将其填入Ellipse2D
,Rectangle2D
,{{ 1}}和类似的对象。请注意,要绘制Shape派生对象,您需要使用Graphics2D对象,因此在JPanel的Line2D
方法中,请务必先将Graphics对象强制转换为Graphics2D:
paintComponent(Graphics g)
然后你的for循环可以循环遍历你的数组,从0循环到errorCount(但首先要确保errorCount永远不会是>数组的长度。例如,
Graphics2D g2 = (Graphics2D) g;