zoukankan      html  css  js  c++  java
  • Cocos2d-x -- 如何让背景从上到下滚动

    1. 首先,声明一个2个大小的sprite数组

    class GameScreen : public cocos2d::Layer
    {
    public:
        ...
        cocos2d::Sprite *backgroundSpriteArray[2];
    };


    2. 完成初始化,1张图片用于当前显示,另1张用于滚动到下一张

    bool GameScreen::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !Layer::init() )
        {
            return false;
        }
        
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Point origin = Director::getInstance()->getVisibleOrigin();
        
        ...
        
        for (int i = 0; i < 2; i ++)
        {
            backgroundSpriteArray[i] = Sprite::create("GameScreen/Game_Screen_Background.png");
            backgroundSpriteArray[i]->setPosition(Point((visibleSize.width / 2), (-1 * visibleSize.height * i) + (visibleSize.height / 2)));
            this->addChild(backgroundSpriteArray[i], -2);
        }
        ...
    }

    3. 声明update方法表示每帧的更新

    class GameScreen : public cocos2d::Layer
    {
    public:
        ...
        void update(float dt);
    };


    4. 实现update方法

    void GameScreen::update(float dt)
    {
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Point origin = Director::getInstance()->getVisibleOrigin();
    
        for (int i = 0; i < 2; i ++)
        {
            if (backgroundSpriteArray[i]->getPosition().y >= visibleSize.height + (visibleSize.height / 2) -1)
            {
                backgroundSpriteArray[i]->setPosition(Point((visibleSize.width / 2) + origin.x, (-1 * visibleSize.height) + (visibleSize.height / 2)));
            }
        }
        
        for (int i = 0; i < 2; i ++)
        {
            backgroundSpriteArray[i]->setPosition(Point(backgroundSpriteArray[i]->getPosition().x, backgroundSpriteArray[i]->getPosition().y + (0.75 * visibleSize.height * dt)));
        }
        
        ...
    }

    5. 触发默认的update方法

    bool GameScreen::init()
    {
        ...
        this->scheduleUpdate();
        ...
    }
  • 相关阅读:
    Spring IOC容器的初始化-(二)BeanDefinition的载入和解析
    Spring IOC容器的初始化—(一)Resource定位
    SpringMVC的启动过程
    Spring IOC容器在Web容器中是怎样启动的
    Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 问题分析
    网络丢包分析
    yum安装jdk如何配置JAVA_HOME
    Linux网卡绑定
    Linux Buffer/Cache 的区别
    理解load averages
  • 原文地址:https://www.cnblogs.com/davidgu/p/4763924.html
Copyright © 2011-2022 走看看