cocos2dx3.0 实现屏幕背景滚动

cocos2dx3.0 实现屏幕背景滚动,第1张

概述主要是利用 update()方法(this->scheduleUpdate();开启),让背景图片不断的移动,两张图片交替 就能形成图片背景移动的效果了。 BgScene.h #ifndef __BG_SCENE_H__#define __BG_SCENE_H__#include "cocos2d.h"USING_NS_CC;class Bg: public cocos2d::La

主要是利用 update()方法(this->scheduleUpdate();开启),让背景图片不断的移动,两张图片交替 就能形成图片背景移动的效果了。

BgScene.h

#ifndef __BG_SCENE_H__#define __BG_SCENE_H__#include "cocos2d.h"USING_NS_CC;class  Bg: public cocos2d::Layer{public:    static Scene* createScene();    virtual bool init();      CREATE_FUNC(Bg);public:    Size visibleSize;    Point origin;    // node对象的update方法( 每一帧都刷新 this->scheduleUpdate(); )    virtual voID update(float delta);public:    Sprite* m_bgSprite1;    // 背景精灵1    Sprite* m_bgSprite2;    // 背景精灵2    voID initBG();          // 初始化图片背景};#endif // 

BgScene.cpp

#include "BgScene.h"USING_NS_CC;Scene* Bg::createScene(){    auto scene = Scene::create();    auto layer = Bg::create();    scene->addChild(layer);    return scene;}bool Bg::init(){    //////////////////////////////    // 1. super init first    if ( !Layer::init() )    {        return false;    }    visibleSize = Director::getInstance()->getVisibleSize();    origin = Director::getInstance()->getVisibleOrigin();    auto sp = Sprite::create("Closenormal.png");    sp->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));    this->addChild(sp,1);    initBG();    this->scheduleUpdate();    return true;}voID Bg::initBG(){    m_bgSprite1 = Sprite::create("bg1.png");    m_bgSprite1->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));    this->addChild(m_bgSprite1,0);    m_bgSprite2 = Sprite::create("bg2.png");    m_bgSprite2->setposition(Point(visibleSize.wIDth / 2,visibleSize.height + visibleSize.height / 2));    this->addChild(m_bgSprite2,0);}voID Bg::update(float delta){    int posY1 = m_bgSprite1->getpositionY();    //背景地图1的Y坐标    int posY2 = m_bgSprite2->getpositionY();    //背景地图2的Y坐标    int iSpeed = 1; //地图滚动速度    /* 两张地图向左滚动(两张地图是相邻的,所以要一起滚动,否则会出现空隙) */    posY1 -= iSpeed;    posY2 -= iSpeed;    /* 图大小 */    Size bgSize = m_bgSprite1->getContentSize();    /* 当第1个地图完全离开屏幕时,第2个地图刚好完全出现在屏幕上,这时候就让第1个地图紧贴在  第2个地图后面 */    if (posY1 <= -bgSize.height / 2) {        posY1 = bgSize.height + bgSize.height / 2;    }    /* 同理,当第2个地图完全离开屏幕时,第1个地图刚好完全出现在屏幕上,这时候就让第2  个地图紧贴在第1个地图后面 */    if (posY2 <= -bgSize.height / 2) {        posY2 = bgSize.height + bgSize.height / 2;    }    m_bgSprite1->setpositionY(posY1);    m_bgSprite2->setpositionY(posY2);}
总结

以上是内存溢出为你收集整理的cocos2dx3.0 实现屏幕背景滚动全部内容,希望文章能够帮你解决cocos2dx3.0 实现屏幕背景滚动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081006.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存