在3个类之间更新和共享变量

时间:2013-05-06 18:49:29

标签: android variables inheritance aggregation

修改我试图让我的问题更加清晰。

我有一个MyGLRendering类,我有一个方法,我可以从中进行所有逻辑更新。如你所见,我通过我创建的对象访问我的精灵的X坐标。所以我的'x'变量位于我的Sprite类中。

我想要做的就是将代码从我的更新方法移到它自己的类中。从我的渲染方法中调用它。

public class MyGLRenderer extends Activity implements GLSurfaceView.Renderer {
    Sprite sprite1;
    public MyGLRenderer() {
        sprite1 = new Sprite();
     }


    //Now I can access and update the X variable from from this class like so:

    public void LogicUpdate() {
        sprite1.X = 0;   //I update all my sprites positions here - I want to move all this code into it's own class
    }
}

}

如果我尝试将代码移动到新类,我就无法像上面那样访问变量。

sprite1.X = 0;

知道我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

// Sprite.java
public class Sprite {
    int spriteX; // this will implicitly set 0 here

    void setX(int newX) {
        this.spriteX = newX;
    }
}

// Logic.java
public class Logic {
    final MyGLRenderer renderer;
    public Logic(MyGLRenderer renderer) {
        this.renderer = renderer;
    }

    void update() {
        this.renderer.sprite1.setX(1);
    }
}

// MyGLRenderer.java
// IMHO it is not a good idea to have the Activity implement Renderer, but that's 
// whole another story
public class MyGLRenderer extends Activity implements GLSurfaceView.Renderer {
    final Sprite sprite1;
    public MyGLRenderer() {
        sprite1 = new Sprite();
    }
}

使用上面的代码,为了创建Logic类的对象,您需要将MyGLRenderer传递给它。它引用了一个Sprite对象,可供Logic使用。现在,在update()上调用Logic将更新spriteX实例中Sprite的值。 如果所有这些类都在同一个包中,则上述代码仅适用于 。如果不是,则需要声明Logic.rendererMyGLRenderer.sprite1字段以及Sprite.setX方法静态。

答案 1 :(得分:0)

创建一个静态类,在其中放置渲染器对象&使所有其他类访问此渲染器对象。

SomeStaticClass类 - >

public class SomeStaticClass{

    public static SomeClass objectToShare; // You can also have getter & setter, getter will always check if objectToShare is initialized or not, so that it will prevent NPE

    public static SomeClass getObjecctToShare() {
         if(objectToShare != null){
              return objectToShare;
         }
         //Init objectToShare here
         return objectToShare;
    }
}

现在在其他课程中(假设是逻辑课程) - >

SomeStaticClass.getObjectToShare().something = something;