[找到了锅]3.17 侦听触摸事件,快速移动一段时间,就会报错。

cocos2dx 3.15.1
合并过3.17里面的一些可能的修复代码:
ScriptingCore.cpp #define ENGINE_VERSION “Cocos2d-JS v3.15”//merged jsb leak & crash fix from 3.17
第一感觉是新代码导致的问题,我从应用商店下载3.15.1的版本的APP不会崩溃,新代码版本会崩溃。。。
XCODE Version10.1
经过测试发现真机和模拟器都会出现这个问题。真机难出来些,模拟器很容易就出来了。
以前貌似没有这么容易出错过。是因为升级了XCODE吗?有哪些地方不兼容?有相关经验的同学,告知一下吧?
报错位置:ScriptingCore.cpp > executeFunctionWithOwner > bRet = JS_CallFunctionValue(cx, obj, funcVal, args, retVal);
报错原因:Thread 1: EXC_BAD_ACCESS (code=1, address=0x42ad92df1f)
DEMO,不要什么DEMO,侦听一个touchmove触摸事件即可:
_self是一个Sprite.

_self._touchListenr = cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
swallowTouches: _self.swallowTouches,
onTouchBegan: _self._onTouchesBegan,
onTouchMoved: _self._onTouchesMoved,
onTouchEnded: _self._onTouchesEnded,
onTouchCancelled: _self._onTouchesEnded
}, _self);

_onTouchesMoved: function (touch, event) {

trace(“m-------->1”)

        if(cc.sys.isObjectValid(touch)==false){
            trace("m-------->1.1")
            return;
        }

        if(cc.sys.isObjectValid(event)==false){
            trace("m-------->1.2")
            return;
        }
        var _self = event.getCurrentTarget();
        trace("m-------->2")
        if (_self.ignoreTouchEvent) {
            trace("m-------->2.1")
            return false;
        }
        trace("m-------->3") //下面就打印不出来,然后报错了。
        try{
            var posX=touch.getLocationX();
            trace("m-------->3.1")
            var posY=touch.getLocationY();
            trace("m-------->3.2")
            var $pos = {
                x:posX,
                y: posY,
                originEvent: event,
                touch: touch

            };
            trace("m-------->3.3")
        }catch (e) {
            trace("m-------->3.4")
            trace(e)
        }

        trace("m-------->4")

        _self._onEventTrigger(TouchesManager.EVENT_TYPE_TOUCH_MOVE, $pos);
        trace("m-------->5")

    }

最终发现问题是由于GC太频繁了。

都在搞万年扶不起的H5游戏赚快钱去了,谁还会理2dx的问题

没关系 反正是开源的 cocos2dx 目前还是比较稳定的

反正我是觉得目前比cocos creator 好用一万倍 不管怎么说 稳定压倒一切 天天跟引擎做斗争就没意思了

2d-x 3.17 的下一个版本 3.18(将改为 3.17.1),即将发布,2d-x 还在持续维护。

另外语言上的优先级是 C++ > Lua > JavaScript。当然如果有好的 JS 问题修复 PR,也会合并。