2017-06-08 3 views
0

ゲームのチュートリアルをゲームの最初の起動用に作成したいと思います。次回のチュートリアルは行わないでください。 これは、起動が最初かどうかを示すために、優先的に格納するブール値を作成しました。起動が最初に起動し、チュートリアル-LibGDXが含まれているかどうかを確認する方法

マイシングルトンの好みのクラスはここに含まれている:私のgamescreenクラスで

public class FirstLaunchNotifier { 

    public static final FirstLaunchNotifier INSTANCE = new FirstLaunchNotifier(); 

    private final Preferences prefs; 

    private static final String LAUNCH_KEY = "launch"; 
    private static final String PREF_NAME = "TMS"; 

    /* if false->first launch with tutorial.else if true->no tutorial */ 
    private boolean launchBoolean; 

    public FirstLaunchNotifier() { 
     prefs = Gdx.app.getPreferences(PREF_NAME); 
     launchBoolean = prefs.getBoolean(LAUNCH_KEY, false); 
    } 

    public void saveLaunchState() { 
     launchBoolean = true; 
     prefs.putBoolean(LAUNCH_KEY, launchBoolean); 
     prefs.flush(); 
    } 

    public boolean getLaunchBoolean() { 
    // System.out.println("launch::: "+launchBoolean); 
     return launchBoolean; 

    } 

を、現在私はrender()内で呼び出していますupdate()方法があります。

初めてのチュートリアルでは、別の更新方法tutorialUpdate()を呼び出したいと思います。 このlaunchBool値をこのupdate()tutorialUpdate()で正しく取得する方法がわかりません。

チュートリアルが完了したら、ゲームは通常のプレイに戻ってください。saveLaunchState()が呼び出され、launchbooleanが真になって最初のプレイが終了し、チュートリアルは必要ないことを示します。

これは、render()をrender()で今呼び出す方法です。

case RUN: 
    update(delta); 
break; 

このようなブール値を取得する必要はありますか?

if(FirstLaunchNotifier.INSTANCE.getLaunchBoolean()) { 
    update(delta); 
    tutorial update(); 
}else{ 
    update(delta); 
} 

これは適切な方法ですか?

+1

を呼び出すことができますifとelseの両方にありますが、完全にifから外すことができます。私は多形的な方法でこれを行う方法を模索することをお勧めしたいと思います。 –

+1

どこで 'saveLaunchState();'を呼びますか?私がお勧めするのは、プレイヤーがある時点で終了したときだけチュートリアルをスキップすることです。 2回目のアプリを起動しても、1回目のスタート時にプレイしたわけではありません。 –

+0

シングルトンクラスの構文が間違っています。 – Aryan

答えて

0

FirstLaunchNotifierシングルトンとして。

public class FirstLaunchNotifier { 

    private static FirstLaunchNotifier instance; 
    private Preferences prefs; 
    private boolean launchBoolean; 

    private static final String LAUNCH_KEY = "launch"; 
    private static final String PREF_NAME = "TMS"; 

    private FirstLaunchNotifier(){ 

     prefs= Gdx.app.getPreferences(PREF_NAME); 
     launchBoolean = prefs.getBoolean(LAUNCH_KEY, true); 
    } 

    public static FirstLaunchNotifier getInstance(){ 

     if(instance==null){ 
      instance=new FirstLaunchNotifier(); 
     } 
     return instance; 
    } 

    public void saveLaunchState(boolean state) { 
     launchBoolean=state; 
     prefs.putBoolean(LAUNCH_KEY, launchBoolean); 
     prefs.flush(); 
    } 

    public boolean getLaunchBoolean() { 
     return launchBoolean; 
    } 
} 

あなたはFirstLaunchNotifier.getInstance()によってFirstLaunchNotifierのオブジェクトを取得し、

if(FirstLaunchNotifier.getInstance().getLaunchBoolean()) { 
    update(delta); 
    tutorial update(); 
}else{ 
    update(delta); 
} 

のようなあなたの条件に応じて計算を行うと、ユーザーはチュートリアルの部分を完了したときに、更新ならば、ちょうど(デルタ)

FirstLaunchNotifier.getInstance().saveLaunchState(false); 
関連する問題