当前位置: 首页 > news >正文

跑酷游戏开发笔记1 背景移动 cocos3.8.7

创建一个场景,然后为场景添加几个节点,构成背景,控制节点移动,为每个节点设置速度。

背景节点的移动实现

 /*** 地面相关节点定义*/// 绑定地面节点@property(Node)ground0: Node = null;@property(Node)ground1: Node = null;// 地面移动速度@propertygroundSpeed: number = 300;update(deltaTime: number) {//每帧执行一次/*** 控制ground地面移动*///移动距离const groundmoveDistance = this.groundSpeed * deltaTime;//ground0移动//getPosition() 方法获取节点当前的坐标(gcp1 是一个包含 x、y 属性的位置对象)let gcp0 = this.ground0.getPosition();//setPosition() 方法设置节点的新坐标this.ground0.setPosition(gcp0.x - groundmoveDistance, gcp0.y);//ground1移动let gcp1 = this.ground1.getPosition();this.ground1.setPosition(gcp1.x - groundmoveDistance, gcp1.y);//判断gcp0是否超出屏幕if (gcp0.x < -730) {//重新获取ground1的位置,此时位置已经发生改变了gcp1 = this.ground1.getPosition();//移动1到背景0的位置this.ground0.setPosition(gcp1.x + 728, gcp1.y);}//判断p2是否超出屏幕,超出则把1号背景放在2号背景右边if (gcp1.x < -730) {gcp1 = this.ground0.getPosition();this.ground1.setPosition(gcp0.x + 728, gcp0.y);}
}
1. 变量定义部分
// 绑定两个地面节点(通常是完全相同的地面图片)
@property(Node)
ground0: Node = null;@property(Node)
ground1: Node = null;// 地面移动速度(像素/秒)
@property
groundSpeed: number = 300;
  • 核心设计:使用两个完全相同的地面节点(ground0 和 ground1)横向拼接,形成连续的地面
  • 速度控制:groundSpeed 定义移动速率,值越大地面滚动越快
2. 更新逻辑(update 方法)

每帧执行一次,负责地面的移动和重置,实现循环滚动效果。

2.1 计算移动距离
const groundmoveDistance = this.groundSpeed * deltaTime;
  • deltaTime:两帧之间的时间间隔(秒)
  • 移动距离 = 速度 × 时间,确保不同帧率下移动速度一致(时间补偿)
2.2 地面移动
// 移动 ground0
let gcp0 = this.ground0.getPosition();
this.ground0.setPosition(gcp0.x - groundmoveDistance, gcp0.y);// 移动 ground1
let gcp1 = this.ground1.getPosition();
this.ground1.setPosition(gcp1.x - groundmoveDistance, gcp1.y);
  • 两个地面节点同时向左移动(x 坐标减小)
  • 保持相同速度,确保拼接处无缝衔接
2.3 重置逻辑(核心)
// 当 ground0 完全移出屏幕左侧时
if (gcp0.x < -730) {// 重新获取 ground1 当前位置(因为可能已移动)gcp1 = this.ground1.getPosition();// 将 ground0 放到 ground1 右侧,形成连续拼接this.ground0.setPosition(gcp1.x + 728, gcp1.y);
}// 当 ground1 完全移出屏幕左侧时
if (gcp1.x < -730) {gcp1 = this.ground0.getPosition();// 将 ground1 放到 ground0 右侧,形成连续拼接this.ground1.setPosition(gcp0.x + 728, gcp0.y);
}
  • 关键数值说明:
    • -730:屏幕左侧边界阈值(当地面节点左边缘超过此值时,判定为完全移出屏幕)
    • 728:地面节点的宽度(确保重置后两个节点刚好无缝拼接)
  • 循环逻辑:当一个节点移出屏幕时,立即将其放到另一个节点的右侧,形成无限循环

实现思路总结

  1. 双节点交替:通过两个相同的地面节点横向排列,模拟无限长地面
  2. 同步移动:两节点以相同速度向左移动,保持相对位置不变
  3. 边界检测:实时判断节点是否完全移出屏幕
  4. 无缝重置:将移出屏幕的节点立即放到另一个节点右侧,形成视觉上的连续滚动

这种设计广泛用于 2D 横版游戏的背景滚动,性能高效且实现简单,只需确保两个节点的尺寸和拼接位置精确匹配即可。

http://www.dtcms.com/a/583011.html

相关文章:

  • 开封旅游网站建设项目方案完整html网页代码案例
  • 设计企业网站wordpress聊天小工具
  • 输入框实现placeholder 变成 title 展示
  • WinSCP无法连接CenOS7,解决
  • 盈佳国际天天做赢家网站wordpress仿北京时间
  • Fastapi 进阶四:Redis数据库及aioredis使用
  • Redis分布式锁的最佳实践:基于Redisson的实现方案
  • ui做的好看的论坛网站wordpress改字体
  • 做网站所需的知识技能在线域名解析ip地址查询
  • (111页PPT)智慧工地施工智能化解决方案(附下载方式)
  • vxe-table和sortablejs实现行拖动
  • brew安装JD-GUI并解决启动问题
  • 数组:额外加餐的第二天
  • 网站模板ftpthinkphp网站开发技术
  • php个人网站模板下载电子商务网站前台建设常用的技术有
  • 哈尔滨 房产网站建设wordpress如何清除导入的模板
  • 可做市值曲线的网站建设一个功能简单的网站
  • 【ComfyUI】Wan2.2 动态服饰描述驱动换装图生视频
  • 基于VibeVoice搭建语音合成demo
  • react项目使用json-server模拟接口获取数据
  • 荆州建设局网站邯郸信息港征婚
  • 有口碑的番禺网站建设深圳招聘网最新招聘信息
  • 网站前台如何刷新整合营销案例
  • 可以自己做网站卖东西搜索引擎优化规则
  • C++ this指针、常函数、内联函数
  • 网页设计制作网站大一素材网站集群怎么做
  • Hudson River Trading VO 面经分享|一场关于极限思维与逻辑速度的考验
  • html5企业网站案例企业免费自助建站系统
  • 企业建设网站价格成都专业网站搭建公司
  • 西宁建设网站软件百度导航最新版本免费下载