求助 cocos2.x版本游戏结束后重新加载场景之后无法控制人物移动

我游戏中角色死亡之后,点击返回加载主菜单场景,然后再点击新的游戏,使用cc.director.loadScene(“scene1”);加载主游戏场景scene1就出现错误:Cannot set property ‘scaleX’ of null
at eval (eval at

报的错如图,毫无头绪
对应报错文件的代码:
里面input就是一个检测键盘输入的单例
还有一个报错的地方是一个自己写的状态机,控制角色的状态图片

4.19补充
就无论怎么修改,把主角作为预设体生成也好,作为普通的节点也好,在第二次加载主游戏场景之后控制键盘都会报Cannot read property ‘xxx’ of null at eval这个类型的错误。


有没有大佬遇到过这种问题

你是不是死了以后返回主场景时没有销毁掉你注册的操作事件,第二次进来操作上次的注册的事件行为也会触发但节点没了,报错了。

不要把监听放到构造函数 constructor里边,单独写个方法调用,防止重复可以添加之前先去掉监听

我确实忘记注销了,谢谢大佬提醒,我去试试

那个地方,我把Input去掉之后,所有键盘响应都放在PlayerControl的代码中也还是报错 :sob:

我把控制角色的状态机删了,消息框架中注册的东西注销之后还是有同样类型的报错。
cocos中切换场景的时候,上一个场景的节点都被销毁了,管理注册的脚本也是挂载到节点上的,切换场景的时候那里面注册的东西应该没了才对。
现在还是报Cannot read property ‘xxx’ of null at eval这种错,只不过xxx换了
图片
图片



上面这里这么写是因为使用动画系统的同时控制角色移动动画不会播放,所以我就做了两个spriteFrame数组,手动切换图片作为动画
图片

不使用这个数组也还会报错,刚刚又测试了一下,感觉场景里面基本所有东西都变成null了

感觉你这是this指向有问题,把项目或者脚本发出来,看一下

项目挺乱的,脚本也挺乱的,我就把几个脚本发出来吧 :sob:,希望大佬不介意
因为修修改改的缘故,里面的状态机和之前说的Input脚本都已经没有使用了
与主角控制有关的脚本.zip (10.2 KB)

改成这样试一下

谢谢大佬,修改之后第二次进入场景移动角色不会再报错了。
就是其他地方还会报错,应该是和我的消息框架有关


但我在节点销毁的时候也把 消息接收者数组 中的元素清空了(虽然用的是pop来移除数组元素,好像不太规范)


切换场景的时候输出数组元素个数也没问题,
但当角色和其他物品发送消息时,它还是报错
消息框架中的脚本.zip (3.9 KB)
这是一些道具的脚本,可能没什么用,还是发出来

这样试一下

之前的错误还是存在,可能是因为Manager管理类没有注销,我再改改试试


图片
谢谢大佬,辛苦大佬了
————————————————————
改了之后直接不会产生掉落物品了,碰到我直接摆放在地上的掉落物品之后,依旧报length的错误

在managerBase中加了个输出

,结果发现破坏物品之后会出一串输出

但是第二进这个场景与物品发生消息交互就还是会报错

看来还是我这个消息框架写的不对

寄了,知道是消息机制那里写错了,但找不到代码在哪,还好内容不多,重开一个工程算了。多谢大佬的帮忙。
顺便还想问一下大家有没有遇到过项目构建发布之后角色受到的重力和调试的时候不同的情况。
我试着在两台电脑上跑同一个项目,角色的重力都为默认值1,但一台电脑上调试的时候就感觉是正常的跳,另一台电脑上调试起来就像失重一样,项目构建之后运行起来也是像失重的感觉,就很奇怪,软件卸载重装之后还是没变

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。