2014-09-17 2 views
0

У меня есть метод, который изменяет текстуру на другую случайную.Libgdx java, Texture update method confusion

public void Texturechange(Texture texture){ 
     String imagename; 
     randomImage = random.nextInt(90)+1; 
     if (randomImage <10){ 
       imagename="00"+ randomImage +".jpg"; 
      } else if(randomImage >9) { 
       imagename="0"+ randomImage +".jpg"; 
      } 
     Texture newTexture = new Texture(imagename); 

     texture = newTexture; 

    } 

После печати результатов я вижу текстуру изменен newTexture но не обновляется на screen.However следующий код делает обновление на экране может кто-нибудь сказать мне, почему?

public void Texturechange(Texture texture){ 
      String imagename; 
      randomImage = random.nextInt(90)+1; 
      if (randomImage <10){ 
        imagename="00"+ randomImage +".jpg"; 
       } else if(randomImage >9) { 
        imagename="0"+ randomImage +".jpg"; 
       } 

      Texture newTexture = new Texture(imagename); 

      if(texture== theNameOfTextureInput){ 

     theNameOfTextureInput=newTexture; 
     } 





     } 

ответ

1

Поскольку Java является pass by value, изменяя ссылку параметра метода texture в первом случае не изменит исходную ссылку, который был передан в метод. Другими словами, назначение texture = newTexture; будет не изменить оригинал texture, который был передан вызывающим методом.

Во втором случае, вы назначая newTexture в полеtheNameOfTextureInput класса (я говорю это поле, так как переменная не объявлена ​​в методе). Вы можете изменить поле (назначить ему новую ссылку) из любого метода, пока метод может получить доступ к полю, и изменение будет отражено во всем классе (или объекте в зависимости от того, является ли поле статическим или нет).