2013-04-21 86 views
-1

我目前正在尝试使用libGDX在Android操作系统上制作游戏,并且我正在为其设置屏幕管理器。我基于这个我在VB.NET中使用的屏幕管理器,并试图将其转换为Java。这是我目前为止的内容,我会告诉你我确切的问题是什么。帮助我的Java AndroidOS游戏

Manager.java

package rawct.gamename.Screen; 

    import java.util.ArrayList; 
    import java.util.Iterator; 
    import java.util.List; 

    import com.badlogic.gdx.Gdx; 

    import rawct.gamename.GameName; 
    import rawct.gamename.Screen.Screens.*; 

    public class Manager extends GameName { 
    private static List<Screen> Screens = new ArrayList<Screen>(); 
    private static List<Screen> NewScreens = new ArrayList<Screen>(); 
    private Screen Debug = new Debug("Debug"); 

    public Manager() { 
     //Gdx.app.log("Manager", "New Instance!"); 
     AddScreen(Debug); 
     //Testing to see which screens were loaded and testing unload 
     UnloadScreen(); 
    } 

    public void AddScreen(Screen NewScreen){ 
     NewScreens.add(NewScreen); 
    } 

    public void Draw(){ 
    } 

    public void UnloadScreen(){ 
     Gdx.app.log("UnloadScreen", "Start"); 
     for(Iterator<Screen> s = NewScreens.iterator(); s.hasNext();){ 
      Gdx.app.log("Screen", ""+s.next().Name); 
      //Should output Debug.Name but isn't, outputting Screen.Name 
     } 
     Gdx.app.log("UnloadScreen", "End"); 
    } 

    public void Update(){ 
    } 
} 

Screen.java

package rawct.gamename.Screen; 

public interface Screen { 
    enum ScreenState { 
     Active, 
     Hidden, 
     ShutDown 
    } 

    public static String Name = null; 
    public ScreenState State = ScreenState.Active; 
    public float Position = 0; 
    public boolean Focused = false; 
    public boolean GrabFocus = true; 

    public void HandleInput(); 
    public void Update(); 
    public void Draw(); 
    public void Unload(); 
} 

和我的测试屏幕

Debug.java现在

package rawct.gamename.Screen.Screens; 

import com.badlogic.gdx.Gdx; 

import rawct.gamename.Screen.Screen; 

public class Debug implements Screen { 
    public Debug(String sName){ 
     // TODO Constructor 
     Gdx.app.log("Debug", "New Instance!"); 
     Name = sName; 
     //Won't let me set name, says "The final sfield Screen.Name cannot be assigned" 
    } 

    @Override 
    public void HandleInput() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void Update() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void Draw() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void Unload() { 
     // TODO Auto-generated method stub 
    } 

} 

好吧,我已经发布的所有代码,我是什么要做的就是访问每个屏幕的每个.Name变量,我将添加到屏幕列表(List)中,但它不会让我按照自己的方式设置/访问屏幕。但它在VB.NET中有效我知道这并不意味着太多,但只是想知道如何在Java中完成这项工作。

我希望能够添加新的屏幕到屏幕列表中,并为它们命名并使用列表访问每个屏幕中的每个方法和变量。

谢谢!

+0

你想用HashMap中的键来访问屏幕吗? – 2013-04-21 05:33:36

+0

你在哪里实现屏幕界面?你在AddScreen()中传递具体的屏幕对象吗? – 2013-04-21 05:40:02

+0

作为屏幕名称的关键是。我只想访问我添加到列表中的屏幕变量和方法。 – Richard 2013-04-21 05:40:20

回答

0

默认情况下,接口中的变量是静态的和最终的。 删除Screen界面中的所有变量。

使具有私有变量的Screen具有私有变量并为其生成getter和setter。

+0

好吧,我已经将它们移除并将它们设置在Debug.java文件中,但是如何从该屏幕访问这些变量? – Richard 2013-04-21 05:45:49

+0

首先,将Screen类声明为'public class Screen {'。 – 2013-04-21 05:47:32

+0

一旦你具体化了,你可以使用Screen实例的setter来设置变量的值和getter方法来访问这些值。我想这就是你想要的。 OMG! – 2013-04-21 05:50:56