精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

跟著小白一起學鴻蒙—一起學做小蜜蜂

系統 OpenHarmony
本文主要介紹了小游戲的開發,畫布功能的使用,希望能夠幫助到你!

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

簡介

小時候我們有個熟悉的游戲叫小蜜蜂。本文中引用的圖片資源均來自與Github。

#創作者激勵# #跟著小白一起學鴻蒙# [番外四]一起學做小蜜蜂-開源基礎軟件社區

開發

1、HAP應用建立

《#跟著小白一起學鴻蒙#[六]如何編寫一個hap應用》里我們介紹了簡單的Hap應用的開發以及基礎控件的介紹,這里我們就不贅述Hap項目的建立過程,以下就是基礎的Hap的page文件:index.ets。

build() {
Row() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onClick((ev: ClickEvent) => {
console.info("click!!")
this.doClick()
})
.onReady(() =>{
this.context.imageSmoothingEnabled = false
this.drawall()
})
}
.width('100%')
}
.height('100%')
.backgroundColor("#000000")
}

build是基礎頁面的構造函數,用于界面的元素構造,其他的頁面的生命周期函數如下:

declare class CustomComponent {
/**
* Customize the pop-up content constructor.
* @since 7
*/
build(): void;

/**
* aboutToAppear Method
* @since 7
*/
aboutToAppear?(): void;

/**
* aboutToDisappear Method
* @since 7
*/
aboutToDisappear?(): void;

/**
* onPageShow Method
* @since 7
*/
onPageShow?(): void;

/**
* onPageHide Method
* @since 7
*/
onPageHide?(): void;

/**
* onBackPress Method
* @since 7
*/
onBackPress?(): void;
}

2、Canvas介紹

canvas是畫布組件用于自定義繪制圖形,具體的API頁面如下:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-components-canvas-canvas-0000001333641081

頁面顯示前會調用aboutToAppear()函數,此函數為頁面生命周期函數。

canvas組件初始化完畢后會調用onReady()函數,函數內部實現小游戲的初始頁面的繪制。

(1)初始化頁面數據
drawall() {
this.context.clearRect(0,0,this.context.width,this.context.height)
this.drawFj();
this.drawEn();
this.drawBullet();
this.drawScore();
}
(2)繪制飛機
drawFj() {
this.context.drawImage( this.fjImg, this.fjStartX, this.fjslotY,this.birdH,this.birdW)
}
(3)繪制害蟲
drawEn() {
for (let line=0; line < this.enemylist.length; line++) {
for (let row=0; row < this.enemylist[line].length; row++) {
if (this.enemylist[line][row] == 1) {
if (line == 0) {
this.context.drawImage( this.en1Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
} else if (line == 1) {
this.context.drawImage( this.en2Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
} else if (line == 2) {
this.context.drawImage( this.en3Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
}
}
}
}
}

不同行的害蟲長相不同,分值不同。

3、游戲邏輯

簡單的小游戲主體游戲邏輯為:點擊鼠標移動飛機,飛機發射子彈,命中害蟲,計算分數:

doClick() {
if (this.en1slotX <= 50) {
this.en1slotX += this.birdW
} else {
this.en1slotX -= this.birdW
}
console.log("doclick----")
this.moveFj();
}

4、完整邏輯

@Entry
@Component
struct Index {
@State message: string = 'Hello World'
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
private blockType: number = 0
private blockSize: number = 30
private en1Img:ImageBitmap = new ImageBitmap("common/images/mf1.png")
private en2Img:ImageBitmap = new ImageBitmap("common/images/mf2.png")
private en3Img:ImageBitmap = new ImageBitmap("common/images/mf3.png")
private fjImg:ImageBitmap = new ImageBitmap("common/images/fj.png")

private startX = 30;
private startY = 100;
private enStartY = 140;
private fjStartX = 50;
private fjStartY = 610;
private fjslotX = 50;
private fjslotY = this.fjStartY;
private en1slotX = 50;
private en1slotY = this.enStartY;
private en2slotX = 50;
private en2slotY = this.enStartY;
private bulletX = 65;
private bulletY = 550;
private birdH = 40;
private birdW = 40;
private score = 0;
private fjDirection = 1;

private enemylist = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1],
]

moveFj() {
this.fjStartX = this.fjStartX + this.fjDirection * this.birdW
if (this.fjStartX >= 210) {
this.fjDirection = -1
} else if (this.fjStartX <= 50) {
this.fjDirection = 1
}
}

drawFj() {
this.context.drawImage( this.fjImg, this.fjStartX, this.fjslotY,this.birdH,this.birdW)
}

drawEn() {
for (let line=0; line < this.enemylist.length; line++) {
for (let row=0; row < this.enemylist[line].length; row++) {
if (this.enemylist[line][row] == 1) {
if (line == 0) {
this.context.drawImage( this.en1Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
} else if (line == 1) {
this.context.drawImage( this.en2Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
} else if (line == 2) {
this.context.drawImage( this.en3Img, this.en1slotX+row*this.birdW,this.en1slotY-line*this.birdH,this.birdH,this.birdW);
}
}
}
}
}

drawBullet() {
let isfind = false
this.context.fillStyle = 'rgb(250,250,250)'
this.context.font = '80px sans-serif'
this.bulletX = this.fjStartX + 20
this.context.fillText(":", this.fjStartX+20, this.bulletY)
for (let line=0; line < this.enemylist.length; line++) {
if (Math.abs(this.bulletY - (this.en1slotY-line*this.birdH)) <= this.birdH) {
console.log("find line: "+line)
for (let row = 0; row < this.enemylist[line].length; row++) {
let matchsize = Math.abs(this.bulletX - (this.en1slotX+row*this.birdW))
// console.log("find szie: "+matchsize.toString()+" row:"+row.toString()+" line:"+line.toString()+" bulletX:"+this.bulletX.toString()+" bulletY:"+
// this.bulletY.toString()+" en1slotX"+this.en1slotX.toString()+" en1slotY"+this.en1slotY.toString())
if (matchsize <= this.birdW) {
if (this.enemylist[line][row] == 1) {
console.log("row:"+row.toString()+" line:"+line.toString()+" bulletX:"+this.bulletX.toString()+" bulletY:"+
this.bulletY.toString()+" en1slotX"+this.en1slotX.toString()+" en1slotY"+this.en1slotY.toString());
this.enemylist[line][row] = 0
isfind = true
switch (line) {
case 0:
this.score += 1;
break;
case 1:
this.score += 2;
break;
case 2:
this.score += 3;
break;
default:
break;
}
//console.log("score: "+this.score.toString())
break
}
}
}
if (isfind) {
break;
}
}
}
if (this.bulletY <= 100 || isfind == true) {
this.bulletY = 550
} else {
this.bulletY -= 50;
}
}

drawScore() {
this.context.fillStyle = 'rgb(250,250,250)'
this.context.font = '80px sans-serif'
this.context.fillText("Score:"+this.score.toString(), 20, 750)
// this.context.fillText(":", 65, 550)
}

drawall() {
this.context.clearRect(0,0,this.context.width,this.context.height)
this.drawFj();
this.drawEn();
this.drawBullet();
this.drawScore();
}

async sleep(ms: number) {
var that = this;
return new Promise((r) => {
setInterval(() => {
if (that.en1slotX <= 50) {
that.en1slotX += that.birdW
} else {
that.en1slotX -= that.birdW
}

console.log(that.en1slotX.toString())
that.drawall()

}, ms)
})
}

doClick() {
if (this.en1slotX <= 50) {
this.en1slotX += this.birdW
} else {
this.en1slotX -= this.birdW
}
console.log("doclick----")
this.moveFj();
}

aboutToAppear() {
this.sleep(1000)
}

build() {
Row() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onClick((ev: ClickEvent) => {
console.info("click!!")
this.doClick()
})
.onReady(() =>{
this.context.imageSmoothingEnabled = false
this.drawall()
})
}
.width('100%')
}
.height('100%')
.backgroundColor("#000000")
}
}

遺留問題:

  1. 飛機的子彈可以多發
  2. 害蟲可以攻擊飛機
  3. 游戲聲音問題:目前ohos不支持音頻播放資源音頻,看之后版本是否支持
  4. DevEco用setInterval重繪canvas會導致ide崩潰

5、獲取源碼

見附件:

https://ost.51cto.com/resource/2670。

總結

本文主要介紹了小游戲的開發,畫布功能的使用。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-11-29 16:35:02

Tetris鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-14 17:01:34

游戲開發畫布功能

2023-02-27 16:30:32

鴻蒙開源協議分析

2023-03-30 09:19:54

SELinux安全子系統

2022-08-19 19:02:20

開源鴻蒙操作系統

2023-04-04 09:24:11

鴻蒙HiDumper

2022-10-10 14:47:04

藍牙應用鴻蒙

2023-01-03 15:09:10

鴻蒙常用工具

2022-12-06 15:39:16

鴻蒙主干代碼

2023-03-15 16:19:03

BinderIPC工具

2022-11-24 14:34:41

Hap程序鴻蒙

2022-10-20 16:40:16

JS應用控制LED鴻蒙

2022-10-09 15:05:50

NAPI框架鴻蒙

2022-09-28 13:57:41

鴻蒙開源

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2023-02-24 16:02:45

WebSocket網絡通訊協議

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-12-09 15:34:38

2022-12-05 15:02:14

鴻蒙用戶鑒權
點贊
收藏

51CTO技術棧公眾號

国产第一页精品| 欧美日韩在线免费观看视频| 蜜臀精品一区二区三区| 国产欧美日韩在线一区二区| 色婷婷综合久久| 中文字幕久精品免| 亚洲黄色片视频| 噜噜噜久久亚洲精品国产品小说| 中日韩美女免费视频网站在线观看 | 国产精品美女久久久久久久| 亚洲tv在线观看| 日韩在线观看第一页| 欧美午夜精品一区二区三区电影| 日韩一区二区三区四区五区六区| 黄色一级视频片| 国产成人在线视频免费观看| 91免费观看视频| 亚洲最大的av网站| 高清乱码免费看污| 欧美在线高清| 中文字幕日韩免费视频| 在线精品一区二区三区| 欧美午夜三级| 精品久久久久国产| 日韩精品第1页| 91xxx在线观看| 99精品在线免费| 91手机在线播放| 在线视频播放大全| 国产欧美日韩综合一区在线播放| 久久中文字幕国产| 亚洲女优在线观看| 国产欧美自拍一区| 在线播放亚洲一区| 欧美日韩亚洲一二三| av福利在线导航| 亚洲激情六月丁香| 一本一道久久a久久综合精品 | 一区二区三区四区五区视频| 日韩av成人| 成人av在线网| 国产精品日韩高清| 国产成年妇视频| 精品亚洲国产成人av制服丝袜 | 亚洲性线免费观看视频成熟| 中文字幕人妻熟女在线| 美女精品久久| 欧美一级二级在线观看| 中文字幕视频三区| 日韩有码欧美| 欧美日韩高清一区| 特级丰满少妇一级| 国产一区二区精品调教| 日本高清不卡一区| 日韩精品免费播放| 91tv亚洲精品香蕉国产一区| 在线中文字幕一区| 国产精品天天av精麻传媒| 成人激情综合| 欧美亚洲一区三区| 黄色成人免费看| 伦一区二区三区中文字幕v亚洲| 欧洲一区二区av| 又色又爽又高潮免费视频国产| 中文字幕资源网在线观看免费| 欧美日韩在线第一页| 91视频 -- 69xx| 裤袜国产欧美精品一区| 一本色道久久综合亚洲精品按摩| 日本黄色三级大片| av有声小说一区二区三区| 91成人在线观看喷潮| 国产视频手机在线播放| 亚州精品国产| 欧美成人女星排行榜| 在线精品视频播放| 亚洲深夜福利在线观看| 尤物九九久久国产精品的特点| av片在线免费看| 在线中文字幕亚洲| 国内揄拍国内精品少妇国语| 丁香六月婷婷综合| 免费精品视频最新在线| 91久久偷偷做嫩草影院| 日本激情视频网站| 久久久久久一二三区| 一区二区三区欧美成人| 欧美家庭影院| 色综合久久六月婷婷中文字幕| 亚洲一区在线不卡| 香蕉免费一区二区三区在线观看 | 欧美日韩免费在线| 国产裸体免费无遮挡| 成人国产精品久久| 亚洲黄色av网站| 国产熟女一区二区| 欧美激情四色| 国产97免费视| 成人黄色在线观看视频| 久久久91精品国产一区二区三区| 中文字幕中文字幕在线中心一区 | 日韩欧美综合| 欧美激情视频在线观看| 超碰中文字幕在线| 国产精品996| 欧美日韩精品免费观看视一区二区 | 成人妖精视频yjsp地址| 日韩精品第一页| 综合图区亚洲| 欧洲人成人精品| 少妇熟女视频一区二区三区| 菠萝蜜一区二区| 欧美极度另类性三渗透| 一卡二卡在线视频| 久久蜜桃香蕉精品一区二区三区| 大地资源第二页在线观看高清版| 牛牛精品一区二区| 日韩精品一区二区三区中文不卡| 亚洲区免费视频| 影音先锋久久精品| 91精品免费视频| 丁香在线视频| 日韩欧美一区二区三区| 韩国一区二区三区四区| 婷婷激情图片久久| 国产精品成人一区二区| 熟妇高潮一区二区三区| 一区二区三区中文在线观看| 黄色片视频在线| 免费电影一区二区三区| 久久久亚洲精品视频| 国产99久久九九精品无码免费| 亚洲国产精品精华液2区45| 日韩五码在线观看| 9999久久久久| 欧美成人午夜激情视频| 91麻豆成人精品国产免费网站| 91色.com| 免费在线a视频| jizz18欧美18| 久久99久久99精品免观看粉嫩| 国产精品无码免费播放| 一区在线观看视频| 99视频精品免费| 精品国产aⅴ| 国产精品99久久久久久人| 人成在线免费视频| 欧美日韩中文字幕在线| 丰满少妇xbxb毛片日本| 欧美三级黄美女| 成人欧美一区二区三区视频xxx| 99热国产在线中文| 欧美一区二区三区四区久久| 黄色一级大片在线免费观看| 极品少妇一区二区| 91香蕉视频网址| 国产精品日本一区二区三区在线 | 日韩欧美激情在线| 欧产日产国产v| 国产成人综合在线播放| 成人午夜免费在线视频| 少妇精品一区二区| www.伊人久久| 日本午夜精品一区二区三区电影| 欧美精品一区二区三区四区五区 | 热久久这里只有精品| 欧洲综合视频| 色欧美88888久久久久久影院| www在线观看免费视频| 青青草原综合久久大伊人精品优势| 日韩欧美亚洲日产国| 成人综合网站| 久久国产精品99国产精| 午夜精品久久久久久久96蜜桃 | 国产亚洲激情视频在线| 色老头在线视频| 中文字幕制服丝袜成人av | 国产视频精品免费播放| 久久久久久在线观看| 国产精品久久一级| 国产女主播在线播放| 黄色av小说在线观看| 97se亚洲国产综合在线| 日韩精品视频免费专区在线播放 | 波多野结衣先锋影音| 亚洲精品日韩久久| 欧美激情论坛| 91成人精品观看| 国内伊人久久久久久网站视频| 欧美孕妇孕交| 7777精品伊人久久久大香线蕉的 | jizz在线免费观看| 欧美一级日韩免费不卡| 一级片免费网址| 欧美国产视频在线| 波多野结衣电影免费观看| 99精品视频免费观看| 午夜精品短视频| 欧美视频免费看| 韩国欧美亚洲国产| 国产午夜视频在线观看| 欧美一区二区精品久久911| 成人免费区一区二区三区| 国产精品三级av| 少妇精品无码一区二区三区| 老司机精品视频在线| 青青草视频在线免费播放| 日韩欧美高清| 国产自产精品| 欧美成人精品一级| 日韩av免费一区| 男女在线视频| 亚洲人成77777在线观看网| www.国产视频| 欧美区一区二区三区| 毛片视频网站在线观看| 樱花影视一区二区| 国产成人免费在线观看视频| 91蜜桃传媒精品久久久一区二区| 亚洲精品乱码久久久久久9色| 日本欧美一区二区| aⅴ在线免费观看| 亚洲全部视频| 国产免费xxx| 日韩激情一区| 日本一区免费| 色哟哟精品丝袜一区二区| 97久久人人超碰caoprom欧美| 国产成人久久精品麻豆二区| 91chinesevideo永久地址| 日本片在线看| 俺去了亚洲欧美日韩| eeuss影院www在线观看| 亚洲视频axxx| 欧美日韩激情视频一区二区三区| 亚洲成人黄色在线| 成人1区2区3区| 日韩一卡二卡三卡| 97国产精品久久久| 欧美色综合网站| 亚洲性猛交富婆| 色www精品视频在线观看| www.国产高清| 欧美日韩免费观看中文| 成年人免费看毛片| 亚洲成人av在线电影| 久久婷婷国产麻豆91| 一区2区3区在线看| 欧美交换国产一区内射| 亚洲激情在线激情| 久久久久久久黄色| 亚洲成人中文在线| 日本一级黄色录像| 精品久久久一区| 在线能看的av| 色综合久久99| 久久人人爽人人爽人人片av免费| 色婷婷亚洲综合| 国产乱码77777777| 欧美日韩在线观看一区二区| 在线观看免费观看在线| 欧美日韩一区二区欧美激情| 在线播放亚洲精品| 欧美二区乱c少妇| 国产女主播福利| 精品久久久网站| 天堂av资源在线| 亚洲欧美日韩网| 91在线视频| 不卡av在线播放| 久久大胆人体| 国产成人涩涩涩视频在线观看| 国产欧美自拍| 亚洲最大福利网| 国产伦理久久久久久妇女| 欧美日韩一区在线观看视频| 日韩一区三区| 在线观看av的网址| 亚洲精品一级| 亚洲欧洲日本精品| 国产风韵犹存在线视精品| 精品人妻一区二区免费视频| 久久精品一区二区三区不卡| 男人的午夜天堂| 亚洲成精国产精品女| 懂色av蜜臀av粉嫩av分享吧最新章节| 欧美日韩成人一区| 丰满肉嫩西川结衣av| 亚洲图片欧美午夜| 91高清在线观看视频| 欧美一级在线播放| 高清国产一区二区三区四区五区| 成人情视频高清免费观看电影| 国产欧美日韩视频在线| 日本中文字幕一级片| 亚欧成人精品| 天堂网成人在线| 久久亚洲精精品中文字幕早川悠里 | 中文字幕免费高清网站| 日韩欧美在线1卡| seseavlu视频在线| 海角国产乱辈乱精品视频| 97精品国产99久久久久久免费| 99久久精品免费看国产四区| 亚洲欧美tv| 国内少妇毛片视频| 久久激情综合网| 免费a级黄色片| 亚洲欧美日韩在线| 黄色一级视频免费看| 精品国产乱码久久久久久久| 成年人在线观看网站| 91国语精品自产拍在线观看性色| 婷婷精品久久久久久久久久不卡| 免费在线一区二区| 欧美va天堂在线| 欧美黄色性生活| 99久久99久久精品免费观看 | 性欧美疯狂xxxxbbbb| 亚洲一区二区视频在线播放| 国产视频精品一区二区三区| 欧美aaaxxxx做受视频| 国产噜噜噜噜噜久久久久久久久 | 日本精品裸体写真集在线观看| 99久久自偷自偷国产精品不卡| 国产影视一区| 丰满少妇被猛烈进入高清播放| 国产成人精品一区二| 91n在线视频| 欧美性色黄大片手机版| 天堂√在线中文官网在线| 亚洲一区二区三区四区在线| 国产成人精品777777| 精品99999| av官网在线播放| 91热精品视频| 欧美jizz| 欧美午夜aaaaaa免费视频| 久久久久88色偷偷免费| 在线观看免费国产视频| 亚洲高清免费观看高清完整版| 2024短剧网剧在线观看| 91精品久久久久久久久青青| 欧美日韩激情在线一区二区三区| 日韩av片在线看| 91在线高清观看| 日本va欧美va国产激情| 亚洲国产免费av| 国产亚洲成av人片在线观看| 国产精品手机视频| 亚洲乱码视频| 国产免费一区二区三区最新6| 亚洲成人动漫在线观看| 蜜桃久久一区二区三区| 欧美激情va永久在线播放| 91大神精品| 日韩欧美猛交xxxxx无码| 国产成人一区二区精品非洲| 国产稀缺精品盗摄盗拍| 欧美电影在线免费观看| av大片在线| 官网99热精品| 在线欧美一区| 97人妻天天摸天天爽天天| 色综合天天综合狠狠| www免费网站在线观看| 91精品国产综合久久男男| 国产大片一区| 欧美一级片在线免费观看| 亚洲午夜视频在线| 水莓100在线视频| 国产精品黄色影片导航在线观看| 视频在线不卡免费观看| www.污网站| 亚洲精品老司机| 婷婷久久久久久| 国产精品久久久久久久9999| 手机在线一区二区三区| 初高中福利视频网站| 亚洲一区二区av电影| 免费av在线电影| 91免费欧美精品| 亚洲精品美女91| 精品亚洲aⅴ无码一区二区三区| 欧美精品日韩综合在线| 欧美aaaxxxx做受视频| 日本一区精品| 国产一区二区不卡在线 | 日韩欧美aⅴ综合网站发布| 91在线视频免费看| 国产精品毛片va一区二区三区| 国产欧美日韩一区二区三区在线| 欧美aaa级片| 精品999在线播放| a成人v在线| 韩日视频在线观看| 国产农村妇女精品| 韩国av免费在线| 国产精品揄拍500视频| 亚洲视频一区|