【问题标题】:Assistance with my Java AndroidOS Game协助我的 Java AndroidOS 游戏
【发布时间】:2013-04-21 05:27:45
【问题描述】:

我目前正在尝试使用 libGDX 在 Android 操作系统上制作游戏,并且正在为它开发屏幕管理器。我基于我在 VB.NET 中使用的屏幕管理器并尝试将其转换为 java。这是我到目前为止所拥有的,我会告诉你我的确切问题是什么。

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();
}

和我的测试屏幕

调试.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 变量,我将添加到屏幕列表(列表)中,但它不允许我设置/访问我的以我想要的方式筛选。但它适用于 VB.NET 我知道这并不意味着什么,只是想知道如何在 Java 中实现这一点。

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

谢谢!

【问题讨论】:

  • 您想像在 HashMap 中那样使用键来访问屏幕吗?
  • 你在哪里实现 Screen 接口?您是否在 AddScreen() 中传递了具体的屏幕对象?
  • A 键作为屏幕名称是的。我只想能够访问我添加到列表中的屏幕变量和方法。

标签: java android libgdx


【解决方案1】:

接口中的变量默认是静态的和最终的。 移除Screen界面中的所有变量。

使Screen,一个具体的类,拥有私有变量并为其生成getter和setter。

【讨论】:

  • 好的,我已经删除它们并将它们设置在 Debug.java 文件中,但是如何从该屏幕访问这些变量?
  • 首先,通过将 Screen 类声明为 public class Screen { 来具体化它。
  • 一旦具体化,您可以使用 Screen 实例的 setter 为变量设置值,并使用 getter 方法访问这些值。我想这就是你想要的。
  • 天啊!那太简单了,不知道为什么我把它弄得太复杂了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2015-06-12
  • 2014-01-21
  • 2011-11-03
  • 1970-01-01
相关资源
最近更新 更多