You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpriteKit游戏执行segue后无法与menu viewcontroller交互问题求助

问题根因
  • 代码执行逻辑冲突:performSegueWithIdentifier 属于异步操作,触发后不会立刻完成页面切换,你紧接着执行performClose销毁当前窗口,会导致第一次跳转时上下文刚好生效,第二次进入游戏再返回后,菜单视图控制器的响应链被未正常销毁的旧游戏场景、视图控制器实例阻塞,或是菜单视图被残留的透明游戏层覆盖,无法接收交互事件。
  • 多余的窗口关闭操作完全没必要:你已经通过segue实现页面跳转,额外关闭窗口会破坏App的视图层级结构,多次进出游戏后就会出现层级冲突。
修复方案
  1. 优先删除多余的窗口关闭代码,仅保留segue跳转逻辑即可:
[self.view.window.contentViewController performSegueWithIdentifier:@"endGame" sender:self];
  1. 跳转前主动清理当前SKScene的残留资源,避免内存泄漏和层级残留:
// 清理当前场景的所有动作、节点
[self removeAllActions];
[self removeAllChildren];
// 解绑当前SKScene与视图的关联
[self.view presentScene:nil];
// 再执行跳转
[self.view.window.contentViewController performSegueWithIdentifier:@"endGame" sender:self];
  1. 避免用即将销毁的上下文触发segue,改为从App根控制器发起跳转,保证执行上下文有效:
NSViewController *rootVC = [NSApplication sharedApplication].keyWindow.contentViewController;
[rootVC performSegueWithIdentifier:@"endGame" sender:self];
  1. 如果问题依然存在,可以通过Xcode的「Debug View Hierarchy」工具查看返回菜单后的视图层级,确认是否有未正常销毁的游戏视图覆盖在菜单上方,如果存在则需要在跳转前主动dismiss当前游戏视图控制器,再执行segue。

内容的提问来源于stack exchange,提问作者Jobalisk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:06:05