RichText现在默认颜色是白色,而且不会根据Node设置的color变化?
粒子系统还是有点问题
正常效果是这样的
在粒子生命末期的属性貌似会出问题,时不时的就会变成这样
浏览器和编辑器里的表现是一样的
在极端点,把开始结束的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)
什么情况?
BoxCollider在安卓上表现正常,在IOS上首次碰撞会突然变得特别卡,导致在IOS上几乎不可用
cc.RichText缺字的问题,尝试了提供单独的Demo,难以重现。
应该是从池中取出的节点的某个属性为脏属性导致的不显示。段落看起来都是对的。
cc.RichText在2.0退回到1.9.x时不可用,如果之前是用1.9.x编辑的还可以,如果是用2.0编辑的,必须删掉,这个不知道算不算问题~~~
史上最好用开放数据域方案
微信分享图只能分享本地图片地址或者网络图片地址。那么不用截图的话,新版本如何生成图分享?
请问 2.x 会支持 设备震动功能吗? vibrate
我们的测试貌似没有反馈这样的问题,会不会有其他原因,或者提供 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输入不要强制旋转屏幕了?
终于解决了!感谢大佬!泪流满面啊
但是之前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没什么关系的,在浏览器开发工具也都是正常渲染出一个精灵节点的。
2.0使用的Typescript是那个版本的,需要同步本地的版本,避免出现异常