「森的森」愛讀詩歌的六年老碼農
從 Cocos2d-x 到 Cocos Creator 寫過數(shù)款網絡游戲
平時也會發(fā)布一些貼子到 Cocos 論壇
時不時會發(fā)一些 Demo 和插件
今天受曉衡哥邀請,來介紹一下我的“NativeAPI”
注意!這不是游戲
截圖有點樸素,請無視!
一、NativeAPI 是什么?
無須定制引擎,通過反射機制封裝了一些通用原生接口,支持 iOS、Android 并測試通過。接口包含:
- 獲取設備名稱
- 系統(tǒng)類型
- 操作系統(tǒng)版本
- 設備識別碼(游客登錄可以用此標識)
- App 版本號
- App Vercode
- 電池電量
- 網絡狀態(tài)
- 復制文字到粘貼板
- 獲取當前粘貼板內容
- 選擇相冊等
- 打開 QQ、微信
整個工程代碼是相當?shù)囊?guī)范,使用方法是相當詳細,不論是學習還是原生 SDK 接入都會對你有很大的幫助!
二、SDK 接口代碼
NativeAPI 提供的 Demo 工程可以在 iOS、Android 端運行,但是可能要根據(jù)自己的 Cocos 引擎配置做相關更改。Demo 是基于 Cocos Creator 2.3.4 創(chuàng)建,但是關鍵代碼可運行在任何版本Cocos Creator中。
如果有 iOS 安卓原生基礎,可直接看關鍵代碼文件夾中的文件,所以需要的代碼都在里面。封裝接口一覽:
在項目中需要調用的地方,導入 DeviceModule.js 調用其方法即可,詳細請看 Demo 中測試用法。
三、Android 配置流程
1. 導入 Java 代碼
首先將關鍵代碼文件夾中 DeviceModule.java 和 ModifyImageActivity.java 兩個文件放到項目AppActivity.java 同層級位置。
NativeAPI-Android Java接口文件例如 Demo 工程路徑:../NativeApi/build/jsb-link/frameworks/runtime-src/proj.android-studio/src/org/cocos2dx/javascript
2. 初始化DeviceModule
然后需要在 AppActivity.java 的 onCreate 方法中調用初始化 DeviceModule。
DeviceModule.setContext(this);
具體代碼,可參考關鍵代碼中的 AppActivity.java 文件。
3. 配置權限
打開 Android 工程 AndroidManiefst.xml 文件,文件在:../NativeApi/build/jsb-link/frameworks/runtime-src/proj.android-studio/app/AndroidManifest.xml
調用手機震動接口,添加權限:
<uses-permission android:name="android.permission.VIBRATE"/>
選擇相冊,添加權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
還需要在 AndroidManifest.xml 配置 activity:
<activity
android:name="org.cocos2dx.javascript.ModifyImageActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
4. 在 JS 使用
最后 js 代碼中直接引用 DeviceModule.js 調用接口方法即可,如下代碼:
//電池電量
onBtnBatteryLevel: function () {
let level ='電池電量' + parseInt(100 * gg.device.getBatteryLevel());
this.labelTips.string = level;
gg.showAlert(level);
}
更詳細配置用法請參考 Demo 中調用方法。
四、iOS 配置流程
1. 導入文件
把關鍵代碼中的ios對應的 .h 和 .m,.mm 等文件拷貝到項目中。
NativeAPI-iOS接口文件例如 Demo 工程路徑:../NativeApi/build/jsb-link/frameworks/runtime-src/proj.ios_mac/ios/
2. 添加文件到 Xcode
image-20201027101451226在Xcode中添加這些文件到項目,這樣編譯的時候,才會編譯到這些文件。
3. 添加相冊權限
使用相冊需要添加相冊權限,在 info.plist 中添加 Privacy - Photo Library Usage Description權限,看下圖:
添加像冊權限?4. 橫屏設置
如果您是橫板游戲,而且需要使用相冊選擇圖片功能,則需要做以下操作。在AppController.h中添加代碼:
// 橫豎屏設置
@property (nonatomic,assign) NSInteger MyInterfaceOrientationMask;
在 AppController.mm 的 didFinishLaunchingWithOptions 方法中添加代碼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
//設置初始屏幕方向
_MyInterfaceOrientationMask = UIInterfaceOrientationMaskLandscape;
//添加修改橫豎屏事件監(jiān)聽
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeRotate:) name:@"changeRotate" object:nil];
[window makeKeyAndVisible];
...
}
在 AppController.mm 中添加兩個函數(shù):
/**
橫豎屏設置
@param noti 0: 設置為橫屏
*/
- (void)changeRotate:(NSNotification *)noti
{
if ([noti.object isEqualToString:@"0"])
{
//橫屏設置
_MyInterfaceOrientationMask = UIInterfaceOrientationMaskLandscape;
}
else
{
_MyInterfaceOrientationMask = UIInterfaceOrientationMaskAll;
}
}
- (void)statusBarOrientationChanged:(NSNotification *)notification {
CGRect bounds = [UIScreen mainScreen].bounds;
float scale = [[UIScreen mainScreen] scale];
float width = bounds.size.width * scale;
float height = bounds.size.height * scale;
Application::getInstance()->updateViewSize(width, height);
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return _MyInterfaceOrientationMask;
}
本文摘自 :https://blog.51cto.com/u