libgdx java,纹理更新方法混乱

时间:2014-09-17 19:04:05

标签: java methods libgdx textures

我有一个方法可以将纹理更改为另一个随机纹理。

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,但屏幕上没有更新。但是,以下代码确实在屏幕上更新,任何人都可以告诉我原因吗?

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 个答案:

答案 0 :(得分:1)

因为Java是pass by value,所以在第一种情况下更改方法参数texture的引用不会更改传递给方法的原始引用。换句话说,分配texture = newTexture;更改方法调用方传递的原始texture

在第二种情况下,您将newTexture分配给该类的字段 theNameOfTextureInput(我说这是一个字段,因为该变量未在方法)。只要方法可以访问该字段并且更改将反映在整个类(或对象取决于字段是否为静态),您可以从任何方法更改字段(为其指定新引用)。 / p>