java - Libgdx java,纹理更新方法困惑

标签 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;
         }





        }

最佳答案

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

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

关于java - Libgdx java,纹理更新方法困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898395/

相关文章:

java - 从 JpaRepository native 查询返回字符串?

java - 什么是 JAXB,我为什么要使用它?

php - 如何从特定的 PDO 驱动程序对象中获取所有方法的完整列表?

java - Libgdx 的 Matrix4#translate() 无法按预期工作

java - python 中的 LIBGDX 是否比 Java 慢

java - 访问 Nashorn 生成的字节码

java - Selenium 将文本框视为隐藏,即使我可以在浏览器中看到它

java - 访问 ArrayList 中的特定元素

java - 如何加载方法参数中给出的名称的枚举?

java - 在设备的本地存储上创建 Android 保存文件?