2016-01-10 2 views
-1

Я хотел бы сделать движение квадрата только с использованием переменной экземпляра. У меня возникли проблемы, это мой код:Изменение переменной экземпляра

У меня есть один для Variables.JAVA для переменных:

public class Variables { 
     String name; 
     int Playerx; 
     int Playery; 
     int Playerw; 
     int Playerh; 
} 

и один, где он является основным, но не изменяет переменные выше. (упрощенное)

public static void main(String args[]) throws InterruptedException { 

     while (true) { 
      Variables P = new Variables(){ 
       synchronized (c) { 
       c.clear(); 
       first_level(); 
       P.Playerx = 50; 
       P.Playery = 50; 
       P.Playerw = 100; 
       P.Playerh = 100; 

       c.drawRect(P.Playerx, P.Playery, P.Playerw, P.Playerh); 

       } 

       Thread.sleep(25); 

       // Controls 
       if (c.isKeyDown(Console.VK_UP)) { 
        P.Playery -= 10; 

       } 
       else if (c.isKeyDown(Console.VK_DOWN)) { 
        P.Playery += 10; 
       } 
       else if (c.isKeyDown(Console.VK_LEFT)) { 
        P.Playerx -= 10; 
       } 

       else if (c.isKeyDown(Console.VK_DOWN)) { 
        P.Playery += 10; 

       } 
      } 

P.Player(x,y,w,h) Не изменяйте?

Как это можно решить?

+1

Какую графическую библиотеку вы используете? Свинг? Обработка? Другие? Вы знаете, что вы создаете новый экземпляр Variable с каждой итерацией цикла while, правильно? Почему у вас есть синхронизированный блок, когда не происходит многопоточности? –

ответ

0

Вы устанавливаете значения по умолчанию на каждой итерации, ваш код синхронизирован, поэтому ответ на клавиши выполняется после рисования, а на следующей итерации вы снова переопределяете значения, чтобы вы никогда не увидели никаких изменений. Кроме того, вы каждый экземпляр нового объекта P каждый раз не сохраняете предыдущие экземпляры, поэтому они являются GC.

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