private _arrayCars :string[] = []; private _cd :Function |null= null; public start(){ this._arrayCars = this.cars.split(","); } public startSchedule(cd:Function){ if(this.type!=ROAD_POINT_TYPE.AI_START){ return; } this._cd = cd; this.scheduleOnce(this._startDelay,this.delayTime);//一定延迟时间 后开始发车。 } public stopSchedule(){ this.unschedule(this._startDelay); this.unschedule(this._scheduleCD); } private _startDelay(){ this._scheduleCD(); this.schedule(this._scheduleCD,this.interval,macro.REPEAT_FOREVER);//根据时间,间隔 每隔多少时间。生产一个小车 } private _scheduleCD(){ const index = Math.floor(Math.random()*this._arrayCars.length); if(this._cd){ this._cd(this,this._arrayCars[index]); } }
import { _decorator, Component, Node, loader, Prefab } from 'cc'; import { Car } from './Car'; import { RoadPoint } from './RoadPoint'; import { PoolManager } from './data/PoolManager'; const { ccclass, property } = _decorator; @ccclass('CarManager') export class CarManager extends Component { @property({ type: Car }) mainCar: Car | null = null; //mainCai :Car = null; private _currentPath: Node[] = [];//当前路径 private _aiCars: Car[] = [];//当前的ai小车 public reset(points: Node[]) { if (points.length <= 0) { console.log("没有point在map"); return; } this._currentPath = points; this._createMainCar(points[0]); //从设置小车开始执行。 this._startSchedule(); } public controMoving(isRunnding = true) { if (isRunnding) { //这个mainCar就是脚本。 this.mainCar?.startRunning(); } else { this.mainCar?.stopRunning(); } } private _createMainCar(point: Node) { this.mainCar?.setEntry(point, true); } private _startSchedule() { for(let i=1; i<this._currentPath.length; i++){ const point = this._currentPath[i]; //点上面有RoadPoint const roadPoint = point.getComponent(RoadPoint); roadPoint?.startSchedule(this._createEnemy.bind(this)) } } private _stopSchedule() { } private _createEnemy(road : RoadPoint , carID:string){ const path = `car/car${carID}`; const self = this; console.log("self=carmanager"); loader.loadRes(path, Prefab, (err: any, prefab: Prefab) => { if (err) { console.warn(err); return; } const car = PoolManager.getNode(prefab,self.node); const carComp = car?.getComponent(Car);//car的脚本 = carComp if(carComp!=null){ this._aiCars.push(carComp); carComp?.setEntry(road.node); carComp.maxSpeed = road.speed; carComp.startRunning(); carComp.moveAfterFinished(this._recycleAICar.bind(this)); } }); } private _recycleAICar(car :Car){ //在列表中找到这个car console.log("carManager._recycleAICar=回收小车"); const index = this._aiCars.indexOf(car); if(index>=0){ //-1是没有找到 //pool 回收 PoolManager.setNode(car.node); //从数组里面删除 this._aiCars.splice(index,1); } } }
_arrivalStation 后面添加代码
站长微信:xiaomao0055
站长QQ:14496453