-1

私は現在、libGDX を使用して Android OS でゲームを作成しようとしています。そのためのスクリーン マネージャーに取り組んでいます。これは、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();
}

と私のテスト画面

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変数にアクセスすることです。画面のリスト(リスト)に追加しますが、画面を設定/アクセスすることはできませんしたい。しかし、それはVB.NETで機能します。それはあまり意味がないことを知っていますが、Javaでこれをどのように達成できるか疑問に思っていました.

画面のリストに新しい画面を追加して名前を付け、リストを使用して各画面の各メソッドと変数にアクセスできるようにしたいと考えています。

ありがとう!

4

1 に答える 1

0

インターフェイス内の変数は、デフォルトで静的かつ最終的です。Screen インターフェイスのすべての変数を削除します。

具象クラスであるMakeScreenは、プライベート変数を持ち、getter と setter を生成します。

于 2013-04-21T05:44:01.897 に答える