cocos2d-x 3.6版连连看开始界面

上一节讲了一个loading的动画界面,其实没有loading资源。

怎么样loading资源,如何预加载资源呢。

直接上代码

 // 创建一个一直重复的动画
    loading->runAction(RepeatForever::create(Sequence::create(fadeIn, fadeIn->reverse() ,NULL)));

    // loading resources
    {
        // 帧缓存
        auto spriteFrameCache = SpriteFrameCache::getInstance();
        // 纹理缓存
        auto textureCache = Director::getInstance()->getTextureCache();
        textureCache->addImage(s_backgound);
        textureCache->addImage(s_backgound_cloud1);
        textureCache->addImage(s_backgound_cloud2);
        textureCache->addImage(s_backgound_sea1);
        textureCache->addImage(s_backgound_sea2);
        textureCache->addImage(s_beach_adornment);
        textureCache->addImage(s_island);

        spriteFrameCache->addSpriteFramesWithFile(s_boat_plist);

        // 加载声音资源
        SimpleAudioEngine::getInstance()->preloadBackgroundMusic(s_music_Back2new);
        SimpleAudioEngine::getInstance()->preloadBackgroundMusic(s_music_Back3new);
        SimpleAudioEngine::getInstance()->preloadBackgroundMusic(s_music_class);
        SimpleAudioEngine::getInstance()->preloadBackgroundMusic(s_music_mainmenu);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_2);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_3);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_4);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_12);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_14);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_15);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_16);
        SimpleAudioEngine::getInstance()->preloadEffect(s_music_19);

    }

这段预加载资源是写在init()函数里面的,接着上一章讲的代码。

可以看出,这里的加载资源是同步加载。就是init以后,一个一个去加载资源,一个加载完了加载另一个。

可以在开始加载的地方打个时间,加载完的地方再打个时间,算一下加载资源需要多少时间。

获取系统时间,单位秒

utils::gettime();

这个加载资源比较快,不到一秒就加载完毕了。

加载完毕以后需要进入场景了,就是开始场景。

那这里如何实现这个机制。

scheduleOnce(SEL_SCHEDULE(&StartGame::initUi), 2);

加载完以后直接用一个自定义调度器,调了一个函数,initUi,延迟2秒调用。

简单粗暴。

在这个initUi()函数里面,我会把游戏开始前的场景实现完成。大概有一个海洋背景,几片云朵,倒影,岛屿,船等。

void StartGame::initUi(float t)
{
    removeAllChildren();

    auto textureCache = Director::getInstance()->getTextureCache();

    auto spriteFrameCache = SpriteFrameCache::getInstance();

    {// 加载背景
        auto background = Sprite::createWithTexture(textureCache->getTextureForKey(s_backgound));

        background->setPosition(wSize.width / 2, wSize.height / 2);

        addChild(background);
    }

    {   // 白云1
        auto cloud1 = Sprite::createWithTexture(textureCache->getTextureForKey(s_backgound_cloud1));
        // 设置锚点,左下角
        cloud1->setAnchorPoint(Vec2(0, 0));

        cloud1->setPosition(0, wSize.height - cloud1->getContentSize().height);

        addChild(cloud1);

        // 白云倒影
        auto cloudShadow = Sprite::createWithTexture(textureCache->getTextureForKey(s_backgound_cloud1));

        cloudShadow->setAnchorPoint(Vec2(0, 0));

        cloudShadow->setFlippedY(true);

        cloudShadow->setOpacity(40);

        cloudShadow->setPosition(40, wSize.height - cloud1->getContentSize().height * 2);

        addChild(cloudShadow);

        // 白云2
        auto cloud2 = Sprite::createWithTexture(textureCache->getTextureForKey(s_backgound_cloud2));
        // 设置锚点,左下角
        cloud2->setAnchorPoint(Vec2(0, 0));

        cloud2->setPosition(cloud1->getContentSize().width, wSize.height - cloud2->getContentSize().height);

        addChild(cloud2);

        // 岛
        auto land = Sprite::createWithTexture(textureCache->getTextureForKey(s_island));

        land->setAnchorPoint(Vec2(1, 0));

        land->setPosition(wSize.width - 40, wSize.height - land->getContentSize().height - 47 * 2);

        addChild(land);

        // 岛倒影
        auto landShadow = Sprite::createWithTexture(textureCache->getTextureForKey(s_island));

        landShadow->setAnchorPoint(Vec2(1, 0));

        landShadow->setFlippedY(true);

        landShadow->setOpacity(40);

        landShadow->setPosition(wSize.width - 40, wSize.height - land->getContentSize().height - 78 * 2);

        addChild(landShadow);

        // 取第一帧
        auto frame = spriteFrameCache->getSpriteFrameByName("sailing_boat1.png");
        auto boat = Sprite::createWithSpriteFrame(frame);
        boat->setPosition(wSize.width - boat->getContentSize().width-50*2,230*2);

        // 创建一个帧动画
        auto animation = Animation::create();
        for (int i = 1; i < 4; i++) {
            char bname[64] = {0};
            sprintf(bname, "sailing_boat%d.png", i);
            animation->addSpriteFrame(spriteFrameCache->getSpriteFrameByName(bname));
        }
        animation->setDelayPerUnit(0.5);
        animation->setRestoreOriginalFrame(true);
        addChild(boat);
        auto animate = Animate::create(animation);
        boat->runAction(RepeatForever::create(animate));

        // 船来回游荡,并会掉头
        auto flipxAction = FlipX::create(true);
        auto moveBy = MoveBy::create(10, Vec2(-240, 0));
        auto action = Sequence::create(moveBy, flipxAction, moveBy->reverse(), flipxAction->reverse(), NULL);
        boat->runAction(RepeatForever::create(action));

        // 第二条船
        auto boat2 = Sprite::createWithSpriteFrame(frame);
        boat2->setFlippedX(true);
        boat2->setPosition(100, 400);
        addChild(boat2);
        boat2->runAction(animate->clone());
        auto moveBy2 = MoveBy::create(12, Vec2(300, 0));
        auto action2 = Sequence::create(moveBy2, flipxAction->clone()->reverse(), moveBy2->reverse(), flipxAction->clone(), NULL);
        boat2->runAction(RepeatForever::create(action2));
    }

}

3.x版的动作系统和2.x有很大区别,比如MoveTo动作没有reverse()方法了,就是说MoveTo不能直接逆动作了。还有帧动画简化了很多。

大概会是这么个样子:

还有一些元素,下一张再来说明。

时间: 2024-12-21 01:07:45

cocos2d-x 3.6版连连看开始界面的相关文章

c#2010版连连看

采用的算法:(想法很简单) 从上到下扫描:if(X1水平是否连通&&X2水平是否连通)Y垂直是否连通: 从左到右扫描:if(y1垂直是否连通&&y2垂直是否连通)X水平是否连通: 缺点:比较次数较多,需要优化,该算法作为一种可以参考的想法. 数据方面处理得不是很好,本想采用设计模式,但由于学习设计模式不够深入,希望能得到这方面的指导. 有兴趣的可下载互相学习下: 源程序地址:http://yunpan.cn/QixUpPZ4tSVbL  访问密码 aeae c#2010版连

ubuntu 14.04 桌面版关闭图形界面

ubuntu 14.04 桌面版关闭图形界面 问题: 如何将ubuntu14.04设置为文本模式启动? 解决方案: 修改改GRUB 的配置文件(不建议直接改 grub.conf) $sudo vim /etc/default/grub 找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash",应该是在第11行. 复制本行然后把quiet splash替换成text. 把本行注释掉(以免以后想改回来时不知道怎么改回来). 如下:GRUB_CMDLINE_L

cocos2d-x 3.6版连连看加载资源

网上找了一个梦幻连连看的资源,大家可以百度一下.然后整理一下加到工程里面去,包括声音和图片文件,后面解释如何整理可以方便管理. 我不推荐在代码里面直接引用资源文件名,我称之为硬编码.做iOS开发的同学好像比较习惯这样,要用按个图片,直接用图片来索引. 我们将所有的资源文件用C风格的字符串做一个索引,放在一个头文件Resources.h里面.这样以后需要修改图片或者索引可以很方便的修改. 好,先加这么多资源.来看看AppDelegate.cpp,这是入口.看看入口函数 applicationDid

cocos2d-x 3.6版连连看版本控制

为了以后的开发和管理,源码开发必须要使用版本控制.我们当然选择git来做版本控制了. 如果你在终端输入git,提示不是一个命令的话,那就说明你的机器没有安装git工具.那就安装一个,百度之有很多安装教程. 好,先把Resources下的res删掉,这个目录没什么用,可以在Xcode里面删掉,选择丢进垃圾桶.还可以把一些不用的目录删掉,比如proj.linux,proj.win8.1-universal,proj.win32.我们大概可能只做一下ios版,然后移植到安卓平台,所以把这些都删掉好了.

微端游戏启动器LAUNCHER的制作MFC版之三(界面)

其实刚开始用wpf写launcher的原因也就是因为用mfc写界面非常的麻烦,尤其是对于我这种后端转前端的程序员来说.在写这个launcher之前我连对话框单文档多文档有什么区别都不知道.而现在的界面不像是以前,现在的界面都是各种异形,要求做得非常漂亮的.当然你会说有直接的界面库可以用,但是在网上找了一圈之后发现很多的界面库都是从好几年前就没有再维护了,要么就是商业版的,简而言之要钱.我们老大看我直接硬写界面的时候也跟我说你用界面库啊,然后帮我找了一圈,我还默默的期待了一下能够有什么好的办法,后

Java版连连看

连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都画上去.然后就是编写事件处理类,因为操作使用鼠标,所以加上鼠标监听.然后获取点击的坐标,根据坐标得出图片在数组中的位置.接着创建一个类,实现连连看消除的算法.这样就基本上可以开始游戏了.然后实现排行榜按钮和存档按钮的基本功能.最后加上一个线程类,用于处理倒计时.下面的介绍也基于这个顺序. 界面实现:

21V版Office365 管理界面更新

21V的管理界面也和全球版一样变成preview了,模块和格局有了调整,有点和世界接轨的小进步. 不过老毛病依然不改,指导视频是直接把全球版的搬过来了,翻译都懒得做,更别提是不是可以根据脚本一模一样地录制一个中文版的.大GCR这么多人却没人做个接地气的...牛逼得一塌糊涂啊! 王朔说,看上去很美.嗯. Mira,瑾童

cocos2d-x 3.6版连连看

写个连连看来讲游戏开发,我觉得实例讲解效果会好一些. 终端下面cd到源码目录,敲命令: cocos new LLK -p com.goonear.llk -l cpp -d ./Goonear 脚本就会创建一个工程了,看脚本的输出提示: 其实脚本创建新工程原理很简单,引擎原码目录下有很多工程模板,安卓,ios,mac,linux.这些模板都是事先做好的,引擎开发组会不断维护更新.然后执行脚本创建新工程的时候就把相关的模板文件拷贝到你指定的工程目录.根据你创建工程时指定的参数,去修改模板的对应参数

ipad版简单美团界面功能实现(纯swift编写)

一 总体功能图一 : (ipad竖屏) 二 总体功能图二 : (ipad横屏) 三 讲解内容 1 搭建美团界面(掌握) 2 ios8.0之后的Popover的运用(重点) 3 协议(掌握) 4 通知(掌握) 5 细节处理 四 总体界面 1 由总体的app界面效果,能看出来,一个UIViewController控制器作为UINavigationController的根控制器就能满足条件. 五 导航条设置 1 自定义导航条 : (系统的导航条不能满足需求) 2 创建导航控制器类 3 获取全局的导航条