1

AndEngine を使用するゲームに取り組んでいます。

AndEngine には「BaseGameActivity」があり、Google Play ゲーム サービスにもあります。BaseGameActivity の名前を AndEngine から AEBaseGameActivity に変更し、Activity ではなく BaseGameActivity の親クラスにする必要がありました。

しかし、それは私にこのエラーを与えています:

Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
        at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:226)
        at org.andengine.util.ActivityUtils.requestFullscreen(ActivityUtils.java:56)
        at org.andengine.ui.activity.AEBaseGameActivity.applyEngineOptions(AEBaseGameActivity.java:427)
        at org.andengine.ui.activity.AEBaseGameActivity.onCreate(AEBaseGameActivity.java:83)

AndEngine には次のコードがあります。

public static void requestFullscreen(final Activity pActivity) {
        final Window window = pActivity.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        window.requestFeature(Window.FEATURE_NO_TITLE);
    }

requestFeature 行にコメントすると、プロジェクトが実行されます。しかし、見苦しいタイトル バーがあります。

誰かがこれの修正を知っていますか?

編集、ここにいくつかのコードがあります:

PS: AEBaseGameActivity.php は、BaseGameActivity を拡張する BaseActivity を拡張します (以前は単なるアクティビティでした)。

AEBaseGameActivity.php

public abstract class AEBaseGameActivity extends BaseActivity implements IGameInterface, IRendererListener {
    @Override
    protected void onCreate(final Bundle pSavedInstanceState) {
        if(BuildConfig.DEBUG) {
            Debug.d(this.getClass().getSimpleName() + ".onCreate" + " @(Thread: '" + Thread.currentThread().getName() + "')");
        }

        super.onCreate(pSavedInstanceState);

        this.mGamePaused = true;

        this.mEngine = this.onCreateEngine(this.onCreateEngineOptions());
        this.mEngine.startUpdateThread();

        this.applyEngineOptions(); //REQUEST FULLSCREEN

        this.onSetContentView(); //SET CONTENT VIEW
    }

    ...

    private void applyEngineOptions() {
        final EngineOptions engineOptions = this.mEngine.getEngineOptions();

        if(engineOptions.isFullscreen()) {
            ActivityUtils.requestFullscreen(this); //ACTIVITY UTIL SHOWN LATER
        }

        ...
    }

    ...

    protected void onSetContentView() {
        this.mRenderSurfaceView = new RenderSurfaceView(this);
        this.mRenderSurfaceView.setRenderer(this.mEngine, this);

        this.setContentView(this.mRenderSurfaceView, AEBaseGameActivity.createSurfaceViewLayoutParams());
    }
}

ActivityUtils.java

public class ActivityUtils {

    public static void requestFullscreen(final Activity pActivity) {
        final Window window = pActivity.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        window.requestFeature(Window.FEATURE_NO_TITLE); //IF COMMENTING THIS, THE GAME IS RUNNING
    }

    ...

}

EDIT2:

コードは基本的に AndEngine のみです。元のコードは次のとおりです。

https://github.com/nicolasgramlich/AndEngine/tree/GLES2/src/org/andengine/ui/activity

私の変更:

  • BaseGameActivity を AEBaseGameActivity に名前変更
  • BaseActivity は、Activity の代わりに BaseGameActivity (Google Play Game Service から取得) を拡張します。
  • Google Play ゲーム サービスの BaseGameUtils から取得した BaseGameActivity および GameHelper.java。
4

2 に答える 2

1

わかりましたので、これは私がやったことです:

  • 問題の原因となっている行をコメントアウトしました (ActivityUtils.java AndEngine の 56 行目)。
  • これを Android マニフェストのアクティビティに追加しました。

    android:theme="@android:style/Theme.NoTitleBar"

最終的には次のようになります。

<activity
                android:name=".GameActivity"
                android:theme="@android:style/Theme.NoTitleBar"
                android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
于 2013-07-29T22:14:40.437 に答える
0

requestFeature() must be called before adding contentすべてを伝える例外

requestFullscreen()前に電話するsetContenview()

編集

後でREQUEST FULLSCREENを試してくださいsuper.onCreate()

@Override
protected void onCreate(final Bundle pSavedInstanceState) {
    super.onCreate(pSavedInstanceState);
    this.applyEngineOptions();  //REQUEST FULLSCREEN
于 2013-07-29T17:22:19.213 に答える