cocos2dx3.17.2横竖屏切换

在游戏中需要横竖屏切换,常用大厅到子游戏

IOS

  1. 修改Application.mm, 首先定义变量
static RootViewController* s_rv;
UIInterfaceOrientationMask orientation = UIInterfaceOrientationMaskLandscape;
  1. didFinishLaunchingWithOptions中对s_rv进行赋值操作
 s_rv = _viewController;
  1. 增加下面两个方法
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return orientation;
}

+ (void)setOrientation:(NSDictionary*)dic {
    NSString* dir = [dic valueForKey:@"orientation"];
    auto glview = cocos2d::Director::getInstance()->getOpenGLView();
    float scaleFactor = CC_CONTENT_SCALE_FACTOR();
    if ([dir isEqualToString:@"V"]) {
        orientation = UIInterfaceOrientationMaskPortrait;
        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
        
        NSInteger w =s_rv.view.frame.size.width;
        NSInteger h =s_rv.view.frame.size.height;
        glview->setFrameSize(w*3, h*3);  //这一步必须设置,glview 的大小为RootViewController
    } else {
        orientation = UIInterfaceOrientationMaskLandscape;
        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
        NSInteger w =s_rv.view.frame.size.width;
        NSInteger h =s_rv.view.frame.size.height;
        glview->setFrameSize(w*3, h*3); //这一步必须设置,glview 的大小为RootViewController
    }
}
  1. 到这里ios的设置基本上完成了,可以在Lua里调用了。最后面贴lua代码

Android

  1. 修改 AppActivity , 首先定义变量
    public static AppActivity instance = null;
    并在onCreate中初始化变量为instance = this

  2. 添加静态方法

public static void changeOrientationH(boolean val){
    if (val == true){
        instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        Log.d(LOG_TAG, "切换横屏");
    }
    else{
        instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        Log.d(LOG_TAG, "切换竖屏");
    }
}
  1. 修改CCApplication-android.cpp, 修改这个方法applicationScreenSizeChanged
void Application::applicationScreenSizeChanged(int newWidth, int newHeight) {
    CCLOG(" android applicationScreenSizeChanged %d %d", newWidth, newHeight);
    cocos2d::GLView *cocosView = cocos2d::Director::getInstance()->getOpenGLView();
    cocosView->setFrameSize(newWidth, newHeight);
}
  1. 修改Cocos2dxGLSurfaceView.java, 当朝向改变的时候,同步修改mCocos2dxRenderer
 @Override
protected void onSizeChanged(final int pNewSurfaceWidth, final int pNewSurfaceHeight, final int pOldSurfaceWidth, final int pOldSurfaceHeight) {
    if(!this.isInEditMode()) {
        if(pNewSurfaceWidth < pNewSurfaceHeight)
            this.mCocos2dxRenderer.setScreenWidthAndHeight(pNewSurfaceHeight, pNewSurfaceWidth);
        else
            this.mCocos2dxRenderer.setScreenWidthAndHeight(pNewSurfaceWidth, pNewSurfaceHeight);
    }
}

脚本调用, 注意Lua调用oc方法的时候传参数必须是字典的形式传递

local function changeScreenOrientationH(val)
    if device.platform == 'android' then
        local luabridge = require('cocos.cocos2d.luaj')
        local METHOD_NAME = 'changeOrientationH'
        local JAVA_CLASS_NAME = 'org/cocos2dx/lua/AppActivity'

        local suc, version = luabridge.callStaticMethod(JAVA_CLASS_NAME, METHOD_NAME, {val}, '(Z)V')
    elseif device.platform == 'ios' then
        local luabridge = require('cocos.cocos2d.luaoc')
        local AppController = "AppController"
        local orientation = val and "H" or "V"
        local suc, id = luabridge.callStaticMethod(AppController, "setOrientation", {orientation = orientation})
        if suc == true and id ~= "" then 
            return id
        end
    end
end
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容