在Cocos2d-x上实现横竖屏切换

来源:互联网 发布:网络平台代理 编辑:程序博客网 时间:2024/05/20 09:47

在Cocos2d-x上实现横竖屏切换

  • 该demo使用引擎3.10版本,经测试在Android,PC上都OK
  • 主要实现以下三个步骤即可实现横竖屏切换

第一步

在AppDelegate重写applicationScreenSizeChanged方法,主要是重新设置窗口大小和逻辑屏幕尺寸

virtual void applicationScreenSizeChanged(int newWidth, int newHeight)#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)Application::applicationScreenSizeChanged(newWidth, newHeight);auto director = cocos2d::Director::getInstance();auto glview = director->getOpenGLView();if (glview != NULL){    glview->setFrameSize(newWidth, newHeight);    //竖屏    if (newWidth < newHeight)    {        glview->setDesignResolutionSize(SCR_W, SCR_H, ResolutionPolicy::SHOW_ALL);    }    //横屏    else    {        glview->setDesignResolutionSize(SCR_H, SCR_W, ResolutionPolicy::SHOW_ALL);    }}#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)#endif}

第二步

在AppActivity里面实现切换屏幕的消息处理

private static final String TAG = "TAG";/** * 各种请求动作 * @param actionType * @param str */public static void requestAction(int actionType,String str){    Log.i(TAG, "收到指令--------------->"+actionType);    Message msg = actionHandler.obtainMessage();    msg.what = actionType;    msg.obj = str;    actionHandler.sendMessage(msg);}private static Handler actionHandler = new Handler(new Handler.Callback(){    @Override    public boolean handleMessage(Message msg)    {        // TODO Auto-generated method stub        if(msg.what == 0)        {            context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        }        else if(msg.what == 1)        {            context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        }        return false;    }});

第三步

在2dx里面调用

void GameLayerH::setScreenH(){#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID    //这个数值表示屏幕方向    //JNI函数并没最优化,应用到项目的时候请自行优化    int value = 0;    std::string msg = "abc";    JniMethodInfo jniMethodInfo;    bool isHave = JniHelper::getStaticMethodInfo(        jniMethodInfo,        "org/cocos2dx/cpp/AppActivity",        "requestAction",        "(ILjava/lang/String;)V");    if (isHave)    {        //需要传递到Java层的字符串        jstring strArg = jniMethodInfo.env->NewStringUTF(msg.c_str());        jniMethodInfo.env->CallStaticVoidMethod(jniMethodInfo.classID, jniMethodInfo.methodID, value, strArg);        jniMethodInfo.env->DeleteLocalRef(jniMethodInfo.classID);        jniMethodInfo.env->DeleteLocalRef(strArg);    }#elif CC_TARGET_PLATFORM == CC_PLATFORM_WIN32    auto director = cocos2d::Director::getInstance();    auto glview = director->getOpenGLView();    if (glview != NULL)    {        glview->setDesignResolutionSize(SCR_H, SCR_W, ResolutionPolicy::SHOW_ALL);        glview->setFrameSize(SCR_H, SCR_W);    }#endif}

实现以上三步就可以实现屏幕横竖屏切换功能,在设置窗口大小和逻辑屏幕尺寸一定要注意!!!
希望对大家有帮助.

0 0