发布时间:2025-06-24 18:54:38 作者:北方职教升学中心 阅读量:066
传说中,这群波拉哩的共同祖先是一只叫“塔坦”的超级波拉哩,塔坦的职责就是守护宇宙瑰宝“荆棘之花”,它拥有强大的能量,会分出分身,变化万物,唯一的弱点就是贪吃。
游戏以玩家间的实时互动PK为设计宗旨,通过简单的规则将玩家操作直接转化为游戏策略,体验智谋碰撞的战斗乐趣。
运动状态包括:
- 位置
- 移动方向
- 时间戳
模拟步骤:
- 在收到运动状态改变时,根据运动改变时的位置,方向,以及当前时间戳与运动改变时的时间戳的差值,计算出当前应该所在的位置 p0
- 玩家节点当前实际所在位置 p1,p0 - p1(向量减法),即为校正后的运动路径
- 对路径进行模拟,直至下次运动状态改变
球控制器,当前客户端需要添加组件,由用户输入直接移动,并触发移动同步
constBall =require("Ball");constConstants =require("../Constants");constLeanCloud =require("../LeanCloud");const{getClient }=LeanCloud;/** * 球控制器,当前客户端需要添加组件,由用户输入直接移动,并触发移动同步 */cc.Class({extends:cc.Component,properties:{},// LIFE-CYCLE CALLBACKS:onLoad(){cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this._onKeyDown,this);cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,this._onKeyUp,this);this._ball =this.node.getComponent(Ball);this._direction =cc.Vec2.ZERO;},onDestroy(){cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN,this._onKeyDown,this);cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP,this._onKeyUp,this);},start(){this._cameraNode =cc.find("Canvas/Main Camera");},update(dt){constspeed =this._ball.getSpeed();constdelta =this._direction.normalize().mul(speed *dt);constposition =this.node.position.add(delta);const{x,y }=position;const{LEFT,RIGHT,TOP,BOTTOM}=Constants;constnewPosition =cc.v2(Math.min(Math.max(x,LEFT),RIGHT),Math.min(Math.max(y,BOTTOM),TOP));this.node.position =newPosition;// 设置摄像机跟随this._cameraNode.position =this.node.position;},_onKeyDown(event){this.running =true;letdir =this._direction.clone();switch(event.keyCode){casecc.macro.KEY.a:casecc.macro.KEY.left:dir.x =-1;break;casecc.macro.KEY.d:casecc.macro.KEY.right:dir.x =1;break;casecc.macro.KEY.w:casecc.macro.KEY.up:dir.y =1;break;casecc.macro.KEY.s:casecc.macro.KEY.down:dir.y =-1;break;default:break;}this._synchMove(dir.normalize());},_onKeyUp(event){letdir =this._direction.clone();switch(event.keyCode){casecc.macro.KEY.a:casecc.macro.KEY.left:casecc.macro.KEY.d:casecc.macro.KEY.right:dir.x =0;break;casecc.macro.KEY.w:casecc.macro.KEY.up:casecc.macro.KEY.s:casecc.macro.KEY.down:dir.y =0;break;default:break;}this._synchMove(dir.normalize());},_synchMove(dir){if(dir.fuzzyEquals(this._direction,0.01)){return;}this._direction =dir;const{x,y }=this.node.position;const{x:dx,y:dy }=this._direction;constclient =getClient();client.player.setCustomProperties({move:{p:{x,y },d:{x:dx,y:dy },t:Date.now()}});}});
项目结构
├── Animation 动画目录├── Prefabs 预制目录,主要存放球,食物预制体├── Scene 场景目录,主菜单场景,战斗场景├── Script 脚本目录│ ├── Battle 战斗相关脚本目录│ │ ├── Ball.js 球节点控制脚本│ │ ├── BallController.js 玩家控制球脚本,生成移动数据同步给其他客户端│ │ ├── BallSimulator.js 玩家运动模拟脚本,根据玩家运动数据,模拟运动行为│ │ ├── Battle.js 战场节点总控制器,用于接收并解析战斗中的自定义事件,驱动场景节点及 UI 节点变化│ │ ├── BattleHelper.js 战场工具脚本│ │ ├── Food.js 食物节点控制脚本│ │ ├── Master.js 游戏逻辑脚本,用于区分 Master 客户端与普通客户端,Master 组件用于生成房间数据及逻辑判断,只有 Master 的客户端才拥有这个组件,包括最初的房间的创建者和切换后的新房主。他们是天生的战斗种族,为战斗而生,为战斗而亡。│ │ ├── PlayerInfoItem.js 玩家信息 UI 节点控制脚本│ │ └── UI.js UI 控制脚本│ ├── Menu主菜单相关脚本目录│ │ └── Menu.js 主菜单脚本│ ├── Constants.js 游戏中用到的常量│ └── LeanCloud.js 全局存放 LeanCloud SDK 对象的脚本├── Texture 素材资源目录└── play.js LeanCloud 实时对战服务 SDK
添加wx/微信公众回复球球大作战获取完整代码
在线体验链接
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
欢迎添加微信,加入我的核心小队,请备注来意
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇