1

在 Person 类内部:

  public Point[] endPointArray;
  private int scalar;
  private Head head;
  private Neck neck;

  public Person(){
    scalar = 1;
    endPointArray = new Point[100];
    for ( int i = 0 ; i < 100 ; i++ ){
      endPointArray[i] = new Point();
    }
    positionArray = new int[4];
    point = new Point(0,0);
    endPointArray[0].x = 5;
    endPointArray[0].y = 5;

    head = new Head(neck, endPointArray, scalar);
    neck = new Neck(body, endPointArray, scalar);
  }

  public void draw(Graphics g){
    head.draw(g);
    neck.draw(g);
  }

头部类内部:

// ---------- CONSTANTS. ----------
  private static int Base_Radius = 20;

  // ---------- VARIABLE DECLARATIONS. ----------
  private int radius;
  private int scale; // Scale determines how large the Head will be.
  private Point startingPoint; //Starting Point for the Person and the Head.
  private Point endingPoint; //Ending Point, where the Neck will start from.
  private Point[] endPointArray; // Contains startingPoint in position [0] by this point from Person.
  private Point centre;
  private Neck neck;

  // ----------------------------------------
  // HEAD CREATION.
  // ----------------------------------------
  public Head(Neck neck, Point[] endPointArray, int scale){

    this.neck = neck;
    this.endPointArray = endPointArray;
    this.scale = scale;

    radius = Base_Radius * scale;
    startingPoint = new Point();
    endingPoint = new Point();
    centre = new Point();

    // Copies the value of endPointArray[0] into startingPoint.
    startingPoint.x = endPointArray[0].x;
    startingPoint.y = endPointArray[0].y;

    // Picks the point on the Head where the Neck will start from.
    endingPoint.x = startingPoint.x + radius;
    endingPoint.y = startingPoint.y + ( 2*radius );

    // Assigns the value of the circles centre to the centre point.
    centre.x = startingPoint.x + radius;
    centre.y = startingPoint.y + radius;
    // Puts the value of the endingPoint into the endPointArray[1].
    endPointArray[1].x = endingPoint.x;
    endPointArray[1].y = endingPoint.y;
  }

  // ----------------------------------------
  // DRAW THE HEAD.
  // ----------------------------------------
  public void draw(Graphics g){
    g.drawOval(startingPoint.x, startingPoint.y, radius, radius);
    System.out.println("Radius : " + radius);
    System.out.println("Head Starting Point : ("+startingPoint.x+","+startingPoint.y+").");
    System.out.println("Head Ending Point : ("+endingPoint.x+","+endingPoint.y+").\n");
  }

颈部类内部:

// ---------- CONSTANTS. ----------
 private static int Base_Length = 10;

 // ---------- VARIABLE DECLARATIONS. ----------
 private int length;
 private int scale; // Scale determines how large the Head will be.
 private Point anglePoint;
 private Point startingPoint; //Starting Point for the Person and the Head.
 private Point endingPoint; //Ending Point, where the Neck will start from.
 private Point[] endPointArray; // Contains startingPoint in position [0] by this point from Person.
 private Body body;

 // ----------------------------------------
 // NECK CREATION.
 // ----------------------------------------
 public Neck(Body body, Point[] endPointArray, int scale){

  this.endPointArray = endPointArray;
  this.body = body;
  this.scale = scale;

  length = Base_Length * scale;
  startingPoint = new Point();
  endingPoint = new Point();
  anglePoint = new Point();

  // Making the startingPoint equal to the endPointArray[1].
  startingPoint.x = endPointArray[1].x;
  startingPoint.y = endPointArray[1].y;

  // Seting the values of the point where the neck finishes.
  endingPoint.x = startingPoint.x;
  endingPoint.y = startingPoint.y + length;

 }

 // ----------------------------------------
 // DRAW THE HEAD.
 // ----------------------------------------
 public void draw(Graphics g){
    g.drawLine(startingPoint.x, startingPoint.y, endingPoint.x, endingPoint.y);
    System.out.println("Neck Starting Point : ("+startingPoint.x+","+startingPoint.y+").");
    System.out.println("Neck Ending Point : ("+endingPoint.x+","+endingPoint.y+").");
  }

输出:

半径:20

头部起点:(5,5)。

头部终点:(25,45)。

颈部起点:(25,45)。

颈部终点:(25,55)。

头部在 5,5 处绘制在面板中,并且似乎具有正确的半径。脖子漂浮在远离头部的地方。输出看起来正确,但在视觉上它是不正确的。脖子应该是从头部底部向下的一条水平线,我不知道为什么它的行为不像我期望的那样。抱歉,如果这是一个新手问题,但我现在很困惑。

4

1 回答 1

0

问题是 drawOval 将宽度和高度作为参数,但您传递的是半径。你需要使用:

g.drawOval(startingPoint.x, startingPoint.y, 2 * radius, 2 * radius);

从 API

public abstract void drawOval(int x, int y, int width, int height)
    Draws the outline of an oval. The result is a circle or ellipse that fits within the rectangle specified by the x, y, width, and height arguments.
    The oval covers an area that is width + 1 pixels wide and height + 1 pixels tall.

Parameters:
    x - the x coordinate of the upper left corner of the oval to be drawn.
    y - the y coordinate of the upper left corner of the oval to be drawn.
    width - the width of the oval to be drawn.
    height - the height of the oval to be drawn.
于 2012-07-13T00:20:48.273 回答