cocos js在帶虛擬按鍵的手機(jī)上的動(dòng)態(tài)調(diào)整
在Cocos2dxRenderer.java中增加native方法
private static native void setFrameSize(final int width, final int height,final int resolution_w, final int resolution_h);
然后在Cocos2dxRenderer.java中修改onSurfaceChanged方法
private int Default_Width=1080;
@Override
public void onSurfaceChanged(final GL10 GL10, final int width, final int height) {
Log.d("Renderer onSurfaceChang","width:"+width+" height:"+height);
Cocos2dxRenderer.nativeOnSurfaceChanged(width, height);
double scale = (double)Default_Width/width;
int resolution_w = Default_Width;
int resolution_h = (int) (height*scale);
Cocos2dxRenderer.setFrameSize(width, height,resolution_w,resolution_h);
}
其中Default_Width為設(shè)計(jì)屏幕的大小
在javaactivity-android.cpp中修改
JNIEXPORT void Java_org_cocos2dx_lib_Cocos2dxRenderer_setFrameSize(JNIEnv* env, jobject thiz, jint w, jint h,jint resolution_w, jint resolution_h)
{
auto director = cocos2d::Director::getInstance();
auto glview = director->getOpenGLView();
if (glview)
{
glview->setFrameSize(w, h);
glview->setDesignResolutionSize(resolution_w, resolution_h, ResolutionPolicy::NO_BORDER);
}
}
原來(lái)修改setFrameSize時(shí)也能在部分手機(jī)能解決虛擬按鈕顯示和消失是cocos中的點(diǎn)擊事件偏移的問(wèn)題 但是如果分辨率不是我們目標(biāo)的分辨率,切后臺(tái)會(huì)黑屏侵俗。
在c++中打日志發(fā)現(xiàn)原始的setDesignResolutionSize的寬度仍然為我們目標(biāo)分辨率的寬度。隨之按比例修改了屏幕的高度