【RC2 已更新】Cocos Creator v2.0.1 社区版本发布

RichText现在默认颜色是白色,而且不会根据Node设置的color变化?

开放数据域依然有问题啊,排行榜现在彻底显示不出来,在1.9.3版本正常运行

粒子系统还是有点问题

正常效果是这样的

在粒子生命末期的属性貌似会出问题,时不时的就会变成这样

浏览器和编辑器里的表现是一样的

在极端点,把开始结束的alhpa值都设为0

在烟的末期还会有图像

粒子文件
yan.zip (5.0 KB)

从编辑器导出的,貌似导出来,在导回去效果还不一样,你们看看吧

记录了

可能需要更新 Sprite 的状态:sprite.markForUpdateRenderData(true)

那个例子里面的 camera.render 应该是 ok 的,但是 putImageData 在微信中肯定不支持,我的意思是你看一下范例工程里面的 camera to sprite 用例,展示了截图为 Texture 的过程。但是 camera to image 肯定是不支持,因为微信无法获取 canvas 的 image data,也无法生成 base64 数据

对,2.1 之前不支持 Node color 直接影响 RichText

你在子域用的是 WebGL renderer 啊,按理说我们已经屏蔽了,你是怎么做的?看下模块设置,要去掉 WebGL Renderer,勾选 Canvas Renderer

另一个也反馈了末尾 alpha 有问题的现象,我们会看一下

打包webmobile报错
Failed to load resource: the server responded with a status of 404 (Not Found)
什么情况?

1赞

BoxCollider在安卓上表现正常,在IOS上首次碰撞会突然变得特别卡,导致在IOS上几乎不可用

cc.RichText缺字的问题,尝试了提供单独的Demo,难以重现。
应该是从池中取出的节点的某个属性为脏属性导致的不显示。段落看起来都是对的。

cc.RichText在2.0退回到1.9.x时不可用,如果之前是用1.9.x编辑的还可以,如果是用2.0编辑的,必须删掉,这个不知道算不算问题~~~

史上最好用开放数据域方案

微信分享图只能分享本地图片地址或者网络图片地址。那么不用截图的话,新版本如何生成图分享?

请问 2.x 会支持 设备震动功能吗? vibrate

子域去掉WebGL renderer选项后又遇到了这个报错

我们的测试貌似没有反馈这样的问题,会不会有其他原因,或者提供 demo

我们确实也没有重现,你把你那边错误和期望的表现都发一下,RichText 的内容也可以发一下

在写文档,暂时可以参考 demo 的 master 分支
https://github.com/cocos-creator/demo-wechat-subdomain

微信自己有截图到文件的方法,引擎做不到这点,就不提供了

麻烦用各个系统/平台的接口把

Graphics 模块要加上

cc.RichText的缺字有线索了。
发现池中取出的对象的_active为false
在CCRichText.js的pool.get函数中加入下面一行,看似问题解决了

labelNode.active = true;

不知道还有没有别的脏属性。

反馈一个很久没解决的问题吧
用2.0.1 社区版
安卓手机 chrome浏览器或者安卓原生浏览器
打包web-mobile版本, 竖屏。
手机关闭自动转屏后,
使用editbox 还是会在输入文字的时候,弹出输入框后界面会缩小然后横屏,输入结束又变回竖屏。效果很奇怪。从1.9x就是这样了。能不能在竖屏游戏的时候,editbox输入不要强制旋转屏幕了?

加了一个node,


编辑器开始不停的报错,运行正常·········

终于解决了!感谢大佬!泪流满面啊

但是之前1.9是可以

cc.director.once(cc.Director.EVENT_AFTER_DRAW, () => {
        
            let rt = cc.RenderTexture.create(width, height);
            imageNode._sgNode.addChild(rt);
            rt.setVisible(false);

             //  用rt截图
            rt.begin();
            imageNode.getComponent(cc.Sprite)._sgNode.visit();
            for (let i=0 ;i < imageNode.childrenCount;i++){
                imageNode.children[i]._sgNode.visit();
            }
            rt.end();
 
            // win32测试截出来保存的图,把注释打开的话需要把注释后面的全部注释掉来测试
            // rt.saveToFile("demo.png",cc.ImageFormat.PNG, true, function () {
            //     //把 renderTexture 从场景中移除
            //     rt.removeFromParent();
            //     cc.log("capture screen successfully!");
            // });
           
            let texture = rt._texture._glID;
            let frameBuffer = gl.createFramebuffer();
            gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);
            gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
            // 每个像素点需要rgba四个值
            let data = new Uint8Array(width * height * 4);
            gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);

            // RenderTexture截出来的图是反向的,下面这段代码通过把data数组反向,来把图像反过来。
            let halfHeight = Math.floor(height / 2);
            let bytesPerRow = width * 4;
            let temp = new Uint8Array(width * 4);
            for (let y = 0; y < halfHeight; ++y) {
                let topOffset = Math.round(y * bytesPerRow);
                let bottomOffset = Math.round((height - y - 1) * bytesPerRow);
                temp.set(data.subarray(topOffset, topOffset + bytesPerRow));
                data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);
                data.set(temp, bottomOffset);
            }
            // RenderTexture截出来的图是反向的,上面这段代码通过把data数组反向,来把图像反过来。

            gl.deleteFramebuffer(frameBuffer);

            // 创建一个2D Canvas来保存截图结果
            let tempCanvas = document.createElement('canvas');
            tempCanvas.width = width;
            tempCanvas.height = height;
            let context = tempCanvas.getContext('2d');
            let imageData = context.createImageData(width, height);
            imageData.data.set(data);
            context.putImageData(imageData, 0, 0);

            rt.removeFromParent();

            //获取临时canvas的截图地址
            let tempFilePath = tempCanvas.toTempFilePathSync({
                x: 0,
                y: 0,
                width: width,
                height: height,
                destWidth: width,
                destHeight: height
            })

            wx.shareAppMessage({
                title: data.desc ,
                imageUrl: tempFilePath,
                query:query
            })
            
        }); 

这个putImageData是可以用的,在真机上可行
但是2.0的时候

let node = new cc.Node();
        node.parent = imageNode;
        let camera = node.addComponent(cc.Camera);
        node.x = width/2;
        node.y = height/2;

        // 设置你想要的截图内容的 cullingMask
        camera.cullingMask = 0xffffffff;

        // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
        let texture = new cc.RenderTexture();
        texture.initWithSize(width, height);
        camera.targetTexture = texture;

        // 渲染一次摄像机,即更新一次内容到 RenderTexture 中
        camera.render();

        // 这样我们就能从 RenderTexture 中获取到数据了
        let data = texture.readPixels();

        // 接下来就可以对这些数据进行操作了
        let tempCanvas = document.createElement('canvas');
        let ctx = tempCanvas.getContext('2d');
        tempCanvas.width = texture.width;
        tempCanvas.height = texture.height;

        let rowBytes = width * 4;
        for (let row = 0; row < height; row++) {
            let srow = height - 1 - row;
            let imageData = ctx.createImageData(width, 1);
            let start = srow*width*4;
            for (let i = 0; i < rowBytes; i++) {
                imageData.data[i] = data[start+i];
            }

            ctx.putImageData(imageData, 0, row);
        }

        let dataURL = tempCanvas.toDataURL("image/jpeg");
        let img = document.createElement("img");
        img.src = dataURL;


        let texture1 = new cc.Texture2D();
        texture1.initWithElement(img);


        let spriteFrame = new cc.SpriteFrame();
        spriteFrame.setTexture(texture1);

        let node1 = new cc.Node();
        let sprite = node1.addComponent(cc.Sprite);
        sprite.spriteFrame = spriteFrame;

        node1.zIndex = cc.macro.MAX_ZINDEX;
        node1.parent = cc.director.getScene();
        node1.x = cc.winSize.width/2;
        node1.y = cc.winSize.height/2;

微信小游戏真机上camera.render();的时候是直接崩溃了,去掉这行是可以渲染出来的黑色的框。所以应该跟putImageData没什么关系的,在浏览器开发工具也都是正常渲染出一个精灵节点的。

这是官方的demo,打开也是这样了·····················

2.0使用的Typescript是那个版本的,需要同步本地的版本,避免出现异常