cocos2dx中用动作实现背景无限滚动
2017-08-24 10:42
357 查看
cocos2dx-3.1.5中用动作实现背景滚动,cocos2dx都可以使用的
用到的动作其实很简单
MoveBy 因为有反动作TargetedAction 给指定目标1个动作
Spawn 同时执行
Sequence 动作按照顺序执行
RepeatForever 一直重复执行
如果用定时器,会有画面抖动,因为每帧执行的时间不一样,而我们用动作实现背景滚动只需要关注移动的时间,不需要关注每帧偏移的像素是多少。
头文件
#pragma once #include "GameSceneManager.h" #define DEF_ROLL_SPEDD 8 /* 背景滚动 */ class BackgroundLayer : public Layer { public: virtual bool init(); CREATE_FUNC(BackgroundLayer); Scale9Sprite* createBackGround(Vec2 pos); // 默认背景滚动图片 static int currBgImageIndex; // 滚动速度,值越小速度越快 static int rollTime; void startRollBg(); void stop(); bool isFastRoll = false; };
cpp文件
#include "BackgroundLayer.h" int BackgroundLayer::rollTime = DEF_ROLL_SPEDD; int BackgroundLayer::currBgImageIndex = 1; bool BackgroundLayer::init() { if (!Layer::init()) { return false; } startRollBg(); return true; } Scale9Sprite* BackgroundLayer::createBackGround(Vec2 pos) { auto background = Scale9Sprite::create(StringUtils::format(BACKGROUND_IMG_NAME, currBgImageIndex)); background->setScale9Enabled(true); background->setContentSize(winSize); background->setPosition(pos); background->setAnchorPoint(Vec2::ZERO); this->addChild(background); return background; } void BackgroundLayer::startRollBg() { // 创建2张背景图 Scale9Sprite* bg = createBackGround(Vec2::ZERO); Scale9Sprite* bg2 = createBackGround(Vec2(0, winSize.height)); // 滚动动作 auto mt = MoveBy::create(rollTime, Vec2(0, -winSize.height)); auto ta = TargetedAction::create(bg, mt); auto ta2 = TargetedAction::create(bg2, mt->clone()); // 同时执行 auto spawn = Spawn::createWithTwoActions(ta, ta2); // 重复执行,设定位置 auto rf = RepeatForever::create(Sequence::createWithTwoActions(spawn, CallFunc::create([=]() { //this->stopAllActions(); bg->setPositionY(0); bg2->setPositionY(winSize.height); //log("----"); }))); // 当前Layer执行这个Action this->runAction(rf); } void BackgroundLayer::stop() { this->stopAllActions(); }
相关文章推荐
- cocos2dx实现背景的无限滚动
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- cc随笔:cocos2dx 创建无限滚动的移动背景
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- cocos2dx 实现重复滚动背景时遇到的一些问题
- 【Cocos2d-x】实现可上下左右无限滚动的背景
- 【Cocos2d-x】新手自学(九)滚动背景..实现无限卷轴效果(2.0.1版本)
- Cocos2dx中利用双向链表实现无限循环滚动层
- 简单粗暴的实现背景图无限循环滚动
- Cocos2d-x学习(十二):用cocos2d-x实现MoonWarriors(无限背景滚动的简单实现)
- cocos2dx 背景无限滚动
- 登录页背景图缓慢滚动实现方法
- jQuery实现公告无限循环滚动
- Cocos2D-x游戏开发之十:背景无限滚动
- 无限背景滚动
- iOScollectionView广告无限滚动实例(Swift实现)
- cocos2d 滚动背景 举 无限
- 移动端,当滚动到最底端的时候,无限加载,怎么实现的?