Перемещение объектов вместе - PullRequest
0 голосов
/ 18 февраля 2020

Напишите публикуемый c метод экземпляра move (), который принимает два целочисленных аргумента, представляющих сумму, на которую можно изменить значения переменных экземпляра xPos и ​​yPos. Метод не должен возвращать значения. Следует использовать предоставленный метод delay (), чтобы сделать паузу, чтобы результаты многократного запуска метода были видны, например this.delay (20);

приостанавливает выполнение на 20 мс.

Проверьте свой код, переместив экземпляр StickFigure и убедившись, что он остается выровненным.

У меня есть код ниже, но я не могу понять, как совместить все 3 фигуры, кажется, что только треугольник двигаться.

public class StickFigure
{
   /*Instance variables*/   
   private int xPos;//The horizontal position of a StickFigure
   private int yPos;//The vertical position of a StickFigure
   private Circle head;
   private Triangle body;
   private Rectangle leg;
   //   add your declarations here for part (a)(i)

   /**
    * Constructor for objects of class StickFigure that 
    * provides a default stick figure near the bottom left corner of the graphical display.
    * 
    */
   public StickFigure()
   {
      super();
      this.head = new Circle (30, OUColour.PINK);
      this.body = new Triangle (50, 50, OUColour.RED);
      this.leg = new Rectangle (6, 50, OUColour.PINK);
      this.setXPos(25);  //sets starting position towards bottom left of Shapes window
      this.setYPos(220);
      this.alignAll();
   }   

   /**
    * Sets the xPos of the receiver to the value of the argument.
    */
   public void setXPos(int newPos)
   {
      this.xPos = newPos;
      this.body.setXPos(newPos);
      this.alignAll();
      //part (b)(iii)
   }

   /**
    * Returns the xPos of the receiver.
    */
   public int getXPos()
   {
      return this.xPos; 
   }

   /**
    * Sets the yPos of the receiver to the value of the argument.
    */
   public void setYPos(int newPos)
   {
      this.yPos = newPos;
      this.body.setYPos(newPos);
      this.alignAll();

      //part (b)(iii)
   }

   /**
    * Returns the yPos of the receiver.
    */
   public int getYPos()
   {
      return this.yPos;
   }  

   /**You will need to uncomment these methods when directed to*******/

   /**
    * Returns a reference to the head of the receiver.
    */
   public Circle getHead()
   {
      return this.head;   
   }

   /**
    * Returns a reference to the body of the receiver.
    */
   public Triangle getBody()
   {
      return this.body;   
   }

   /**
    * Returns a reference to the leg of the receiver.
    */
   public Rectangle getLeg()
   {
      return this.leg;   
   }

   /**
    * Aligns the head of the receiver relative to the xPos and yPos of the body.
    */
   public void alignHead()   
   {
      this.head.setXPos(this.body.getXPos() + (this.body.getWidth() - this.head.getDiameter())/2);
      this.head.setYPos(this.body.getYPos() - this.head.getDiameter());
   }  

   /**
    * Aligns the body of the receiver relative to the xPos and yPos of the head.
    */
   public void alignBody()   
   {
      this.body.setXPos(25);
      this.body.setYPos(220);
   } 

   /**
    * Aligns the leg of the receiver relative to the xPos and yPos of the head and body.
    */
   public void alignLeg()   
   {
      this.leg.setXPos(this.body.getXPos() + (this.body.getWidth() - this.leg.getWidth())/2);
      this.leg.setYPos(this.body.getYPos() + this.leg.getHeight());
   } 

   /**
    * Aligns all the body parts of the receiver to form the
    * StickFigure-type figure.
    */

   public void alignAll()
   {
      this.alignBody();
      this.alignHead();      
      this.alignLeg();
   }

   public void move(int xPos, int yPos)
   {
      this.alignAll();
      this.body.setXPos(xPos + xPos);
      this.body.setYPos(yPos + yPos);
      this.delay(20);


   }

1 Ответ

1 голос
/ 18 февраля 2020

Разве ваши move() не должны устанавливать xPos и ​​yPos. так:

 this.body.setXPos(xPos + xPos);
 this.body.setYPos(yPos + yPos);

должно быть

 this.setXPos(this.xPos + xPos);
 this.setYPos(this.yPos + yPos);

с последующим и alignAll()

Тогда ваш alignBody() говорит: «Выравнивает тело приемника относительно xPos и ​​yPos головы ", но ваш метод этого не делает ... Кажется, голова / нога относительно тела. Так может тела X, Y должны быть относительно xPos и ​​yPos?

...