Cocos Creator v2.2.0 测试版如约而至(10/16 更新 rc.5)

再上传一张安卓闪退的图

能找到重现的方法么,可以的话,给我一个demo,我测测看,或者加我QQ 1053210246

我项目里面有使用evalString,因为在IOS v8之前的版本都是没有问题, 升到V8后,就一定会crash,所以我才去测试一下examplecase里面的,发现也是一样,这里面应该是有问题的。ios调用objectivc-c没问题,但object-c调用evalString就会crash

你看下,这个在2.1.3是好的。

性能方面,我没感觉到 2.2. 和 2.1.3有啥区别啊? 怎么感觉微信端2.2 更卡啦? 加载资源直接出现黑屏,在2.1.3.没有这种情况出现。

背景播放 都经常出现异常。

这些都是微信平台的表现出来的。

所有这些在 模拟器/web浏览器运行是好的,但是就是微信平台出现问题。 (2.2RC版本)

PageView 我用的是这个代码。这个在2.1.3是好的

cc.Class({
    extends: cc.PageView,//cc.Component,

    properties: {
    },

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {},

    start () {
    },

   
    onEnable() {
        this._super();
        this.node.on("scrolling", this._onScrollingDrawCallOpt, this);
    },

    onDisable() {
        this._super();
        this.node.off("scrolling", this._onScrollingDrawCallOpt, this);
    },

    _onScrollingDrawCallOpt() {
        if (this.content.childrenCount == 0) {
            return;
        }
        this.optDc();
    },

    optDc() 
    {
        let node = this.node;
        let pos =  cc.v2(
            node.x - node.anchorX *  node.width,
            node.y - node.anchorY *  node.height);

        let svLeftBottomPoint = node.parent.convertToWorldSpaceAR(pos);
        let svBBoxRect = cc.rect(
            svLeftBottomPoint.x, 
            svLeftBottomPoint.y, 
            this.node.width, this.node.height);

        this.content.children.forEach((childNode) => {
            //如果相交了, 那么就显示,否则就隐藏
            let childNodeBBox = childNode.getBoundingBoxToWorld();
            if (childNodeBBox.intersects(svBBoxRect)) {
                childNode.opacity = 255;
            }
            else{
                childNode.opacity = 0;
            }
        });
    }
});

// ScrollViewPlus.js

const { ccclass, property } = cc._decorator;

/**
 * @classdesc 只渲染可视区域的ScrollView
 * @author caizhitao
 * @version 0.1.0
 * @since 2019-07-12
 * @description
 *
 * 用法:
 *
 *      1. 将本组件挂载在节点上即可,和正常ScrollView使用一致
 *
 * 原理:
 *
 *      1. 滚动时,判断子节点是否进入了/离开了可视区域
 *      2. 根据结果回调对应事件,在可以实现类似以下功能:
 *          * 控制可视区域Item显示(透明度改为 255 ),非可视区域Item隐藏(透明度改为 0 )
 */
@ccclass
export default class ScrollViewPlus extends cc.ScrollView {
    @property({
        tooltip: "是否计算在可视区域中Item的相对位置(可能会相对耗性能)"
    })
    caculatePosition: boolean = false;

    onEnable() {
        super.onEnable();
        this.node.on("scrolling", this._onScrollingDrawCallOpt, this);
    }

    onDisable() {
        super.onDisable();
        this.node.off("scrolling", this._onScrollingDrawCallOpt, this);
    }

    private _onScrollingDrawCallOpt() {
        if (this.content.childrenCount == 0) {
            return;
        }
        this.optDc();
    }

    public optDc() {
        ScrollViewPlus.optDc(this, this.caculatePosition);
    }

    /**
     * 优化 ScrollView Content 节点 DC,可以手动调用
     *
     * 具体为
     *
     * 1. 进入ScrollView可视区域是,回调对应 Content 子节点上挂载的 ScollViewPlusItem 组件的 onEnterScorllViewEvents 数组事件
     * 2. 退出ScrollView可视区域是,回调对应 Content 子节点上挂载的 ScollViewPlusItem 组件的 onExitScorllViewEvents 数组事件
     */
    public static optDc(scrollView: cc.ScrollView, caculatePosition: boolean) {
        // 获取 ScrollView Node 的左下角坐标在世界坐标系中的坐标
        let svLeftBottomPoint: cc.Vec2 = scrollView.node.parent.convertToWorldSpaceAR(
            cc.v2(
                scrollView.node.x - scrollView.node.anchorX * scrollView.node.width,
                scrollView.node.y - scrollView.node.anchorY * scrollView.node.height
            )
        );

        // 求出 ScrollView 可视区域在世界坐标系中的矩形(碰撞盒)
        let svBBoxRect: cc.Rect = cc.rect(svLeftBottomPoint.x, svLeftBottomPoint.y, scrollView.node.width, scrollView.node.height);
        // 遍历 ScrollView Content 内容节点的子节点,对每个子节点的包围盒做和 ScrollView 可视区域包围盒做碰撞判断
        scrollView.content.children.forEach((childNode: cc.Node) => {
            //如果相交了, 那么就显示,否则就隐藏
            let childNodeBBox = childNode.getBoundingBoxToWorld();
            if (childNodeBBox.intersects(svBBoxRect)) {
                childNode.opacity = 255;
            }
            else{
                childNode.opacity = 0;
            }
        });
    }
}

就是加啦一个optDc 优化

谢谢反馈,我们会跟进服务面板的问题

嗯,examples 是在 UIKit 的控件调用的。你是在什么情况下用的呢?

并没有使用任何第三方插件,项目比较杂,不太好提供demo,主要是现在不能定位到问题出在哪

进入游戏后发送IOS商品列表请求, IOS返回后就调用evalString把结果传回去,异步的

你好,2.2 有些用户反馈 scrollview/pageview 会变卡,这个我们还在进一步核查中。性能方面只有原生有提升,其它平台应该变化不大。你反馈的其它 bug,能够提供一下更详细的说明吗?比如经常出现异常是什么异常?log 是什么?能给个 demo 吗?

我看报错和中间件有关系,看是不是某个spine报错了,2.2升级了spine,有可能出现解析错误,你用visual studio打开win32工程,这样可以看到报错堆栈,实在不行就加我QQ1053210246,打个default工程给我,我帮你看看。

第三个问题,是加载什么资源,有没有报错

是的,我也是在怀疑和spine有关,游戏中确实用到了大量的spine,已经加你QQ了

试过用vm虚拟机黑苹果的就会这样。还有Mali 4.3.0 etc压缩工具,已经验证过了,在macOs Mojava上,压缩纹理的透明度处理会有问题。只跟系统有关,同一张图输出的md5不一致,最好回退到上一个macOs大版本

1赞

扩展插件吗,确实用到了,CreatorHelp之类的

我提交修复了,麻烦帮忙验证一下是否解决了: https://github.com/cocos-creator/cocos2d-x-lite/pull/1878

能给我看一下你插件的 package.json 的配置吗?

可以的,但是现在电脑不在身边,晚上回去再弄

好的感谢

修复原生中间件(particle)崩溃问题,感谢反馈
https://github.com/cocos-creator/cocos2d-x-lite/pull/1879

未解决呢,还是会crash