编程新手求助:实现卡车到达目的地后切换路线及循环运输逻辑
嘿,看你的描述,我大概清楚你卡在哪了——卡车跑完第一个站点就“罢工”,还没实现往返搅拌站的循环对吧?我给你拆解下解决方案,一步步来:
第一步:先搞定「到达站点后切换目标」的核心逻辑
首先你得有个靠谱的方法判断卡车确实到达了当前目的地,毕竟直接用坐标完全相等容易因为精度问题卡壳。比如用距离阈值来判断:
// 计算卡车位置和目标的距离,小于5像素就算到达(阈值可以自己调) function isTruckArrived(truckPos, targetPos) { const deltaX = truckPos.x - targetPos.x; const deltaY = truckPos.y - targetPos.y; return Math.sqrt(deltaX * deltaX + deltaY * deltaY) < 5; }
接下来,在你每帧更新卡车状态的函数里(比如update()或者draw()循环里),加个判断:如果到达了当前目标,就切换到下一个。
第二步:管理运输路线的循环顺序
你需要两个变量来跟踪状态:
currentTargetIndex:记录当前要去的是路线里的第几个目标deliveryRoute:存储完整的运输路径,顺序是「第一个站点 → 第二个站点 → 搅拌站」
比如初始化代码可以这么写:
let currentTargetIndex = 0; let deliveryRoute = []; const concretePlantPos = { x: 100, y: 100 }; // 替换成你的搅拌站初始位置 // 当用户添加站点后,更新运输路线(确保至少有2个站点才生效) function refreshDeliveryRoute() { if (sites.length >= 2) { // 按顺序组装路线:第一个站点→第二个→回到搅拌站 deliveryRoute = [sites[0], sites[1], concretePlantPos]; } else { // 站点不够2个,让卡车待在搅拌站 deliveryRoute = [concretePlantPos]; currentTargetIndex = 0; } } // 把这个函数绑定到你的mousePress添加站点的逻辑里,每次加完站点就调用 // 比如在mousePress处理函数末尾加:refreshDeliveryRoute();
然后在更新卡车的循环里,加入到达判断和目标切换:
function updateTruck() { if (deliveryRoute.length === 0) return; // 没路线就啥也不干 const currentTarget = deliveryRoute[currentTargetIndex]; // 这里放你原来的卡车移动逻辑:朝着currentTarget移动 moveTruckToTarget(currentTarget); // 检查是否到达 if (isTruckArrived(truck.position, currentTarget)) { // 切换到下一个目标 currentTargetIndex++; // 如果已经走完一轮(到了搅拌站),重置索引实现循环 if (currentTargetIndex >= deliveryRoute.length) { currentTargetIndex = 0; // 可以加个延迟,比如让卡车在搅拌站停2秒再出发,更真实 setTimeout(() => { currentTargetIndex = 0; }, 2000); } } } // 你的卡车移动函数示例(如果还没写的话) function moveTruckToTarget(target) { const speed = 2; // 调整移动速度 const dx = target.x - truck.position.x; const dy = target.y - truck.position.y; const distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { // 归一化方向,避免斜着走更快 truck.position.x += (dx / distance) * speed; truck.position.y += (dy / distance) * speed; } }
第三步:处理一些边界小问题
- 如果用户还没加够2个站点,让卡车停在搅拌站,不要乱跑
- 移动逻辑里要做归一化,不然卡车斜着走会比直着走快,显得奇怪
- 调试的时候可以在控制台打印
currentTargetIndex和当前目标的坐标,看切换是否正常
这样调整后,卡车就能按「搅拌站→站点1→站点2→搅拌站」的顺序循环跑起来啦!
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

