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 に答える