creator2.0以上版本设置canvas大小无用

如题,我的项目需要实现背景的一些动态效果,然后不想用移动背景图片来实现,想直接用摄像机来做,但是发现只要我需要渲染的节点在摄像机下,那么他就会被全部渲染出来,我设置canvas的大小并没有用,然后本来使用mask可以解决canvas之外纹理被渲染的情况,但是这样我在移动摄像机的时候纹理会被切割,也就是只能渲染出来未被mask遮挡的那部分。这样感觉很尴尬啊,强行逼我使用移动背景的方式来做么?并且在1.x版本的时候我使用摄像机是可以实现相关功能的,但是升级之后反而不好用了

可以动态改变node节点的group,摄像机只会渲染所关心的group节点。可以详细说你的需求,大家帮你看下方案。1.x的摄像机是直接设置摄像机渲染哪些node节点,2.x中是通过group来控制的

感谢您的回复,你可能没懂我的意思,摄像机我会用,但是现在问题是,我设置了canvas的大小,但是在canvas之外的纹理,只要在摄像机下面就会被渲染,举个例子,我canvas大小定死了1334750,但是会有超出canvas大小之外的纹理被渲染,比如,我给屏幕放一张图片大小事1500800,那么除非手机正好是1334*750像素,否则显示范围会随着手机分辨率而变化,截图如下

而在手机上是这个效果:

如果是正常效果,那么左右都应该有黑边才对,但是很尴尬的是右边显示了超出范围的纹理。而且只要我的摄像机做一下移动就变成了

但是我需要的是这种效果:

请问我该如何解决这个问题

其实如果不使用摄像机我只需要给canvas下加一个mask就可以解决现在的问题,但是如果我做的是类似跑酷那种地图比较长元素比较多的游戏,直接移动地图效率就会很低,所以我希望引擎组可以帮我看看这个问题

顶一下

你们引擎组是不是每个帖子只负责回复一次啊,回复一次之后不管解决没解决就不管了?

抱歉回复晚了,帖子太多,可以@我方便一点
既然是跑酷类游戏,为什么要黑边呢?不是很奇怪么?
另外目前处于摄像机外的节点是会渲染的。而且你这个节点并不是在摄像机外,是在摄像机内的,只是纹理太大了,超出了摄像机的范围。目前摄像机也不会做纹理切割显示的事情。摄像机只是决定了节点的全局渲染顺序
你那个移动后的效果不就是正常的么?
两边有黑边的效果看起来我个人感觉才是真正的奇怪

你的问题是在于左侧的黑边要想办法避免掉,这样整个效果不管在什么分辨率的机器上都可以达到比较好的效果。
从你给的图来看你应该是选择的fitHeight模式吧?如果是fitHeight的话,你的关卡起点一定要在地图的最左边么?如果你的背景地图往左边移动一点,留出一定的空间就完美了啊

所谓的黑边就是适配的问题了,适配的问题我们有自己的解决方案,但是现在的效果超出了我的预期,无论如何,既然我设置了canvas大小,那么它应该就是生效的,但是现在由于我的纹理超出了canvas的设定范围但是在摄像机内,它就给我显示出来了,这并不合理,我不是要求引擎组解决我单个项目的问题,而是这个情况超出了我的预期,和我的认知不符,无论摄像机怎么设置,既然设置了canvas大小,那么他就该跟屏幕一样,超出之外的不该显示,这是在手机的效果而已,如果我直接在浏览器显示,那么效果就不是这样了,如果是竖屏,并且我的背景比较长,那么就会出现图片一直显示到了我实际显示屏幕的边缘,那么这种情况怎么办。而且让我非常蛋疼的是,debug模式下没问题,我开调试看了,canvas大小是固定的,所以效果ok,但是build项目之后再预览就不是这样了,canvas大小在随着我浏览器大小在变化,就变成我描述的情况,我现在不方便截图回头截图给您。而且更有意思的是,2.0以下版本的引擎并没有这个问题,我希望能帮助我解决一下,因为我还是希望能使用摄像机,并且使用最新版本的引擎。明天我再给您截图看看。@BigBear

讲道理,@BigBear没什么用啊

这个问题之前论坛上也有讨论过:

屏幕外的节点不显示是一个重cpu的操作,如果按你的需求,需要屏幕内的节点在屏幕外的部分剪裁掉的话,那就更是一个重cpu的操作了。并不是每个项目都需要去做这种重cpu的操作的,也不是每个项目这样去优化都会有效果的。况且之前1.x的优化效果感觉并不是特别好,对于有些项目来讲不必要甚至影响性能,因此2.0开始去除了这个功能。

这里你要理解一下,并不是你设置了Canvas的大小,只是设置了设计分辨率的大小。运行过程中Canvas的大小是会随着适配策略进行改变的,


你可以看到,其实你是改变不了Canvas的大小的。
2D摄像机的视口宽高是与Canvas的实际尺寸一致的,你可以改变摄像机的ZoomRatio去整体的改变缩放,但目前无法修改宽高比例。因此也不是你所理解的:[quote=“darkeril, post:8, topic:72543”]
纹理超出了canvas的设定范围但是在摄像机内
[/quote]

像你目前的这个情况,你有没有尝试在背景节点上添加widget组建,使用widget组件来进行不同分辨率的适配?
左边黑边的问题本质上就是适配没有做好,如果你想要右边也要有黑边,也就是节点的纹理在你认为的范围外被剪裁掉,你可以使用mask组件来进行剪裁

NewProject_1.zip (613.7 KB)
口说无凭,看demo,Scene场景的效果就是你发出来的效果:

Scene1场景就只是在背景上加了一个widget组件,就可以达到一个比较好的适配效果

Scene2场景就是利用mask达到你想要的两边黑边效果:

但是说实话,在内存和性能上,第三种比起第二种来,并不见得有提升,图片纹理还是那么大的图片纹理,占用的内存还是一像素8bit * 图片资源长 * 图片资源宽,相反还多了一个mask的计算。

好好看看文档还有示例工程不行么?研究一下不就能不来了,还得人手把手帮你写啊
v2.0升级指南:
https://docs.cocos.com/creator/manual/zh/release-notes/upgrade-guide-v2.0.html#23-camera-组件使用
对齐策略:
https://docs.cocos.com/creator/manual/zh/ui/widget-align.html
多分辨率适配:
https://docs.cocos.com/creator/manual/zh/ui/multi-resolution.html

感谢您不辞辛苦的回答,可能是我的描述有问题,令你产生了误解,首先,我并不是想解决我现在项目的问题,现在这个项目的问题有多种解决方案,就像您说的我们选用fitHeight模式并且加个widget组件就可以解决两边黑边的问题,或者背景图左移一点,流出一定空间就好,这个并不影响我们的项目,我想要的答案就是您今天说的这部分内容

,也就是说2.x直接去掉了这部分优化。我今天回复你的时候也说了,并不是要求引擎组解决单个项目的问题,而是我在做项目的时候发现这个情况和我的以前使用引擎时候的情况完全不同,所以我才来问一下。关于适配,我们已经上线了多款creator项目,这方面经验也是ok的。感谢您专门给我写了个示例工程。最后,加上mask组件之后,如果mask节点在摄像机下,那么移动摄像机其实是无效的,因为节点本身被mask裁减了,所以mask范围之外的纹理是不显示的,除非直接移动背景节点,移动摄像机是无法达到类似跑酷地图效果的。@BigBear 引擎组解决问题的态度值得肯定!

我经常看到这大佬回复的,他回复的相当频繁了

嗯,确实,比较耐心