I’m developing a game for android, and I’ve been trying to implement a dialog to show a webview for web banner ads. (I’m using cocos2d for my development). Im using the static method ads() to open the dialog statically. Since doing this, however, I’ve started having problems launching.
On first launch, it runs fine, but when the app is closed and reopened, the “openscreen” scene starts but then doesn’t play run its fade in and fade outs or continue into the menu scene.
Activity (where the ads() method is)
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- the first scene used on launch
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")));
}
}
Any help in understanding where I’m going wrong would be very appreciated!
You pause your CCDirector in
I think you need to start it again in onResume()
onStart() won’t get called if the app is not killed.
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle