2013-05-06 89 views
0

编辑我试图让我的问题更清晰。更新和共享3个类别之间的变量

我有一个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

如果您在构造函数中初始化变量并且以后不更改变量,那么添加'final'修饰符总是一个好主意。因此,除非有意分配'null',否则编译器会抱怨未初始化的变量。 你能否按照惯例清理你的代码,命名类和变量,并解释'同时,回到我的Renderer类'的含义是什么? – ohaleck 2013-05-06 19:00:44

+0

嗨@ohaleck,我没有这样做,我声明构造函数之外的变量,并在构造函数中初始化它们(即分配给它们)。建议改变我的班级名称。另外,当我说'同时,回到我的Renderer类中'仅仅意味着在我创建了我的逻辑类之后,然后将我的渲染(MyGLRenderer)类中的代码从它的原始格式中更改(即,删除逻辑更新并试图通过我创建的对象来访问它们)。谢谢:-) – Zippy 2013-05-06 19:11:48

+0

当然,这就是我的意思,对不起。将变量作为最终变量应该可以帮助你发现你做错了什么(因为它对我来说似乎很混乱)。 – ohaleck 2013-05-06 19:12:32

回答

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。现在在Logic上调用update()将更新您的Sprite实例中的值spriteX。 上述代码仅适用于如果所有这些类都在同一个包中。如果它们不是,则需要声明Logic.rendererMyGLRenderer.sprite1字段以及Sprite.setX方法,static。

+0

男人,这是真棒,它实际上是工作,我现在可以整理我的主要渲染类 - 谢谢你这个@ohaleck这是一个很好的帮助:-) – Zippy 2013-05-06 22:35:14

+0

很高兴我可以帮助:)祝你好运! – ohaleck 2013-05-06 23:07:15

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; 
+0

嗨@VishalPawale - 谢谢你,这听起来像什么工作 - 我可以请你编辑你的答案与代码示例即使伪代码也会很好) - 谢谢! – Zippy 2013-05-06 19:05:30

+0

好吧...我会编辑我的答案 – 2013-05-06 19:15:33

+0

感谢@VishalPawale,期待着阅读它。 – Zippy 2013-05-06 19:27:00