自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[437923]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

前言

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

效果圖

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

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

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

正文

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

1. 安裝和配置DevEco Studio 3.0

DevEco Studio 3.0下載

DevEco Studio 3.0安裝

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

DevEco Studio下載安裝成功后,打開(kāi)DevEco Studio,點(diǎn)擊左上角的File,點(diǎn)擊New,再選擇New Project,選擇Empty Ability選項(xiàng),點(diǎn)擊Next按鈕。

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

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

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

3. 準(zhǔn)備工作

在entry>src>main>config.json文件中最下方"launchType": "standard"的后面添加以下代碼,這樣就可以實(shí)現(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ū)

二、歡迎頁(yè)面

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"項(xiàng)中的"pages"項(xiàng)中的"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文件中,通過(guò)Image($rawfile(‘LOGO.png’))可放置Logo圖片,通過(guò)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. 添加動(dòng)畫效果

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

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

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

在animateTo顯式動(dòng)畫中,設(shè)置動(dòng)畫時(shí)長(zhǎng)(duration)為2s,延時(shí)(delay)0.1s開(kāi)始播放,設(shè)置顯示動(dòng)效event的閉包函數(shù)(curve),即起點(diǎn)狀態(tài)到終點(diǎn)狀態(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)建一個(gè)mainpage.ets文件。

在animateTo顯示動(dòng)畫播放結(jié)束的onFinish回調(diào)接口中,調(diào)用定時(shí)器Timer的setTimeout接口延時(shí)1s后,調(diào)用router.replace,顯示mainpage.ets頁(yè)面。其中同樣需要導(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.   } 

三、主頁(yè)頁(yè)面

1. 添加背景

游戲頁(yè)面的背景和歡迎頁(yè)面的背景幾乎一樣,這里就不重復(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自定義按鈕。添加四個(gè)變量String、difficulty、Number_row和Number_column,分別用于記錄難度文本、地雷數(shù)量、網(wǎng)格的行數(shù)和網(wǎng)格的列數(shù)。在Button組件中設(shè)置圖片和文本的樣式。

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

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: '初級(jí)', difficulty: 10, Number_row: 9, Number_column: 9 }); 
  13.       setButton({ String: '中級(jí)', difficulty: 30, Number_row: 12, Number_column: 12 }); 
  14.       setButton({ String: '高級(jí)', 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() + '個(gè)'
  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)點(diǎn)擊跳轉(zhuǎn)事件

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

在自定義按鈕組件中添加點(diǎn)擊事件onClick(),調(diào)用router.push接口,其中uri為跳轉(zhuǎn)的頁(yè)面,params為攜帶的數(shù)據(jù),形式為params: { key: values },在新頁(yè)面調(diào)用router.getParams().key來(lái)獲取到頁(yè)面跳轉(zhuǎn)來(lái)時(shí)攜帶的key對(duì)應(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: '初級(jí)', difficulty: 10, Number_row: 9, Number_column: 9 }); 
  15.       setButton({ String: '中級(jí)', difficulty: 30, Number_row: 12, Number_column: 12 }); 
  16.       setButton({ String: '高級(jí)', 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() + '個(gè)'
  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.   } 

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

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

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

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

 

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

2021-12-01 15:40:23

鴻蒙HarmonyOS應(yīng)用

2022-02-09 19:37:00

Ability鴻蒙開(kāi)發(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語(yǔ)言TypeScript應(yīng)用開(kāi)發(fā)

2021-12-27 15:10:55

鴻蒙HarmonyOS應(yīng)用

2021-10-28 14:58:15

鴻蒙HarmonyOS應(yīng)用

2021-12-10 15:02:47

鴻蒙HarmonyOS應(yīng)用

2022-11-02 16:06:54

ArkUIETS

2022-10-24 14:49:54

ArkUI心電圖組件

2022-03-17 15:28:18

五子棋HarmonyOSJSAPI

2022-10-19 15:12:05

ArkUI鴻蒙

2022-06-27 14:12:32

css鴻蒙自定義

2009-03-20 11:20:59

UbuntuLinux示波器

2022-10-17 14:36:09

ArkUI虛擬搖桿組件

2022-09-14 15:17:26

ArkUI鴻蒙

2022-08-05 19:27:22

通用API鴻蒙

2022-09-21 14:51:21

ArkUI信件彈出
點(diǎn)贊
收藏

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