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);
		}
	}
}
相关推荐
lll23526917794 小时前
2026行业语音转写工具专业术语转写功能横向分析
笔记·智能手机
小poop7 小时前
CSS 基础与实战:从入门到精通网页美化
前端
Csvn8 小时前
运行时性能
前端
Never_every999 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck9 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖10 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
欣欣之王来了12 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒12 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师12 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端
特立独行的猫A12 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos