2013-11-17 2 views
0

Я абсолютно новым для Java, так что извините за мою глупость ... я следующий кодПочему переменные, которые я получаю, должны быть статическими?

public class player { 

    float height=100; 
    float basex=0; 
    float x=0; 
    float y=(Display.getHeight()/2)-height/2; 
    float width=15; 
    float speed=2.5f; 

    public void drawPlayer(){ 

     glBegin(GL_QUADS); 
     glVertex2f(basex+x,y); 
     glVertex2f(basex+x+width, y); 
     glVertex2f(basex+x+width, y+height); 
     glVertex2f(basex+x, y+height); 
     glEnd(); 


    } 

    public float getPy() { 
     // TODO Auto-generated method stub 
     return y; 
    } 

} 

Но когда я использую player.getPy() в основной метод, он говорит, что переменная «Y «должен быть статичным ... Но я не могу сделать его статичным, потому что у меня есть 2 игрока. Я попытался использовать player.y, то же самое.

Что мне делать? Спасибо за помощь и извините за мой английский.

ответ

0

Вам нужно вызвать метод с использованием ссылки на объект, который вы создали, а не имя класса, как:

player p = new player(); // Create a new player and call it p 
p.getPy();    // Call the getPy() method for the player called p 
+0

хорошо я но, когда я меняю его на статичный, тогда мне придется изменить y на статику тоже ... это то, что я не могу использовать, потому что у меня есть 2 игрока. Когда я нажимаю, например, клавишу «W», то оба они будут двигаться вверх, и это то, чего я не хочу. –

+1

@MarekSchubert Не меняйте его на статический, но вызывайте метод, используя ссылку на объект. – jpw

0

Вы устанавливаете у как поле класса, в то время как он должен получить высоту каждый раз, когда вы получаетеPY(). Вместо того, чтобы вы лучше положить, что логика в самой функции, которая дала бы:

public float getPy() { 
    return (Display.getHeight()/2)-height/2; 
} 

И конечно вы должны иметь экземпляр класса, а не просто использовать его

player.getPy(); 
Смежные вопросы