Cocos Creator3.8 项目实战(五)背景无限滚屏效果如何实现

简介: Cocos Creator3.8 项目实战(五)背景无限滚屏效果如何实现

在游戏中,我们经常会实现背景无限滚动的效果。那这些效果是怎么实现的呢?


原理很简单,就是使用多张背景图,每张图,每一帧都同时移动,当图移出屏幕外时,将其位置设置到下一张图的初始位置,最后一张图位置设置为第一张图的初始位置,如此循环即可。


下面以 实现背景 1920*1080 的背景图,垂直方向无限滚动为例,进行详细说明

⚠️ 文末附 BgMoveView.ts 完整源码, 可直接拿去使用。


具体实现方法:

step 1 ,在cocoscrearor 资源管理器中,添加多张背景图资源,并设置为sprite-frame类型。

注意:最好每张图的尺寸一致。

如下:




step 2 ,在cocoscrearor 层级管理器中,首先添加 bgNode 节点,用于背景图的根节点,然后再添加多个sprite节点 ,并设置sprite frame 资源 以及位置。


注意位置:

第一张图 0 ,0

第一张图 0 ,-1080

第三张图 0 ,-1080 *2

第四张图 0 ,-1080 *3

第五张图 0 ,-1080 *4

第六张图,以此类推…





step 3 ,为根节点 设置蒙版(Mask)组件。


step 4 ,为bgNode节点 挂载背景滚动脚本,并配置背景节点数组、滚动速度。



Step 5 、脚本 BgMoveView.ts 完整源码

/**
 * 
 * 背景无限滚屏效果实现
 *
 * 
 * */
import { _decorator, Component, Node,UITransform } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('BgMoveView')
export class BgMoveView extends Component {
  /**背景数组 */
    @property({type: Node})
  bgList:Node[] = [];
  /**移动速度 */
  @property({type: Number})
  moveSpeed:number = 200;
  /**背景图片滚出屏幕的位置*/
    bottomPosition:number = 0;
  /**背景图片高度*/
  bgHeight:number = 0;
  onLoad () {
    /**注意是负值*/
    this.bottomPosition = -this.bgList[0].getComponent(UITransform).height;
    this.bgHeight = this.bgList[0].getComponent(UITransform).height;
  }
    start() {
    }
    update(deltaTime: number) {
    for(let i = 0; i < this.bgList.length; i++) {
            /**达到触发条件,改变背景图片位置*/ 
      if(this.bgList[i].position.y <= this.bottomPosition) {
                this.bgList[i].setPosition(this.bgList[i].position.x,
          this.bgList[i+1<this.bgList.length?i+1:0].position.y + this.bgHeight);
      }
          /**背景的移动*/  
      this.bgList[i].setPosition(this.bgList[i].position.x, this.bgList[i].position.y - this.moveSpeed*deltaTime);
    }
  }
}


相关文章
|
6月前
|
前端开发 人机交互
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸
207 0
|
4月前
|
编解码
CocosCreator 面试题(十七)Cocos creator 固定宽度与固定高度的底层原理是什么?Cocos creator是如何做适配的?
CocosCreator 面试题(十七)Cocos creator 固定宽度与固定高度的底层原理是什么?Cocos creator是如何做适配的?
109 0
|
4月前
CocosCreator 面试题(二十) Cocos creator 如何实现一个置灰Shader?
CocosCreator 面试题(二十) Cocos creator 如何实现一个置灰Shader?
|
4月前
|
编解码 前端开发 UED
CocosCreator 面试题(十一)Cocos Creator 屏幕适配
CocosCreator 面试题(十一)Cocos Creator 屏幕适配
102 0
|
4月前
|
缓存
CocosCreator 面试题(十二)Cocos Creator Label 的原理以及如何减少Drawcall
CocosCreator 面试题(十二)Cocos Creator Label 的原理以及如何减少Drawcall
131 0
|
5月前
《QT从基础到进阶·二十七》进度条QProgressBar
《QT从基础到进阶·二十七》进度条QProgressBar
48 0
|
vr&ar 图形学 索引
【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景
|
图形学
带你读《Unity游戏开发(原书第3版)》之二:游戏对象
本书主要介绍Unity2018的使用和游戏开发流程中涉及的各种知识。每一章的结构特别清晰,先综述该章要介绍的内容,然后一步步深入讲解,中间穿插着很多动手做的实践操作,可以让读者加深对某个概念、方法的理解,每章的最后还有一个小测验和一个稍微大一点的实践练习,用于巩固该章的学习内容。