Cocos2d Android锁屏或离开游戏会强制重新启动。

3
我正在进行一个Cocos2d-Android游戏的最后阶段,遇到了一个无法解决的问题。
当我锁定我的平板电脑(Nexus 7)或者按下主页按钮离开游戏时,它会重新启动。它会回到启动画面,就像游戏重新打开一样。以下是我的Main Activity和Android Manifest供您参考:
public class MainActivity extends Activity {

//To get a static reference to context for shared preferences
private static Context context;

protected CCGLSurfaceView _glSurfaceView;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    //To get a static reference to context for shared preferences
    MainActivity.context = getApplicationContext();
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    _glSurfaceView = new CCGLSurfaceView(this);

    setContentView(_glSurfaceView);
}

//To get a static reference to context for shared preferences
public static Context getAppContext(){
    return MainActivity.context;
}

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

    CCDirector.sharedDirector().attachInView(_glSurfaceView);

    CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);

    CCDirector.sharedDirector().setDisplayFPS(true);

    CCDirector.sharedDirector().setAnimationInterval(1.0f / 60.0f);

    CCScene scene = Splash.scene();

    CCDirector.sharedDirector().runWithScene(scene);
}

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

    CCDirector.sharedDirector().pause();
    SoundEngine.sharedEngine().pauseSound();
}

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

    CCDirector.sharedDirector().resume();
    SoundEngine.sharedEngine().resumeSound();
}

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

    SoundEngine.sharedEngine().pauseSound();

}

并且。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="bigfiresoftware.alphadefender"
android:versionCode="1"
android:versionName="1.0" >

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

<application
    android:allowBackup="true"
    android:icon="@drawable/adicon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name="bigfiresoftware.alphadefender.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/app_name" 
        android:hardwareAccelerated="false">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>       
</application>
android:configChanges="keyboard|keyboardHidden|orientation" 
</manifest>

非常感谢您提供的任何/所有帮助。谢谢。


在onStop()中调用CCDirector.sharedDirector().resume(); - Akarsh M
这个不起作用。谢谢你的建议。 - Atamous
3个回答

3
在你的清单文件中添加以下行,以添加到你的活动中。
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

当您锁定屏幕时,屏幕的方向会发生变化。因此,您的活动会被销毁并重新创建。如果添加此行,则您的屏幕方向不会更改。


1

以上的答案没有解决我的问题,但我最终找到了答案。这是一个棘手的问题。

如果有其他人遇到这个问题:

在AdnroidManifest.xml中删除targetSdkVersion。或更改为其他版本,我没有尝试其他版本,但删除可以解决问题。

android:minSdkVersion="9"
android:targetSdkVersion="17" /> //git rid of this guy

0

在你的onstop()方法中添加这行代码

CCDirector.sharedDirector().end();

你需要编写一个onDestroy()方法,在关闭游戏时删除所有实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接