在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
- 在Cocos2d-x上实现横竖屏切换
- cocos2d-x如何切换横竖屏
- cocos2d 在ios上设置横竖屏
- cocos2d-x游戏开发屏幕横竖屏切换
- cocos2d-js h5横竖屏切换的一种实现方案
- cocos2d-x设置横竖屏
- 关于Cocos2d-x在新版xcode下横竖屏设置
- cocos2d-x 在windows上实现键盘输入
- cocos2d-x 2.x 设置横竖屏
- Cocos2d-X实现场景切换
- cocos2d-x安卓更改横竖屏
- cocos2d-x for wp8 设置横竖屏
- Android2.3上横竖屏切换
- Cocos2d-x中在Android里切换竖屏
- cocos2d-x在Xcode(iOS )中设置横竖屏的解决方案
- 在应用层的横竖屏切换
- Android 如何实现横竖屏切换
- Android横竖屏切换正确实现方式
- Ubuntu14.04下MySQL的安装与卸载
- java io 流 设计模式
- jackson的使用
- HDU1716 排列2 next_permutation的用法
- 浅谈Struts2
- 在Cocos2d-x上实现横竖屏切换
- vim快速入门
- ubuntu16.04 nodejs 安装 node指令无效
- ZooKeeper实战(四)-ZooKeeper API使用
- 一个中国工程师的写照.
- 实用知识:iOS5.0前加速计的方法使用(了解)
- Android 权限
- hadoop基于文件的数据结构
- MongoDB 性能优化:分析执行计划