成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從微信小程序到鴻蒙JS開發-canvas&stack&2048

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[383190]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

春節在家回看了張榮超老師的“從零開發鴻蒙小游戲APP“直播課(https://harmonyos.51cto.com/activity/17),聽完后在手機設備上完善了功能并實現了一個簡單的2048小游戲。這其中涉及到canvas和stack組件,在此做一些筆記。效果圖:

1、canvas組件

畫布組件,微信小程序也有,可以在其中動態繪制圖形和文字等。在2048游戲中,不同的數字對應的背景顏色都不同,如果使用動態樣式,判斷和渲染對性能的要求會很高。

  1. <canvas class="content" id="canvas" onswipe="swipeGrids"></canvas> 

1.1 獲取繪圖上下文

組件給定id或者ref,即可在js中獲取組件繪圖上下文,通過獲取的CanvasRenderingContext2D對象進行繪圖。官方文檔提及獲取繪圖上下文的操作不支持在onInit和onReady中進行調用,經實驗如在onInit()中執行應用將白屏,在onReady()中執行畫布中的內容將無法被繪制,故需寫在onShow()中。

  1. // 繪圖對象 
  2. var canvas; 
  3.  
  4. export default { 
  5.     data: { 
  6.     ... 
  7.     }, 
  8.     onShow() { 
  9.         canvas = this.$element("canvas").getContext("2d"); 
  10.         // 繪圖 
  11.         this.drawGrids(); 
  12.     }, 
  13. ... 

對于會在多個方法之內使用的全局變量,可以寫在data中,也可以寫在export之外。對于無需在頁面中綁定的數據,寫在export外或許可以提高一點性能。

1.2 監聽滑動事件

在畫布中滑動的事件綁定是通過onswipe屬性,這個在官方文檔中沒有說明,但是IDE是有提示的。對于方法的入參,打日志后看出結構如下:

event.direction有四種取值:up/down/left/right,可用于判斷滑動方向。

1.3 繪制矩形

  1. canvas.fillStyle = "#ffffff"

獲取繪圖上下文對象后,將其fillStyle屬性設置為十六進制顏色即可設置本次繪圖的顏色。也可使用createLinearGradient()給定漸變色,createPattern()創建填充模版。

  1. canvas.fillRect(leftTopX, leftTopY, gridWidth, gridWidth); 

fillRect()方法用于繪制矩形,四個參數分別為左上角X坐標,左上角Y坐標,寬度,高度。

1.4 繪制文字

  1. canvas.font = "70px HYQiHei-65S"
  2. canvas.fillStyle = gridTxColors[gridVal]; 

font屬性指定文字的大小和字體,fillStyle指定文字的顏色。

  1. canvas.fillText(text, leftBottomX, leftBottomY); 

fillText()方法用于繪制文字,三個參數分別為文字內容,左下角X坐標,左下角Y坐標。這里后兩個參數是左下角,和微信小程序以及剛才提到的fillRect()不同。

繪制2048格子及文字的方法:

  1. // 繪制格子 grids:存儲數字的二維數組; gridBgColors:存儲格子背景色的對象; gridTxColors:存儲文字顏色的對象 
  2.     drawGrids() { 
  3.         for (let r = 0; r < 4; r++) { 
  4.             for (let c = 0; c < 4; c++) { 
  5.                 let gridVal = grids[r][c].toString(); 
  6.                 // 繪制背景 
  7.                 canvas.fillStyle = gridBgColors[gridVal]; 
  8.                 let leftTopX = c * (gridWidth + gridMargin) + gridMargin; 
  9.                 let leftTopY = r * (gridWidth + gridMargin) + gridMargin; 
  10.                 // 左上角x 左上角y 寬度 高度 
  11.                 canvas.fillRect(leftTopX, leftTopY, gridWidth, gridWidth); 
  12.                 // 繪制文字 
  13.                 canvas.font = "70px HYQiHei-65S"
  14.                 if (gridVal != "0") { 
  15.                     if (gridVal == "2" || gridVal == "4") { 
  16.                         canvas.fillStyle = gridTxColors[gridVal]; 
  17.                     } else { 
  18.                         canvas.fillStyle = gridTxColors["others"]; 
  19.                     } 
  20.                     let offsetX = (4 - gridVal.length) * (gridWidth / 8); 
  21.                     let offsetY = (gridWidth - fontSize) / 2; 
  22.                     // 文字 左下角x 左下角y 
  23.                     canvas.fillText(gridVal, leftTopX + offsetX, leftTopY + offsetY + fontSize - 5); 
  24.                 } 
  25.             } 
  26.         } 
  27.     }, 

每次數字改變后,調用以上方法即可將2048的效果繪制出。

2、stack組件

這個組件很有意思,在stack中的子元素會順序入棧,實現堆疊效果。一般都是通過z-index的樣式實現,而鴻蒙這里的實現將數據結構的棧與頁面層級相結合,非常巧妙。

在游戲結束時,提示文字將覆蓋格子區域:

  1. <stack class="content"
  2.       <canvas class="content" id="canvas" onswipe="swipeGrids"></canvas> 
  3.       <div show="{{ isEnd }}"
  4.           <text> 
  5.               游戲結束 
  6.           </text> 
  7.       </div> 
  8.   </stack> 

事實上,鴻蒙js組件是不支持z-index樣式的。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-02-23 12:25:26

鴻蒙HarmonyOS應用開發

2021-03-02 09:29:29

鴻蒙HarmonyOS應用開發

2021-02-20 09:52:02

鴻蒙HarmonyOS應用開發

2021-02-25 10:01:19

鴻蒙HarmonyOS應用開發

2021-02-22 14:56:55

鴻蒙HarmonyOS應用開發

2021-02-21 11:09:18

鴻蒙HarmonyOS應用開發

2021-02-23 09:52:42

鴻蒙HarmonyOS應用開發

2021-02-04 13:49:41

鴻蒙HarmonyOS應用開發

2021-02-25 15:13:08

鴻蒙HarmonyOS應用開發

2021-02-05 09:46:16

鴻蒙HarmonyOSjs開發

2021-02-07 09:17:24

鴻蒙HarmonyOS應用開發

2021-02-24 09:36:03

鴻蒙CSS應用開發

2017-05-08 15:03:07

微信小程序開發實戰

2016-09-27 16:38:24

JavaScript微信Web

2016-11-04 10:49:48

微信小程序

2016-09-28 18:10:59

微信程序MINA

2016-09-27 20:36:23

微信HttpWeb

2016-11-04 10:30:17

微信小程序

2018-09-11 10:32:07

云開發小程序開發者

2016-11-07 10:30:07

微信小程序安裝配置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男人的天堂中文字幕 | 国产日韩欧美 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | www.日日夜夜 | 男女性毛片 | 国产日产久久高清欧美一区 | 国产一区二区三区日韩 | 亚洲欧美在线视频 | 中文字幕免费 | 别c我啊嗯国产av一毛片 | 国产精品美女久久久久久久久久久 | 国产精品美女久久久久久久网站 | 亚洲一区二区免费视频 | 久久久精品影院 | 国产精品国产成人国产三级 | 精品久久久久久亚洲综合网 | 日韩二区 | 亚洲精品国产第一综合99久久 | 欧美激情免费在线 | 国产成人精品久久二区二区91 | 欧美日韩一区二区三区四区 | 99久久久国产精品 | 国产一区二区三区视频免费观看 | 搞黄视频免费看 | 国产成人综合网 | 久久青 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一区中文字幕在线观看 | 日韩欧美中文字幕在线观看 | 国产一级免费视频 | 四虎影音 | 男女免费在线观看视频 | 亚洲综合网站 | 久久久不卡网国产精品一区 | 免费看日韩视频 | 韩国av一区二区 | 亚洲一区二区三区免费观看 | 亚洲精品乱码久久久久久久久 | 超碰成人av| 欧美成人影院 | 午夜影院污|