有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java锁定手机重启游戏场景

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

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

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

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

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

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

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

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


共 (2) 个答案

  1. # 1 楼答案

    我猜这与活动的生命周期有关。 如图所示 http://developer.android.com/reference/android/app/Activity.html

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

    这可能就是发生的情况,因此如果覆盖这些方法,您可以告诉应用程序在暂停时(也就是说,整个屏幕被另一个视图覆盖-锁定、电话呼叫或另一个应用程序等)和恢复时要做什么

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

  2. # 2 楼答案

    我遇到了完全相同的问题,我在游戏活动的清单中添加了以下内容:

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

    正如你所看到的,你的清单中没有屏幕方向,你可能只是在创建引擎时设置方向,不知道这是否会改变什么,但我就是这样做的,而且成功了

    哦,别忘了设置onResumeGame和onPauseGame:

    @Override
    public void onResumeGame() {
        super.onResumeGame();
    
        this.enableAccelerometerSensor(this);
    }
    
    @Override
    public void onPauseGame() {
        super.onPauseGame();
    
        this.disableAccelerometerSensor();
    }