手动翻译多边形

时间:2016-02-19 18:53:53

标签: java swing jpanel awt

public class Hexagon extends JPanel {
    // Team that controls the hexagon 
    public int controller; // 0 neutral // 1 is team 1 // 2 is team 2
    // Color of the hexagon
    // /* All attributes of the board, used for size an boarder etc... */ Board board
    // /* Determines where the hexagon sits on the game board */ int position

public static void main(String args[])
{
    JFrame j = new JFrame();
    j.setSize(350, 250);
    for(int i = 0; i < 121; i++)
    {
        Hexagon hex = new Hexagon();
        j.add(hex); 
    }
    j.setVisible(true);
}

@Override
public void paintComponent(Graphics shape)
{
    super.paintComponent(shape);

    Polygon hexagon = new Polygon();

    // x, y coordinate centers, r is radius from center
    Double x, y;
    // Define sides of polygon for hexagon
    for(int i = 0; i < 6; i++)
    {
        x = 25 + 22 * Math.cos(i * 2 * Math.PI / 6);
        y = 25 + 22 * Math.sin(i * 2 * Math.PI / 6);
        hexagon.addPoint(x.intValue(), y.intValue());
    }
    // Automatic translate
    hexagon.translate(10, 10);
    // How do I manually control translate?
    shape.drawPolygon(hexagon);
}
}

如何手动翻译多边形?我需要这样做来创建一个游戏板。到目前为止,我只完成了多边形的自动翻译,这绝对是我不需要的。

1 个答案:

答案 0 :(得分:3)

  

我的意思是参数化它,以便它不总是10。

然后你需要你班级的参数:

  1. 在类中创建一个方法,如`setTranslation(int x,int y),并将x / y值保存到实例变量。
  2. 在paintComponent()方法中引用这些实例变量
  3. 然后,当您创建Hexagon时,您可以手动设置翻译。
  4. 类似的东西:

    public void setTranslation(int translationX, int translationY)
    {
        this.translationX = translationX;
        this.translationY = translationY;
    }
    
    ...
    
    //hexagon.translate(10, 10);
    hexagon.translate(translateX, translateY);
    
    ...
    
    Hexagon hex = new Hexagon();
    hex.setTranslation(10, 10);
    

    或者,您可以将转换值作为参数传递给Hexagon类的构造函数。关键是如果您希望每个Hexagon具有不同的翻译,您需要在Hexagon类中拥有自定义属性。