
主要是利用 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 实现屏幕背景滚动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)