偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)

系統(tǒng) OpenHarmony
本來想做成分布式HarmonyOS ArkUI 3.0木棉花掃雷的,但是苦于沒有相應(yīng)API版本的分布式模擬器或多臺真機用于調(diào)試和運行,只能落得個單機的尷尬實戰(zhàn)了。

[[437923]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

HarmonyOS ArkUI 3.0 框架試玩初體驗二來了||ヽ( ̄▽ ̄)ノミ|Ю,這一次相比上一次的合成1024開發(fā)實戰(zhàn),多了部分內(nèi)容:顯示動畫、頁面跳轉(zhuǎn)與數(shù)據(jù)傳遞、網(wǎng)格容器Grid、自定義窗口等內(nèi)容。本來想做成分布式HarmonyOS ArkUI 3.0木棉花掃雷的,但是苦于沒有相應(yīng)API版本的分布式模擬器或多臺真機用于調(diào)試和運行,只能落得個單機的尷尬實戰(zhàn)了 ̄□ ̄||

效果圖

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

代碼文件結(jié)構(gòu)

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

正文

一、創(chuàng)建一個空白的工程

1. 安裝和配置DevEco Studio 3.0

DevEco Studio 3.0下載

DevEco Studio 3.0安裝

2. 創(chuàng)建一個Empty eTS Ability應(yīng)用

DevEco Studio下載安裝成功后,打開DevEco Studio,點擊左上角的File,點擊New,再選擇New Project,選擇Empty Ability選項,點擊Next按鈕。

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

將文件命名為SaoLei(文件名不能出現(xiàn)中文或者特殊字符,否則將無法成功創(chuàng)建項目文件),Project Type勾選Application,選擇保存路徑,Language勾選eTS,選擇API7,設(shè)備勾選Phone,最后點擊Finish按鈕。

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

3. 準(zhǔn)備工作

在entry>src>main>config.json文件中最下方"launchType": "standard"的后面添加以下代碼,這樣就可以實現(xiàn)去掉應(yīng)用上方的標(biāo)簽欄了。

config.json最下方部分代碼:

  1. "metaData": { 
  2.       "customizeData": [ 
  3.         { 
  4.           "name""hwc-theme"
  5.           "value""androidhwext:style/Theme.Emui.Light.NoTitleBar"
  6.           "extra""" 
  7.         } 
  8.       ] 
  9.     } 

4. 保存圖片

將圖片保存到entry>src>main>resources>rawfile文件中。

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

二、歡迎頁面

1. 更改文件名

在entry>src>ets>default>pages>index.ets文件右鍵,在彈出的菜單欄中選擇Refactor,再在彈出的子菜單欄中選擇Rename,或者按Shift+F6,將文件命名為logo.ets。

【木棉花】基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(上)-鴻蒙HarmonyOS技術(shù)社區(qū)

將entry>src>main>config.json文件中"js"項中的"pages"項中的"pages/index"更改為"pages/logo"。

config.json最下方部分代碼:

  1. "js": [ 
  2.       { 
  3.         "mode": { 
  4.           "syntax""ets"
  5.           "type""pageAbility" 
  6.         }, 
  7.         "pages": [ 
  8.           "pages/logo" 
  9.         ], 
  10.         "name""default"
  11.         "window": { 
  12.           "designWidth": 720, 
  13.           "autoDesignWidth"false 
  14.         } 
  15.       } 
  16.     ] 

2. 添加背景

在logo.ets文件中,通過Image($rawfile(‘LOGO.png’))可放置Logo圖片,通過Text(‘木棉花掃雷’)可放置文字內(nèi)容。

屬性linearGradient為設(shè)置漸變顏色,linearGradient中的angle為漸變角度,設(shè)置為180,即為從上往下漸變,colors則為漸變的顏色。

logo.ets:

  1. @Entry 
  2. @Component 
  3. struct Logo { 
  4.   build() { 
  5.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  6.       Image($rawfile('LOGO.png')) 
  7.         .objectFit(ImageFit.Contain) 
  8.         .height(300) 
  9.       Text('木棉花掃雷'
  10.         .fontSize(30) 
  11.         .fontColor(Color.White) 
  12.         .margin({ top: 200 }) 
  13.     } 
  14.     .width('100%'
  15.     .height('100%'
  16.     .linearGradient( 
  17.       { 
  18.         angle: 180, 
  19.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  20.       }) 
  21.   } 

3. 添加動畫效果

這里使用的動畫效果是通過animateTo顯式動畫實現(xiàn)的。animateTo顯式動畫可以設(shè)置組件從狀態(tài)A到狀態(tài)B的變化動畫效果,包括樣式、位置信息和節(jié)點的增加刪除等,開發(fā)者無需關(guān)注變化過程,只需指定起點和終點的狀態(tài)。animateTo還提供播放狀態(tài)的回調(diào)接口,是對屬性動畫的增強與封裝。

添加狀態(tài)變量opacityValue和scaleValue并初始化為0,分別用于表示透明度和放縮的倍數(shù),動畫效果中實現(xiàn)這兩個數(shù)值從0到1,即可實現(xiàn)Logo的漸出和放大效果。

定義一個貝塞爾曲線cubicBezier,Curves.cubicBezier(0.1, 0.2, 1, 1)。由于需要使用到動畫能力接口中的插值計算,故需要導(dǎo)入curves模塊。@ohos.curves模塊提供了線性Curve. Linear、階梯step、三階貝塞爾(cubicBezier)和彈簧(spring)插值曲線的初始化函數(shù),可以根據(jù)入?yún)?chuàng)建一個插值曲線對象。

在animateTo顯式動畫中,設(shè)置動畫時長(duration)為2s,延時(delay)0.1s開始播放,設(shè)置顯示動效event的閉包函數(shù)(curve),即起點狀態(tài)到終點狀態(tài)為透明度opacityValue和大小scaleValue從0到1。

logo.ets:

  1. // @ts-nocheck 
  2. import Curves from '@ohos.curves' 
  3.  
  4. @Entry 
  5. @Component 
  6. struct Logo { 
  7.   @State private opacityValue: number = 0 
  8.   @State private scaleValue: number = 0 
  9.   private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1) 
  10.  
  11.   build() { 
  12.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  13.       Image($rawfile('LOGO.png')) 
  14.         .objectFit(ImageFit.Contain) 
  15.         .height(300) 
  16.         .scale({ x: this.scaleValue, y: this.scaleValue }) 
  17.         .opacity(this.opacityValue) 
  18.         .onAppear(() => { 
  19.           animateTo({ 
  20.             duration: 2000, 
  21.             curve: this.curve1, 
  22.             delay: 100, 
  23.           }, () => { 
  24.             this.opacityValue = 1 
  25.             this.scaleValue = 1 
  26.           }) 
  27.         }) 
  28.       Text('木棉花掃雷'
  29.         .fontSize(30) 
  30.         .fontColor(Color.White) 
  31.         .margin({ top: 200 }) 
  32.     } 
  33.     .width('100%'
  34.     .height('100%'
  35.     .linearGradient( 
  36.       { 
  37.         angle: 180, 
  38.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  39.       }) 
  40.   } 

4. 添加跳轉(zhuǎn)效果

先創(chuàng)建一個mainpage.ets文件。

在animateTo顯示動畫播放結(jié)束的onFinish回調(diào)接口中,調(diào)用定時器Timer的setTimeout接口延時1s后,調(diào)用router.replace,顯示mainpage.ets頁面。其中同樣需要導(dǎo)入router模塊。

logo.ets:

  1. // @ts-nocheck 
  2. import router from '@system.router' 
  3. import Curves from '@ohos.curves' 
  4.  
  5. @Entry 
  6. @Component 
  7. struct Logo { 
  8.   @State private opacityValue: number = 0 
  9.   @State private scaleValue: number = 0 
  10.   private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1) 
  11.  
  12.   build() { 
  13.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  14.       Image($rawfile('LOGO.png')) 
  15.         .objectFit(ImageFit.Contain) 
  16.         .height(300) 
  17.         .scale({ x: this.scaleValue, y: this.scaleValue }) 
  18.         .opacity(this.opacityValue) 
  19.         .onAppear(() => { 
  20.           animateTo({ 
  21.             duration: 2000, 
  22.             curve: this.curve1, 
  23.             delay: 100, 
  24.             onFinish: () => { 
  25.               setTimeout(() => { 
  26.                 router.replace({ uri: "pages/mainpage" }) 
  27.               }, 1000); 
  28.             } 
  29.           }, () => { 
  30.             this.opacityValue = 1 
  31.             this.scaleValue = 1 
  32.           }) 
  33.         }) 
  34.       Text('木棉花掃雷'
  35.         .fontSize(30) 
  36.         .fontColor(Color.White) 
  37.         .margin({ top: 200 }) 
  38.     } 
  39.     .width('100%'
  40.     .height('100%'
  41.     .linearGradient( 
  42.       { 
  43.         angle: 180, 
  44.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  45.       }) 
  46.   } 

三、主頁頁面

1. 添加背景

游戲頁面的背景和歡迎頁面的背景幾乎一樣,這里就不重復(fù)啰嗦了。

mainpage.ets:

  1. @Entry 
  2. @Component 
  3. struct Mainpage { 
  4.   build() { 
  5.     Column() { 
  6.       Image($rawfile('mine.png')) 
  7.         .objectFit(ImageFit.Contain) 
  8.         .height(300) 
  9.         .scale({ x: 0.5, y: 0.5 }) 
  10.         .opacity(0.8) 
  11.     } 
  12.     .width('100%'
  13.     .height('100%'
  14.     .linearGradient( 
  15.       { 
  16.         angle: 180, 
  17.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  18.       }) 
  19.   } 

2. 添加按鈕

從效果圖可以看出按鈕的樣式是一致的,因此我們可以使用裝飾器@Component自定義按鈕。添加四個變量String、difficulty、Number_row和Number_column,分別用于記錄難度文本、地雷數(shù)量、網(wǎng)格的行數(shù)和網(wǎng)格的列數(shù)。在Button組件中設(shè)置圖片和文本的樣式。

在裝飾器@Entry裝飾的組件中,通過調(diào)用自定義組件的形式繪制三個按鈕。

mainpage.ets:

  1. @Entry 
  2. @Component 
  3. struct Mainpage { 
  4.   build() { 
  5.     Column() { 
  6.       Image($rawfile('mine.png')) 
  7.         .objectFit(ImageFit.Contain) 
  8.         .height(300) 
  9.         .scale({ x: 0.5, y: 0.5 }) 
  10.         .opacity(0.8) 
  11.  
  12.       setButton({ String: '初級', difficulty: 10, Number_row: 9, Number_column: 9 }); 
  13.       setButton({ String: '中級', difficulty: 30, Number_row: 12, Number_column: 12 }); 
  14.       setButton({ String: '高級', difficulty: 50, Number_row: 16, Number_column: 16 }); 
  15.     } 
  16.     .width('100%'
  17.     .height('100%'
  18.     .linearGradient( 
  19.       { 
  20.         angle: 180, 
  21.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  22.       }) 
  23.   } 
  24.  
  25. @Component 
  26. struct setButton { 
  27.   private String: string 
  28.   private difficulty: number 
  29.   private Number_row: number 
  30.   private Number_column: number 
  31.  
  32.   build() { 
  33.     Button({ type: ButtonType.Capsule, stateEffect: true }){ 
  34.       Column(){ 
  35.         Text(this.String) 
  36.           .textAlign(TextAlign.Center) 
  37.           .fontSize(30) 
  38.           .fontWeight(600) 
  39.           .fontColor('#0000FF'
  40.           .margin({ top: -5 }) 
  41.         Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Row }) { 
  42.           Text('( ' + this.difficulty.toString() + '個'
  43.             .textAlign(TextAlign.Center) 
  44.             .fontSize(22) 
  45.             .fontWeight(600) 
  46.             .fontColor('#416EBE'
  47.             .margin({ top: -2, right: 5 }) 
  48.           Image($rawfile('mine.png')) 
  49.             .height(26) 
  50.             .width(26) 
  51.           Text(this.Number_row.toString() + '*' + this.Number_column.toString() + ' )'
  52.             .textAlign(TextAlign.Center) 
  53.             .fontSize(22) 
  54.             .fontWeight(600) 
  55.             .fontColor('#416EBE'
  56.             .margin({ left: 5, top: -2}) 
  57.         }.margin({ top: 5 }) 
  58.       } 
  59.     } 
  60.     .width(220) 
  61.     .height(90) 
  62.     .backgroundColor('#F3F7FF'
  63.     .margin({ top: 10 }) 
  64.   } 

3. 響應(yīng)點擊跳轉(zhuǎn)事件

先創(chuàng)建一個game.ets文件。

在自定義按鈕組件中添加點擊事件onClick(),調(diào)用router.push接口,其中uri為跳轉(zhuǎn)的頁面,params為攜帶的數(shù)據(jù),形式為params: { key: values },在新頁面調(diào)用router.getParams().key來獲取到頁面跳轉(zhuǎn)來時攜帶的key對應(yīng)的數(shù)據(jù),其中同樣需要導(dǎo)入router模塊。

mainpage.ets:

  1. import router from '@system.router' 
  2.  
  3. @Entry 
  4. @Component 
  5. struct Mainpage { 
  6.   build() { 
  7.     Column() { 
  8.       Image($rawfile('mine.png')) 
  9.         .objectFit(ImageFit.Contain) 
  10.         .height(300) 
  11.         .scale({ x: 0.5, y: 0.5 }) 
  12.         .opacity(0.8) 
  13.  
  14.       setButton({ String: '初級', difficulty: 10, Number_row: 9, Number_column: 9 }); 
  15.       setButton({ String: '中級', difficulty: 30, Number_row: 12, Number_column: 12 }); 
  16.       setButton({ String: '高級', difficulty: 50, Number_row: 16, Number_column: 16 }); 
  17.     } 
  18.     .width('100%'
  19.     .height('100%'
  20.     .linearGradient( 
  21.       { 
  22.         angle: 180, 
  23.         colors: [['#D3D7DC', 0.1], ["#B4BED2", 0.6],  ["#A0AAC8", 1]] 
  24.       }) 
  25.   } 
  26.  
  27. @Component 
  28. struct setButton { 
  29.   private String: string 
  30.   private difficulty: number 
  31.   private Number_row: number 
  32.   private Number_column: number 
  33.  
  34.   build() { 
  35.     Button({ type: ButtonType.Capsule, stateEffect: true }){ 
  36.       Column(){ 
  37.         Text(this.String) 
  38.           .textAlign(TextAlign.Center) 
  39.           .fontSize(30) 
  40.           .fontWeight(600) 
  41.           .fontColor('#0000FF'
  42.           .margin({ top: -5 }) 
  43.         Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Row }) { 
  44.           Text('( ' + this.difficulty.toString() + '個'
  45.             .textAlign(TextAlign.Center) 
  46.             .fontSize(22) 
  47.             .fontWeight(600) 
  48.             .fontColor('#416EBE'
  49.             .margin({ top: -2, right: 5 }) 
  50.           Image($rawfile('mine.png')) 
  51.             .height(26) 
  52.             .width(26) 
  53.           Text(this.Number_row.toString() + '*' + this.Number_column.toString() + ' )'
  54.             .textAlign(TextAlign.Center) 
  55.             .fontSize(22) 
  56.             .fontWeight(600) 
  57.             .fontColor('#416EBE'
  58.             .margin({ left: 5, top: -2}) 
  59.         }.margin({ top: 5 }) 
  60.       } 
  61.     } 
  62.     .width(220) 
  63.     .height(90) 
  64.     .backgroundColor('#F3F7FF'
  65.     .margin({ top: 10 }) 
  66.     .onClick(() => { 
  67.       router.push({ 
  68.         uri: 'pages/game'
  69.         params: { difficulty: this.difficulty, Number_row: this.Number_row ,Number_column: this.Number_column } 
  70.       }) 
  71.     }) 
  72.   } 

 至此,歡迎頁面和主頁面都已經(jīng)全部完成了,在基于HarmonyOS ArkUI 3.0 框架的木棉花掃雷(下)將會繼續(xù)分享游戲頁面的實現(xiàn)(~ ̄▽ ̄)~

文章相關(guān)附件可以點擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1541

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-12-01 15:40:23

鴻蒙HarmonyOS應(yīng)用

2022-02-09 19:37:00

Ability鴻蒙開發(fā)

2021-11-02 14:52:17

鴻蒙HarmonyOS應(yīng)用

2021-11-01 11:08:28

鴻蒙HarmonyOS應(yīng)用

2021-09-17 14:47:33

鴻蒙HarmonyOS應(yīng)用

2021-11-02 14:55:42

鴻蒙HarmonyOS應(yīng)用

2024-01-11 15:54:55

eTS語言TypeScript應(yīng)用開發(fā)

2021-12-27 15:10:55

鴻蒙HarmonyOS應(yīng)用

2021-10-28 14:58:15

鴻蒙HarmonyOS應(yīng)用

2022-11-02 16:06:54

ArkUIETS

2022-10-24 14:49:54

ArkUI心電圖組件

2021-12-10 15:02:47

鴻蒙HarmonyOS應(yīng)用

2022-10-19 15:12:05

ArkUI鴻蒙

2022-03-17 15:28:18

五子棋HarmonyOSJSAPI

2022-06-27 14:12:32

css鴻蒙自定義

2022-09-14 15:17:26

ArkUI鴻蒙

2022-08-05 19:27:22

通用API鴻蒙

2022-10-17 14:36:09

ArkUI虛擬搖桿組件

2022-07-13 16:24:12

ArkUI(JS)打地鼠游戲

2022-09-21 14:51:21

ArkUI信件彈出
點贊
收藏

51CTO技術(shù)棧公眾號