cocos开发2d游戏的时候,模拟背景无限循环移动的思路和实现方法

可以看到背景是一直在移动的,其实这里是使用两张图片拼接在一起实现的类似无线循环的效果,就像一个滚筒一样,将两张一摸一样可以拼接的两张图片衔接在一起,然后贴在滚筒上,当滚筒一直滚动,面向滚筒正方向的你,其实就可以看到类似无限循环的效果。

核心滚动代码

在update函数中,每一帧都要移动两张背景图的位置向下移动,当某一张图移动到屏幕外的时候,就立刻马上设置y轴的位置,让它回到另外一张图衔接的位置

javascript 复制代码
    update(deltaTime: number) {
        // 背景上下连续移动
        this.bg.setPosition(
            this.bg.position.x,
            this.bg.position.y - this.speed * deltaTime,
            this.bg.position.z
        )
        this.bg2.setPosition(
            this.bg2.position.x,
            this.bg2.position.y - this.speed * deltaTime,
            this.bg2.position.z
        )

        // 如果背景移动到屏幕外,则快速将其移动到屏幕内
        if (this.bg.position.y < -852) {
            this.bg.setPosition(
                this.bg2.position.x,
                this.bg2.position.y + 852,
                this.bg2.position.z
            )
        }
        // 如果背景2移动到屏幕外,则快速将其移动到屏幕内
        if (this.bg2.position.y < -852) {
            this.bg2.setPosition(
                this.bg.position.x,
                this.bg.position.y + 852,
                this.bg.position.z
            )
        }
    }

所有代码:

javascript 复制代码
import { _decorator, Component, Node } from 'cc'
const { ccclass, property } = _decorator

@ccclass('bgrun')
export class bgrun extends Component {
    @property(Node)
    public bg: Node = null

    @property(Node)
    public bg2: Node = null

    // 速度
    @property(Number)
    public speed: number = 10

    start() {
        console.log('bgrun')
    }

    update(deltaTime: number) {
        // 背景上下连续移动
        this.bg.setPosition(
            this.bg.position.x,
            this.bg.position.y - this.speed * deltaTime,
            this.bg.position.z
        )
        this.bg2.setPosition(
            this.bg2.position.x,
            this.bg2.position.y - this.speed * deltaTime,
            this.bg2.position.z
        )

        // 如果背景移动到屏幕外,则快速将其移动到屏幕内
        if (this.bg.position.y < -852) {
            this.bg.setPosition(
                this.bg2.position.x,
                this.bg2.position.y + 852,
                this.bg2.position.z
            )
        }
        // 如果背景2移动到屏幕外,则快速将其移动到屏幕内
        if (this.bg2.position.y < -852) {
            this.bg2.setPosition(
                this.bg.position.x,
                this.bg.position.y + 852,
                this.bg.position.z
            )
        }
    }
}
相关推荐
程序员海军2 小时前
用了两年多 GPT,我最近开始换模型了,还折腾了个求职避坑 Agent
前端·人工智能·后端
zttbee2 小时前
echarts图表tooltip色块失效
前端·javascript·echarts
excel4 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
子兮曰4 小时前
CSS 复现 23 种设计风格:从拟物到液态玻璃的成本阶梯与兜底写法【实战】
前端·css·视觉设计
虚无境4 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
柳杉5 小时前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
zimoyin5 小时前
在 C# 里嵌入 JavaScript:用 Jint 做可热更新的自动化脚本(从入门到踩坑)
javascript·c#·自动化
风骏时光牛马6 小时前
从零到实战:AI全栈学习进阶路线
前端
FRing036 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
用户360055579006 小时前
Kestrel_VLLM - 15 · decode 优化四连击:19ms → 8ms
前端