2012-04-10 101 views
1

我正在开发一款针对android的游戏,并且我一直试图实现一个对话框来显示web横幅广告的webview。 (我使用cocos2d开发)。我使用静态方法ads()静态地打开对话框。但是,由于这样做,我开始遇到问题。Android应用程序在第二次启动时冻结

第一次启动时,它运行良好,但当应用程序关闭并重新打开时,“openscreen”场景开始,但不会播放淡入和淡出,或继续进入菜单场景。

活动(其中广告()方法)

package wingdev.defence; 

import java.util.Timer; 
import java.util.TimerTask; 
import org.cocos2d.layers.CCScene; 
import org.cocos2d.nodes.CCDirector; 
import org.cocos2d.opengl.CCGLSurfaceView; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.webkit.WebView; 
import android.widget.Button; 

public class DefenceActivity extends Activity{ 
     protected CCGLSurfaceView _glSurfaceView; 
     public static int highscore = 0; 
     public static int mode= Activity.MODE_PRIVATE; 
     public static SharedPreferences mySharedPreferences ; 
     public static String CurrentLevel = ""; 
     public static boolean firstlaunch=true; 
     public static int screenforchoice = 0; 
     public static boolean choicemade=false; 
     public static boolean choice=false; 
     public static DefenceActivity context; 

      @Override 
        public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      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); 
      CCScene scene = OpenScreen.scene(); 
      CCDirector.sharedDirector().runWithScene(scene); 
     } 

     @Override 

     public void onStart() 

     { 
      super.onStart(); 
      CCDirector.sharedDirector().attachInView(_glSurfaceView); 
      CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft); 

      CCDirector.sharedDirector().setAnimationInterval(1.0f/60.0f); 
      mySharedPreferences=getSharedPreferences("HighScore",mode); 
      highscore= mySharedPreferences.getInt("HighScore",0); 
      SharedPreferences.Editor editor= mySharedPreferences.edit(); 
       editor.remove("HighScore"); 
       editor.putInt("HighScore", highscore); 
       editor.commit(); 
       CCScene scene = OpenScreen.scene(); 
      CCDirector.sharedDirector().runWithScene(scene); 
      Config.context = this; 
      context = this; 
      } 
     public void startgame() 
      { 
      CCDirector.sharedDirector().attachInView(_glSurfaceView); 

      CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);; 

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

      CCScene scene = GameLayerSurvival.scene(); 
      CCDirector.sharedDirector().runWithScene(scene); 

      } 
     @Override 
     public void onPause() 
     { 
      super.onPause(); 
      CCDirector.sharedDirector().pause(); 
     } 

     @Override 
     public void onResume() 
     { 
      super.onResume(); 
     } 
     @Override 
     public void onStop() 
     { 
      super.onStop(); 
      finish(); 

      CCDirector.sharedDirector().end(); 
     } 
     static public void newhighscore() 
     {if(GameLayerSurvival.score>highscore){ 
     highscore=GameLayerSurvival.score; 
     } 
     SharedPreferences.Editor editor= mySharedPreferences.edit(); 
     editor.remove("HighScore"); 
     editor.putInt("HighScore", highscore); 
     editor.commit(); 
     } 

     public static void ads(){ 
     context.runOnUiThread(new Runnable() { 
     public void run() { 
     final Dialog dialog = new Dialog(context); 
     dialog.setContentView(R.layout.main); 
     dialog.setTitle("Advert"); 
     dialog.setCancelable(true); 
     WebView mWebView = (WebView) dialog.findViewById(R.id.webbanner); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl("http://www.example.co.uk/"); 
     Button bc_btn1 = (Button) dialog.findViewById(R.id.button1); 
     bc_btn1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v){ 
       killDialog(dialog); 
      } 
     }); 
     dialog.show(); 
      } 
     }); 
     } 
     public static void killDialog(Dialog dialog){ 
      dialog.cancel(); 
     } 
} 

Openscreen-上推出使用的第一个场景

package wingdev.defence; 

import org.cocos2d.actions.instant.CCCallFunc; 
import org.cocos2d.actions.interval.CCDelayTime; 
import org.cocos2d.actions.interval.CCFadeIn; 
import org.cocos2d.actions.interval.CCFadeOut; 
import org.cocos2d.actions.interval.CCSequence; 
import org.cocos2d.layers.CCColorLayer; 
import org.cocos2d.layers.CCScene; 
import org.cocos2d.nodes.CCDirector; 
import org.cocos2d.nodes.CCLabel; 
import org.cocos2d.nodes.CCSprite; 
import org.cocos2d.types.CGSize; 
import org.cocos2d.types.ccColor4B; 

public class OpenScreen extends CCColorLayer { 

CCLabel _start; 
CCLabel _easy; 
CCLabel _normal; 
CCLabel _highscore; 
CCLabel _howto; 
CCLabel _hard; 
CCLabel _reset; 
CCSprite wingdev = CCSprite.sprite("wingdevpresents.png"); 
CCSprite darkorange = CCSprite.sprite("PirateTea.png"); 
CCSprite plane = CCSprite.sprite("plane.png"); 
CCSprite back2 = CCSprite.sprite("black.png"); 
public static CCScene scene() 
{ 
    // 
    CCScene scene = CCScene.node(); 
    CCColorLayer layer = new OpenScreen(ccColor4B.ccc4(255, 255, 255, 255)); 
    scene.addChild(layer); 

    return scene; 
} 
protected OpenScreen(ccColor4B color) { 
super(color); 
CGSize winSize = CCDirector.sharedDirector().displaySize(); 
this.setIsTouchEnabled(true); 
back2.setPosition(winSize.width/2.0f, winSize.height/2.0f); 
back2.setScaleX(winSize.width/back2.getContentSize().width); 
back2.setScaleY(winSize.height/back2.getContentSize().height); 
addChild(back2); 
wingdev.setPosition(winSize.width/2.0f, winSize.height/2.0f); 
wingdev.setScaleX(winSize.width/wingdev.getContentSize().width); 
wingdev.setScaleY(winSize.height/wingdev.getContentSize().height); 
addChild(wingdev); 
wingdev.runAction(CCSequence.actions(CCFadeIn.action(1.0f),CCDelayTime.action(2.0f),CCFadeOut.action(1.0f), CCCallFunc.action(this,"openscreen2"))); 
} 
public void openscreen() 
{ 
    CCDirector.sharedDirector().replaceScene(Menu.scene()); 
} 
public void openscreen2(){ 
    CGSize winSize = CCDirector.sharedDirector().displaySize(); 
    removeChild(wingdev,true); 
    darkorange.setPosition(winSize.width/2.0f, winSize.height/2.0f); 
    darkorange.setScaleX(winSize.width/darkorange.getContentSize().width); 
    darkorange.setScaleY(winSize.height/darkorange.getContentSize().height); 
    addChild(darkorange); 
     darkorange.runAction(CCSequence.actions(CCFadeIn.action(1.0f),CCDelayTime.action(2.0f),CCFadeOut.action(1.0f),CCCallFunc.action(this,"openscreen"))); 
} 
} 

理解任何帮助,我要去哪里错了将是非常赞赏!

+0

哦,有数字显示在logcat的 – WingDev 2012-04-10 11:36:35

回答

2

,您暂停CCDirector在

@Override 
public void onPause() 
{ 
    super.onPause(); 
    CCDirector.sharedDirector().pause(); 
} 

我认为你需要在的onResume再次启动它()

@Override 
public void onResume() 
{ 
    super.onResume(); 
    CCDirector.sharedDirector().resume(); 
} 

在onStart()将不会被调用,如果应用程序没有杀害。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

这似乎已经固定它没有错误,谢谢! – WingDev 2012-04-10 11:49:54

相关问题