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。