修改我试图让我的问题更加清晰。
我有一个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;
知道我该怎么做吗?
答案 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.renderer
和MyGLRenderer.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;