refactor(3d-situational-awareness): **更新动画行为至末端停止并调整设备速度**

将计时范围从 `LOOP_STOP` 更改为 `CLAMPED`,以防止动画循环。
同时将设备实体的速度乘数提高 1.5 倍,以实现更快的移动。
添加动画持续时间详情的日志记录。
This commit is contained in:
Zzc 2025-11-27 15:47:42 +08:00
parent 08096350cb
commit dc4c88acb5

View File

@ -120,7 +120,7 @@ export function useEntityAnimation() {
viewer.clock.startTime = startTime.clone() viewer.clock.startTime = startTime.clone()
viewer.clock.stopTime = stopTime.clone() viewer.clock.stopTime = stopTime.clone()
viewer.clock.currentTime = startTime.clone() viewer.clock.currentTime = startTime.clone()
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP // 动画结束后停止 viewer.clock.clockRange = Cesium.ClockRange.CLAMPED // 动画到达终点后停止,不循环
viewer.clock.multiplier = 1 // 实时速度 viewer.clock.multiplier = 1 // 实时速度
viewer.clock.shouldAnimate = true viewer.clock.shouldAnimate = true
@ -385,7 +385,7 @@ export function useEntityAnimation() {
viewer.clock.startTime = startTime.clone() viewer.clock.startTime = startTime.clone()
viewer.clock.stopTime = stopTime.clone() viewer.clock.stopTime = stopTime.clone()
viewer.clock.currentTime = startTime.clone() viewer.clock.currentTime = startTime.clone()
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP viewer.clock.clockRange = Cesium.ClockRange.CLAMPED // 动画到达终点后停止,不循环
viewer.clock.multiplier = 1 viewer.clock.multiplier = 1
viewer.clock.shouldAnimate = true viewer.clock.shouldAnimate = true
@ -470,7 +470,12 @@ export function useEntityAnimation() {
}) })
// 计算动画时长(使用速度倍数) // 计算动画时长(使用速度倍数)
const speedMultiplier = options.speedMultiplier || 10 // 装备移动速度更快speedMultiplier 更大 = 动画时间更短 = 移动更快)
const baseSpeedMultiplier = options.speedMultiplier || 10
const speedMultiplier = route.type === 'equipment'
? baseSpeedMultiplier * 1.5 // 装备速度是人员的1.5倍
: baseSpeedMultiplier // 人员保持原速
const animationDuration = Math.min( const animationDuration = Math.min(
Math.max(route.duration / speedMultiplier, 30), // 最小30秒 Math.max(route.duration / speedMultiplier, 30), // 最小30秒
120 // 最大120秒 120 // 最大120秒
@ -510,6 +515,14 @@ export function useEntityAnimation() {
const icon = route.type === 'equipment' ? deviceIcon : soldierIcon const icon = route.type === 'equipment' ? deviceIcon : soldierIcon
const trailColor = route.type === 'equipment' ? Cesium.Color.ORANGE : Cesium.Color.CYAN const trailColor = route.type === 'equipment' ? Cesium.Color.ORANGE : Cesium.Color.CYAN
// 日志输出:显示每个实体的动画时长
console.log(
`[useEntityAnimation] ${route.name} (${route.type}): ` +
`原始时长=${Math.round(route.duration)}秒, ` +
`速度倍数=${speedMultiplier.toFixed(1)}, ` +
`动画时长=${Math.round(animationDuration)}`
)
// 创建动画实体 // 创建动画实体
return viewer.entities.add({ return viewer.entities.add({
availability: new Cesium.TimeIntervalCollection([ availability: new Cesium.TimeIntervalCollection([
@ -584,7 +597,7 @@ export function useEntityAnimation() {
viewer.clock.startTime = startTime.clone() viewer.clock.startTime = startTime.clone()
viewer.clock.stopTime = stopTime.clone() viewer.clock.stopTime = stopTime.clone()
viewer.clock.currentTime = startTime.clone() viewer.clock.currentTime = startTime.clone()
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP viewer.clock.clockRange = Cesium.ClockRange.CLAMPED // 动画到达终点后停止,不循环
viewer.clock.multiplier = 1 viewer.clock.multiplier = 1
viewer.clock.shouldAnimate = true viewer.clock.shouldAnimate = true