轉自:OpenAtom OpenHarmony
在9月30日更新的 OpenHarmony3.0 LTS 上,标準系統新增支援了方舟開發架構(ArkUI)、分布式組網和 FA 跨裝置遷移能力等新特性,是以我們結合了這三種特性使用 ets 開發了一款如下動圖所示傳炸彈應用。

打開應用在通過邀請使用者進行裝置認證後,使用者須根據提示完成相應操作,然後通過分布式流轉實作随機傳遞炸彈給下一位使用者的效果。那麼這樣一款傳炸彈應用如何進行開發呢?
完整的項目結構目錄如下:
我們可以分為如下 3 步:編寫聲明式 UI 界面、添加分布式能力和編寫遊戲邏輯。
1. 新增工程
在 DevEco Studio 中點選 File -> New Project ->Standard Empty Ability->Next,Language 選擇 ETS 語言,最後點選 Finish 即建立成功。
圖1 建立工程
2. 編寫遊戲頁面
圖2 遊戲界面效果圖
效果圖如上可以分為兩部分:
頂部狀态提示欄
首先在 @entry 元件入口 build() 中使用 Stack 作為容器,達到圖檔和文字堆疊的效果;
接着依次寫入 Image 包裹的兩個 Text 元件;
中間遊戲炸彈九宮格區域
使用 Grid 網格容器來編寫九宮格區域;
在 GridItem 中 Stack (容器依次添加方塊背景圖檔和炸彈圖檔;
在 visibility 屬性中用 bombIndex 變量值來決定炸彈顯示的位置;
通過 onClick 點選事件和 GestureGroup 組合手勢加入單擊、輕按兩下和長按的監聽事件;
3. 添加彈窗
建立規則遊戲彈窗
1)通過 @CustomDialog 裝飾器來建立自定義彈窗,使用方式可參考:
自定義彈窗文檔:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md
2)規則彈窗效果如下,彈窗組成由兩個 Text 和兩個 Image 豎向排列組成,是以我們可以在 build()下使用 Column 容器來包裹,元件代碼如下;
圖3 遊戲規則
3)在 @entry 建立 CustomDialogController 對象并傳入彈窗所需參數,後面可通過該對象 open() 和 close() 方法進行打開和關閉彈窗;
建立遊戲失敗彈窗,并添加動畫效果
圖4 遊戲失敗彈窗動畫
1)編寫彈窗布局:将遊戲失敗文本、炸彈圖檔和再來一局按鈕圖檔放置于 Column 容器中;
2)用變量來控制動畫起始和結束的位置:用 Flex 容器包裹炸彈圖檔,并用 @State 裝飾變量 toggle,通過變量來動态修改 [Flex]的direction 屬性;
3)設定動畫效果:使用 animateTo 顯式動畫接口炸彈位置切換時添加動畫,并且設定定時器定時執行動畫;
分布式流轉需要在同一網絡下通過 DeviceManager 元件進行裝置間發現和認證,擷取到可信裝置的 deviceId 調用 FeatureAbility.startAbility(parameter),即可把應用程式流轉到另一裝置。
原本分布式流轉應用流程如下:
建立 DeviceManager 執行個體;
調用執行個體的 startDeviceDiscovery(),開始裝置發現未信任裝置;
設定裝置狀态監聽 on('deviceStateChange',callback),監聽裝置上下線狀态;
設定裝置狀态監聽 on('deviceFound',callback),監聽裝置發現;
傳入未信任裝置參數,調用執行個體 authenticateDevice 方法,對裝置進行 PIN 碼認證;
若是已信任裝置,可通過執行個體的 getTrustedDeviceListSync() 方法來擷取裝置資訊;
将裝置資訊中的 deviceId 傳入featureAbility.startAbility 方法,實作流轉;
流轉接收方可通過featureAbility.getWant() 擷取到發送方攜帶的資料;
登出裝置發現監聽 off('deviceFound');
登出裝置狀态監聽 off('deviceStateChange');
項目中将上面裝置管理封裝至 RemoteDeviceManager,通過 RemoteDeviceManager 的四個方法來動态維護 deviceList 裝置資訊清單。
圖5 分布式流轉
項目實作分布式流轉隻需如下流程:
1. 建立RemoteDeviceManager執行個體
1)導入 RemoteDeviceManager
2)聲明 @Provide 裝飾的裝置清單變量 deviceList,和建立 RemoteDeviceManager 執行個體。
2. 重新整理裝置清單
在生命周期 aboutToAppear 中,調用重新整理裝置清單和開始發現裝置。
aboutToAppear 定義:函數在建立自定義元件的新執行個體後,在執行其 build 函數之前執行。
3. 裝置認證
4. 跨裝置流轉
從 deviceList 中擷取裝置清單線上的裝置 Id,通過 featureAbility.startAbility 進行流轉。
5. 登出監聽
在聲明周期 aboutToDisappear 進行登出監聽。
aboutToDisappear 定義:函數在自定義元件析構消耗之前執行。
1. 開始遊戲
2. 判斷輸赢
編寫判斷邏輯,用于不同的點選事件中調用。
3. 遊戲失敗
遊戲失敗,彈出遊戲失敗彈框。
四、項目下載下傳和導入
項目倉庫位址:
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/FA/Entertainment/BombGame
1)git下載下傳
2)項目導入
打開 DevEco Studio,點選 File->Open->下載下傳路徑/FA/Entertainment/BombGame
1. 裝置編譯限制
擷取OpenHarmony源碼(OpenHarmony 版本須 3.0 LTS 以上):https://www.openharmony.cn/pages/0001000202/#%E5%AE%89%E8%A3%85%E5%BF%85%E8%A6%81%E7%9A%84%E5%BA%93%E5%92%8C%E5%B7%A5%E5%85%B7
安裝開發闆環境:https://www.openharmony.cn/pages/0001000400/#hi3516%E5%B7%A5%E5%85%B7%E8%A6%81%E6%B1%82
開發闆燒錄:https://www.openharmony.cn/pages/0001000401/#%E4%BD%BF%E7%94%A8%E7%BD%91%E5%8F%A3%E7%83%A7%E5%BD%95
2. 應用編譯限制
參考應用開發快速入門:https://www.openharmony.cn/pages/00090000/
內建開發環境(DevEco Studio 3.0.0.601版本以上)下載下傳位址:https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta
OpenHarmony SDK 3.0.0.0 以上;
掃碼添加開發者小助手微信
擷取更多HarmonyOS開發資源和開發者活動資訊