今天把樣例編譯的真機上,發現是橫屏顯示,我在模擬器上是豎屏顯示的。按照2.2.5版本修改屬性後還是沒有改變,最後發現3.3rc0有所改動!
2.2.5版本,在真機上顯示橫屏與豎屏,只需在java層修改android:screenOrientation屬性,豎屏:portrait;橫屏:landscape;
3.3rc0版本,多瞭如下代碼:
因爲這個導致修改android:screenOrientation屬性無效了,nativeIsLandScape是個什麼東西呢?在java層聲明如下:
private static native boolean nativeIsLandScape();
這個函數是C++層實現的,在項目jni/hellolua/main.cpp裏面可以看到如下代碼:
extern "C" { bool Java_org_cocos2dx_lua_AppActivity_nativeIsLandScape(JNIEnv *env, jobject thisz) { return ConfigParser::getInstance()->isLanscape(); } bool Java_org_cocos2dx_lua_AppActivity_nativeIsDebug(JNIEnv *env, jobject thisz) { #if (COCOS2D_DEBUG > 0) return true; #else return false; #endif } }
在ConfigParser類裏面可以看見如下代碼:
if (objectInitView.HasMember("isLandscape") && objectInitView["isLandscape"].IsBool()) { _isLandscape = objectInitView["isLandscape"].GetBool(); }
ConfigParser::ConfigParser(void) : _isLandscape(true), _isWindowTop(false), _consolePort(CONSOLE_PORT), _uploadPort(UPLOAD_PORT), _viewName("TimberMan"), _entryfile("src/main.lua"), _initViewSize(WIN_WIDTH, WIN_HEIGHT) { }
bool ConfigParser::isLanscape() { return _isLandscape; }
以上代碼可以知道,默認是橫屏的;isLandscape這個屬性是哪裏來的呢?是項目文件夾裏config.json裏面的。
所以3.3rc0要設置橫屏與豎屏需要修改config.json文件裏的isLandscape屬性。
就寫這麼多,期待下篇文章!
如有不足之處,請大家指出,一起交流成長!