我们必须群策群力---拯救低版本

由于CocosCreator是引擎和编辑器绑定的模式, 并且每次版本更新几乎都伴随着底层代码的更新, 所以对于有安卓和iOS包的项目, 除非强制玩家整包更新 否则仍需要维护老版本的用户, 并且很多成熟上线了的项目也不可能大步向前全靠提升版本的方式来修复引擎相关的bug

所以势必有很多开发者和我们一样都被困在某些低版本的CocosCreator中无法升级.

所以我想发起一个低版本自救讨论, 意图是通过大家群策群力来自己发现bug 然后咱想办法修复或通过合并官方代码 来处理这些bug

希望大家踊跃发言 留下自己的CocosCreator版本遇到的问题 然后大家群策群力修一下

请大家不要水贴 不要说什么升级之类的 原因在最上边不在赘述

4赞

我们的项目横跨2.1.0, 2.2.0, 2.2.2

所以我们项目里有一个脚本专门用来修复cocos引擎的bug, 这个脚本

const useHook = true;
; if (useHook && !cc['isBYHooked'] && !CC_EDITOR) {
    cc['isBYHooked'] = true;
    // 相关修复代码在这之后

    // 相关修复代码在这之前
}

已知bug ScrollView的事件问题,有时候触到边界但却收不到对应的 “scroll-to-top” “scroll-to-bottom” “scroll-to-right” “scroll-to-left” 这四个事件 已通过植入如下代码修复
注意 此bug 目前cocos官方并未修复 所以理论上所有版本cocoscreator都有此bug

我的PR, https://github.com/cocos-creator/engine/pull/8937

    cc.ScrollView.prototype['_scrollChildren'] = function (deltaMove) {
        deltaMove = this._clampDelta(deltaMove);
        var realMove = deltaMove;
        var outOfBoundary = void 0;
        if (this.elastic) {
            outOfBoundary = this._getHowMuchOutOfBoundary();
            realMove.x *= 0 === outOfBoundary.x ? 1 : .5;
            realMove.y *= 0 === outOfBoundary.y ? 1 : .5;
        }
        if (!this.elastic) {
            outOfBoundary = this._getHowMuchOutOfBoundary(realMove);
            realMove = realMove.add(outOfBoundary);
        }
        let vertical_scrollEventType = "";
        let horizontal_scrollEventType = "";
        if (this.vertical) {
            if (realMove.y > 0) {
                var icBottomPos = this.content.y - this.content.anchorY * this.content.height;
                icBottomPos + realMove.y > this._bottomBoundary && (vertical_scrollEventType = "scroll-to-bottom");
            } else if (realMove.y < 0) {
                var icTopPos = this.content.y - this.content.anchorY * this.content.height + this.content.height;
                icTopPos + realMove.y <= this._topBoundary && (vertical_scrollEventType = "scroll-to-top");
            }
        }
        if (this.horizontal) {
            if (realMove.x < 0) {
                var icRightPos = this.content.x - this.content.anchorX * this.content.width + this.content.width;
                icRightPos + realMove.x <= this._rightBoundary && (horizontal_scrollEventType = "scroll-to-right");
            } else if (realMove.x > 0) {
                var icLeftPos = this.content.x - this.content.anchorX * this.content.width;
                icLeftPos + realMove.x >= this._leftBoundary && (horizontal_scrollEventType = "scroll-to-left");
            }
        }
        this._moveContent(realMove, false);
        if (0 !== realMove.x || 0 !== realMove.y) {
            if (!this._scrolling) {
                this._scrolling = true;
                this._dispatchEvent("scroll-began");
            }
            this._dispatchEvent("scrolling");
        }
        vertical_scrollEventType && this._dispatchEvent(vertical_scrollEventType);
        horizontal_scrollEventType && this._dispatchEvent(horizontal_scrollEventType);
    };

针对不同版本遇到的问题, 有如下版本判断代码

    if (cc.ENGINE_VERSION === "2.2.2") {
    // 针对2.2.2的修复代码
    }

2.2.2 已知bug
button组件如果先改变interactable再添加到场景上, 则按钮不会刷新对应的disabled状态
通过以下代码修复

        cc.Button.prototype['oldOnLoad'] = cc.Button.prototype['onLoad'];
        cc.Button.prototype['onLoad'] = function () {
            this._updateState();
            return this.oldOnLoad && this.oldOnLoad()
        }

赞一个!!!

保持,我们现在还在用2.1.3,从1.9版本升上来的

对于2.4.x之前的版本 通过cc.loader.load 动态加载的资源需要自己手动释放, 试过很多方法都没成功, 后来从论坛里找到一个解决方案

感觉没这个必要吧 直接升2.4就好了 2.1都几年前的东西了

我们讨论的不是一个事情, 建议直接关掉我的帖子, 不要浪费您的时间

这个要释放依赖资源才会真正释放的 释放不好就报错卡死 现在2.4的这个 即使释放了 有依赖也不会被释放

性能要求不高的项目还不如套一个webview,原生功能不变就不用整包更新,引擎更新也只是个小热更了

我们说的也不是一个事情, 建议直接关掉我的帖子, 不要浪费您的时间

好的 我就想看多少人 跟你有一样的问题 改这种bug 我觉得没意义

唉做项目的人呀,就喜欢往一个胡同里转,不会想办法绕道

我们连cocos2dxlua的老项目都能改成复用Creator的新项目功能不用重新抄一份

我们的项目也是从cocos2dx-lua 3.3升级过来的, 但是仍有lua版本的用户, 所以现在很多功能仍需要在CocosCreator开发一版, lua版再开发一版, 用的还是CocosStudio2.0.6 开发用的Mac版本太高已经打不开CocosStudio2.0.6了, 但是就算起虚拟机也还是要开发维护一版lua的, 有用户有充值不可能丢掉

为此我还写了一个反向把CocosCreator的prefab转回CocosStudio2.0.6的csd的工具

cocos开发的绝大多数都是小型游戏,要考虑的是项目周期,不是能不能做到的问题,而是时间

所以,为啥要升级,是出现了性能问题,还是别的问题呢

性能问题 因为2.1.0在iOS上不支持jit 所以发热比较严重 被迫升了一版2.2 当时还发现测试版的问题