脚本代码
1.web平台直接调用cc.view.setOrientation(原生平台调用原生代码)
changeOrientationH = function (val) {
let w = cc.view.getFrameSize().width;
let h = cc.view.getFrameSize().height;
if (val && w > h) {
console.log("已经是横屏,无需修改!",w ,h);
return
} else if (!val && w < h) {
console.log("已经是竖屏,无需修改!",w ,h);
return
}
cc.view.setFrameSize(h, w);
if (cc.sys.os == cc.sys.OS_IOS) {
console.log(">>>ios:", cc.sys.os, cc.sys.OS_IOS);
jsb.reflection.callStaticMethod('AppController', "cocosChangeOrientation", val);
} else if (cc.sys.os == cc.sys.OS_ANDROID) {
console.log(">>>android:", cc.sys.os, cc.sys.OS_IOS);
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "changeOrientationH", "(Z)V", val);
}
if (val)
{
cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE);
}
else
{
cc.view.setOrientation(cc.macro.WEB_ORIENTATION_PORTRAIT);
}
}
原生ios代码:
在发布出的原生工程中找到AppController.mm文件,编写脚本里面的切换方法cocosChangeOrientation。

经过调试发现,这里调用cocosChangeOrientation的时候,先设置方向为unknown,再去切换,不然不能触发场景横竖屏切换。
原生Android代码:
在发布的原生工程中找到AppActivity.java,编写切换的方法changeOrientationH。
app是定义的变量
public class AppActivity extends Cocos2dxActivity {
private static AppActivity app = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = this;
}
public static void changeOrientationH(final boolean type)
{
app.runOnUiThread(new Runnable() {
@Override
public void run() {
if (type)
{
app.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else
{
app.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
});
}
}
项目构建的时候根据项目需要选择一种方向。

参考链接:https://www.jianshu.com/p/48ca5d70806d
本文主要介绍了在Cocos Creator中如何进行横竖屏切换。在web平台上,可以直接使用cc.view.setOrientation方法;而在原生iOS和Android平台上,需要修改原生代码。在iOS的AppController.mm文件中添加cocosChangeOrientation方法,Android的AppActivity.java中添加changeOrientationH方法,并在项目构建时根据需求设定屏幕方向。

5485

被折叠的 条评论
为什么被折叠?



