2015-12-17 2 views
-2

Я пытаюсь создать игру в разделе Обработка. В основном это понг. У меня 3 класса. Основной класс (PongRunner), класс для мяча (PongBall) и класс для ракетки (PongRacket).Как отображать и использовать объект в основном классе обработки

Я пытаюсь показать объект PongRacket в классе PongRunner, но он не отображается. Вот мой код:

Класс PongRacket:

// this is the class for the pong racket used in the game 
    // it specifies the racket's attributes and methods 

    public class PongRacket{ 

     // attributes of the pong racket 
     private int racketWidth = (1/9)*width; // width of the racket 
     private int racketHeight = (1/15)*height; // height of the racket 
     private int startRacketXPosition = (4/9)*width; // x value for starting position of racket 
     private int startRacketYPosition = (14/15)*height; // y value for starting position of racket 

     // display the racket 
     public void displayRacket(){ 
     fill(0, 0, 0); // color for racket is black 
     rect(getStartRacketXPosition(), getStartRacketYPosition(), getRacketWidth(), getRacketHeight()); 
     } 

     // move the racket 
     public void moveRacket(){ 

     } 

     // setters 
     public void setRacketWidth(int myWidth){ 
     this.racketWidth = myWidth; 
     } 

     public void setRacketHeight(int myHeight){ 
     this.racketHeight = myHeight; 
     } 

     // getters 
     public int getRacketWidth(){ 
     return this.racketWidth; 
     } 

     public int getRacketHeight(){ 
     return this.racketHeight; 
     } 

     public int getStartRacketXPosition(){ 
     return startRacketXPosition; 
     } 

     public int getStartRacketYPosition(){ 
     return startRacketYPosition; 
     } 

    } // end class PongRacket 

PongRunner класс

//this is the main class that runs the game 
    // it consists of a racket 
    // why doesn't the racket get displayed? 

    PongRacket racket = new PongRacket(); // creates the racket object 

    void setup(){ 
     size(width, height); 
     frame.setResizable(true); // the frame can be resized now 
    } 

    void draw(){ 
     background(255); // color for background is white 
     racket.displayRacket(); // why isn't this getting displayed? 

    } 

Всякий раз, когда я называю:

racket.displayRacket(); // inside the PongRunner class 

Это не работает или отобразить что-либо на экране , Как я могу заставить его работать?

+0

Что ваш вопрос? – ataylor

+0

Извините, мой вопрос не был ясен @ataylor. Я вызываю метод displayRacket() на моем объекте racket из PongRacket внутри моего класса PongRunner, но он не работает или не отображает ничего. Как я могу отобразить его на экране? – stego

ответ

0

я могу определить два основных вопроса:

  1. Вы создаете PongRacket() перед вызовом size() (не рекомендуется)
  2. Вы делаете целочисленное деление (1/9), (1/15), (4/9), (14/15). Если вы println(); каждый из них вы увидите, что результат равен 0 (println(14/15);). Пожалуйста, используйте вместо поплавков (println(14.0/15);)

Вот основной рефакторинг:

PongRacket racket; 

void setup() { 
    size(width, height); 
    frame.setResizable(true); // the frame can be resized now 
    racket = new PongRacket(); // creates the racket object 

} 

void draw() { 
    background(255); // color for background is white 
    racket.displayRacket(); // why isn't this getting displayed? 
} 

public class PongRacket { 

    // attributes of the pong racket 
    private float racketWidth = (1.0/9)*width; // width of the racket 
    private float racketHeight = (1.0/15)*height; // height of the racket 
    private float startRacketXPosition = (4.0/9)*width; // x value for starting position of racket 
    private float startRacketYPosition = (14.0/15)*height; // y value for starting position of racket 

    // display the racket 
    public void displayRacket() { 
    fill(0, 0, 0); // color for racket is black 
    rect(getStartRacketXPosition(), getStartRacketYPosition(), getRacketWidth(), getRacketHeight()); 
    } 

    // move the racket 
    public void moveRacket() { 
    } 

    // setters 
    public void setRacketWidth(int myWidth) { 
    this.racketWidth = myWidth; 
    } 

    public void setRacketHeight(int myHeight) { 
    this.racketHeight = myHeight; 
    } 

    // getters 
    public float getRacketWidth() { 
    return this.racketWidth; 
    } 

    public float getRacketHeight() { 
    return this.racketHeight; 
    } 

    public float getStartRacketXPosition() { 
    return startRacketXPosition; 
    } 

    public float getStartRacketYPosition() { 
    return startRacketYPosition; 
    } 
} 
+0

Спасибо @George Profenza, это сработало. Это произошло потому, что я не использовал float для переменных, и я создавал объект PongRacket(), прежде чем вызывать размер так же, как вы сказали. Благодаря! Я пытаюсь ответить на ваш ответ, но он говорит, что мне нужно увеличить мою репутацию, чтобы проголосовать. Недавно я присоединился. – stego

+0

Однако, когда я изменяю размер рамки, объект ракетки также не изменяется. Как я могу создать созданный PongRacket() для правильного изменения размера ширины и высоты кадра? – stego

+0

Поскольку вы устанавливаете размеры один раз. Постоянно обновляйте их. Например, вы можете добавить эти строки в начало '' 'displayRacket()' '' функций: '' 'racketWidth = (1.0/9) * width; // ширина ракетки racketHeight = (1.0/15) * высота; // высота ракетки''' –

Смежные вопросы