笔记:原生View与Creator混搭

记录并积累开发过程中的小问题。请多指教。
直接从微信复制过来,格式有点乱。
更多笔记请扫码访问公众号,一起交流~

cocos在各个平台中,本身就一个view,但一些组件,是利用平台自身的view来创建的,比如WebView、VideoPlayer(所以通过zIndex是无法改变他们的层级的),有时也会添加一些原生的view来满足项目需求~

当view在cc上层,只需要创建view即可。

当view在cc下层(view上的触摸事件等会被上层cc的截断),如视频做背景等,则需要先把cc的背景设置为透明

在ccc的onLoad()中添加

cc.Camera.main.backgroundColor = new cc.Color(0, 0, 0, 0);
然后根据平台修改代码

各个平台创建元素(按钮,图片等)的方法,自行百度,清晰明了~

H5:

在构建后的main.js文件中cc.game.run前添加如下代码

cc.macro.ENABLE_TRANSPARENT_CANVAS = true;
cc.game.run(option, onStart);
ps:更改video层级

let video = document.getElementsByClassName(‘cocosVideo’)[0];
video.style.zIndex = 5;

let canvas = document.getElementsByClassName(‘gameCanvas’)[0];
canvas.style.position = ‘relative’;
canvas.style.zIndex = 10;

Android:

首先修改AppActivity中onCreateView()

@Override
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// TestCpp should create stencil buffer
//glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);

//最后一位设置成0后在Android上剪裁会有问题(scollview之类的都会出现问题)
glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 8);

SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView, this);

return glSurfaceView;

}
然后添加原生view

在app\res下添加文件夹layout,添加view的xml布局,然后在AppActivity中onCreate()添加下面方法

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);

//原生的view直接添加到cocos的view内
View layout = LayoutInflater.from(this).inflate(R.layout.xml_name, null);
mFrameLayout.addView(layout, layoutParams);

//如已绘制SurfaceView则在surfaceView上一层绘制,必须addView之后使用
//getGLSurfaceView().setZOrderMediaOverlay(true);
//cocos的view是否在上层
//getGLSurfaceView().setZOrderOnTop(true);
getGLSurfaceView().getHolder().setFormat(PixelFormat.TRANSLUCENT);

ios:

新建一个xib文件,在xib里面创建view,然后在AppController.mm的application函数中添加

// 从xib(名称为View)实例化view
UIView *view = [[[NSBundle mainBundle] loadNibNamed:@“View” owner:self options:nil] firstObject];
[window addSubview: view];

4赞

关于H5的,有办法让某个节点在video层级和Canvas层级的下方吗

1赞

Canvas是全屏,且不可拆分的·········
你只能放H5原生控件在最下方·······

大神android按照你这样的设置背景是透明了但Editbox在输入过程中显示不出来,隐藏软件盘后就能显示了,cocos create版本1.10.2,求大神指教

按照这种方法设置canvas透明后出现了闪烁问题是什么原因呢?

解决了吗?我现在3.x也是一样,透明后,从后台切到前台闪黑一下