0

编辑我试图让我的问题更清楚。

我有一个如下所示的 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;

知道我该怎么做吗?

4

2 回答 2

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更新spriteXSprite实例中的值。只有当所有这些类都在同一个包中时,上面的代码才有效。如果不是,则需要将Logic.rendererandMyGLRenderer.sprite1字段以及Sprite.setX方法声明为静态的。

于 2013-05-06T21:08:22.017 回答
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;
于 2013-05-06T19:03:31.873 回答