How to create android cocos2dx splash screen?

前端 未结 4 769
余生分开走
余生分开走 2021-01-15 17:27

This is my code I don\'t know how to create splash screen and how it will direct in my menu screen. All .h must be connected to BaseScreen and the BaseScreen will be the one

相关标签:
4条回答
  • 2021-01-15 17:40

    try this link out maybe you can find something useful here http://www.androidhive.info/2013/07/how-to-implement-android-splash-screen-2/

    #include "HelloWorldScene.h" 
    #include "OptionsScene.h" 
    #include "SplashScene.h" 
    #include "SimpleAudioEngine.h" 
    #include "RedirectMethods.h" 
    
    using namespace cocos2d;
    using namespace CocosDenshion;
    
    CCScene* SplashScene::scene() {
        CCScene *scene = CCScene::create();
        SplashScene *layer = SplashScene::create();
        scene->addChild(layer);
        return scene;
    }
    
    bool SplashScene::init() {
        if (!CCLayer::init()) {
            return false;
        }
    
        CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
    
        CCSprite* logomarca = CCSprite::create("cocos2dx_logo.png");
        logomarca->setPosition(ccp(screenSize.width / 2, screenSize.height / 2));
        this->addChild(logomarca, 1);
    
        CCFiniteTimeAction *seq1 = CCSequence::create(CCDelayTime::create(3.0),
                CCCallFuncN::create(this,
                        callfuncN_selector(RedirectMethods::MenuScene)), NULL);
    
        this->runAction(seq1);
    
        return true;
    }
    

    or try this one i hope it will solve it

    0 讨论(0)
  • 2021-01-15 17:50

    Here are three steps to add a splash screen scene on android. Using cocos2d-x 3.4. Hope this helps!

    1 Create a SplashScene.cpp

        #include "SplashScene.h"
        #include "HomeScene.h"
    
        using namespace cocos2d;
    
        cocos2d::Scene* SplashScene::createScene()
        {
            // 'scene' is an autorelease object
            auto scene = Scene::create();
    
            // 'layer' is an autorelease object
            auto layer = SplashScene::create();
    
            // add layer as a child to scene
            scene->addChild(layer);
    
            // return the scene
            return scene;
        }
    
    
    
    // on "init" you need to initialize your instance
    bool SplashScene::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
    
        auto visibleSize = Director::getInstance()->getVisibleSize();
    
        auto sprite = Sprite::create("splash.png");
    
        // position the sprite on the center of the screen
        sprite->setPosition(Vec2(visibleSize.width/2 , visibleSize.height/2 ));
    
        // add the sprite as a child to this layer
        this->addChild(sprite, 0);
    
        return true;
    }
    
    void SplashScene::onEnter() {
        Layer::onEnter();
    
        // Wait for 0.5 seconds to load main scene
        this->scheduleOnce(schedule_selector(SplashScene::finishSplash), 0.5f);
    }
    
    void SplashScene::finishSplash(float dt) {
        // ... do whatever other initializations here
        // Show the actual main scene
        Director::getInstance()->replaceScene(HomeScene::createScene());
    }
    

    2 Create SplashScene.h

    #ifndef __SplashScene__
    #define __SplashScene__
    
    #include <stdio.h>
    #include "cocos2d.h"
    
    USING_NS_CC;
    
    class SplashScene : public cocos2d::Layer
    {
    public:
        // there's no 'id' in cpp, so we recommend returning the class instance pointer
        static Scene* createScene();
    
        // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
        virtual bool init();
    
        void onEnter();
    
        void finishSplash(float dt);
    
        // implement the "static create()" method manually
        CREATE_FUNC(SplashScene);
    };
    
    #endif /* defined(__stickerPuzzle__SplashScene__) */
    

    3 Modify AppDelegate.cpp

    bool AppDelegate::applicationDidFinishLaunching() {
        // initialize director
        auto director = Director::getInstance();
        auto glview = director->getOpenGLView();
        if(!glview) {
            glview = GLViewImpl::create("My Game");
            director->setOpenGLView(glview);
        }
    
        // set FPS. the default value is 1.0/60 if you don't call this
        director->setAnimationInterval(1.0 / 60);
    
        // ... other stuff ... 
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
        // On Android - start the splash scene first
        auto scene = SplashScene::createScene(); 
        director->runWithScene(scene);
    #endif
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        // On iOS, no need to add splash scene, start main scene directly
        auto scene = HomeScene::createScene(); 
        director->runWithScene(scene);
    #endif
    
        return true;
    }
    
    0 讨论(0)
  • 2021-01-15 18:00

    I am using the scheduleOnce function.

    void Splash::onEnter(){
        CCLayer::onEnter();
        CCLog("onEnter");
        this->scheduleOnce(schedule_selector(Splash::finishSplash),2.0f);
    }
    
    void Splash::finishSplash(float dt){
        CCDirector::sharedDirector()->replaceScene(GameWall::scene());
    }
    

    after 2 seconds, finish the splash screen and start GameWall Screen. That's all I have done.

    0 讨论(0)
  • 2021-01-15 18:00

    You can make class inherit from CCLayer which start your applications and display your sprite. Then you can override onEnterTransitionDidFinish method:

     void SplashScreen::onEnterTransitionDidFinish(){
      CCScene * sceneAfterSplashScreen = StartLayer::scene();
      CCDirector::sharedDirector()->replaceScene(sceneAfterSplashScreen);
    }
    

    When the splash screen arrived to the screen, then it's start to load new scene and replace it.

    0 讨论(0)
提交回复
热议问题