锁定手机重启游戏场景

时间:2012-07-15 11:52:31

标签: java android eclipse andengine

我正在使用AndEngine开发Android游戏,目前最大的问题是当手机被锁定并再次解锁时(大约一分钟或更长时间)游戏场景重置。

我做了很多搜索,大多数建议使用应用程序关闭时调用的函数进行保存。我可以做到这一点,但这是一个很大的节省。但是,我知道这是可能的,因为它是在AndEngine示例中完成的。 AndEngine示例中一个特别值得注意的事情是,当程序在前台时手机被锁定时,屏幕再次打开。再次按下电源会使屏幕关闭,直到游戏完全恢复后再次解锁。

我滚动了Manifest文件和启动器源代码,复制并粘贴了一些东西,但仍然没有成功。似乎解决方案是在Manifest文件中,所以这是我的程序之一,包括到目前为止的所有修改:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.andenginetest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:configChanges="orientation|keyboard|keyboardHidden"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

尽管很多人都建议,但这一切都没有对这个问题产生任何影响。谁能告诉我我可能做错了什么?提前谢谢!

2 个答案:

答案 0 :(得分:0)

我猜它与活动生命周期有关。 正如您在此处的图表中所见 http://developer.android.com/reference/android/app/Activity.html

有几种与暂停,停止和启动活动相关的方法。 您应该覆盖onPause()onResume()方法,并在那里执行保存。 一旦调用onPause(),操作系统就可以选择终止您的活动,而无需您做任何事情。

这可能是发生的事情,所以如果你覆盖这些方法,你可以告诉应用程序在暂停时做什么(意思是整个屏幕被另一个视图覆盖 - 无论是锁定,还是电话,还是其他应用程序,等)并在恢复时。

希望这就是你的意思。 祝你好运!

答案 1 :(得分:0)

我有完全相同的问题,我在游戏活动中将其添加到我的清单中:

         android:screenOrientation="landscape"
         android:configChanges="keyboard|keyboardHidden|orientation">            
    </activity>

正如您所看到的,您在清单中没有screenOrientation,您可能只是在创建引擎时设置方向,不知道这会改变什么,但我有这样的想法,并且它有效

哦,不要忘记设置onResumeGame和onPauseGame:

@Override
public void onResumeGame() {
    super.onResumeGame();

    this.enableAccelerometerSensor(this);
}

@Override
public void onPauseGame() {
    super.onPauseGame();

    this.disableAccelerometerSensor();
}