精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产精品毛片| 日本午夜在线亚洲.国产| 最好看的中文字幕| 91高清视频在线观看| 久久伊人中文字幕| 国产欧美一区二区三区视频 | 日韩免费观看在线观看| 午夜精品久久久久99蜜桃最新版| 欧美9999| 在线观看91视频| 成人av在线不卡| 国产精品毛片一区二区三区四区| 国产精品18久久久久久vr| 日本不卡视频在线播放| 污软件在线观看| 自拍欧美一区| 精品免费国产二区三区| 欧美精品久久久久久久久25p| 男女视频在线| 一区在线播放视频| 久久综合伊人77777麻豆| 国产高清在线免费| 日韩国产在线观看一区| 欧美劲爆第一页| www中文在线| 在线成人动漫av| 精品欧美一区二区久久| 亚洲va综合va国产va中文| 悠悠资源网亚洲青| 亚洲制服丝袜av| 亚洲电影网站| 日本大片在线观看| 成人午夜视频在线观看| 国产日产欧美a一级在线| 国语对白永久免费| 亚洲狠狠婷婷| 久久久久九九九九| www青青草原| 99久久久久| 在线观看欧美视频| 成人免费网站黄| 奇米影视777在线欧美电影观看 | 欧美激情1区2区| 社区色欧美激情 | 中文字幕丰满乱子伦无码专区| 粉嫩精品导航导航| 欧美大片在线观看一区二区| 中文字幕一区二区在线观看视频 | 日韩视频在线观看视频| 99riav在线| 国产精品午夜电影| 视频一区二区在线| 国产h视频在线观看| 国产视频一区不卡| 日本在线观看一区| 川上优的av在线一区二区| 久久九九全国免费| 日产精品久久久一区二区| 激情综合闲人网| 国产日韩欧美高清| 性欧美大战久久久久久久免费观看| 蜜桃视频在线免费| 国产日韩精品一区二区浪潮av| 日本成人三级电影网站| 国产大片在线免费观看| 国产精品五月天| 黄色一级片网址| 在线不卡日本v二区707| 一区二区三区欧美日韩| 国产免费黄色一级片| 久久久男人天堂| 色婷婷综合久久| wwww.国产| 国产精品欧美一区二区三区不卡| 日韩一区二区三区三四区视频在线观看| 亚洲网中文字幕| 国产在线播放精品| 亚洲欧美日韩网| 成人18视频免费69| 韩国av一区| 欧美在线观看一区二区三区| 亚洲成人av网址| 麻豆精品一区二区综合av| 亚洲综合自拍一区| 亚洲欧美日韩成人在线| 国产精品色哟哟网站| 青青草视频国产| 综合另类专区| 欧美精品在线观看一区二区| 欧美日韩人妻精品一区在线| 精品中文一区| 久久久成人精品视频| 日韩女优在线观看| 免费成人av在线播放| 99久久国产免费免费| 四虎影视2018在线播放alocalhost| 国产日韩欧美在线一区| 国产情侣第一页| 亚洲第一会所001| 日韩欧美123| 精品人妻中文无码av在线| 一区二区日韩欧美| 日本国产一区二区三区| 97国产成人无码精品久久久| 2022国产精品视频| 男女啪啪免费观看| 午夜日韩成人影院| 精品国产一区二区精华| 黄色三级生活片| 91久久黄色| 91精品综合久久久久久五月天| 深夜福利视频在线免费观看| 亚洲欧洲制服丝袜| 国产视频一区二区三区在线播放| 中文字幕区一区二区三| 日韩视频免费看| 在线精品免费视| 国产91高潮流白浆在线麻豆 | 狠狠噜噜久久| 国产在线a不卡| 国产小视频在线播放| 午夜欧美在线一二页| 久久久九九九热| 成人3d精品动漫精品一二三| 欧美性做爰毛片| 乱色精品无码一区二区国产盗| 一区精品在线播放| www.日本一区| 欧美午夜精彩| 国产97免费视| 青青久在线视频免费观看| 亚洲国产精品一区二区www| 天堂av2020| 99久久亚洲精品蜜臀| 国产精品久久久久秋霞鲁丝| 日韩欧美在线番号| 午夜一区二区三区在线观看| 人妻av一区二区三区| 亚洲经典一区| 亚洲自拍偷拍视频| 黄a在线观看| 69堂精品视频| 欧美大片xxxx| 国产麻豆一精品一av一免费 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 青青草自拍偷拍| 日韩福利电影在线观看| 欧洲高清一区二区| 欧美性xxx| 亚洲深夜福利在线| 草莓视频18免费观看| 久久久久国色av免费看影院| 激情六月丁香婷婷| 国产精品入口久久| 国产成人精品日本亚洲| 98在线视频| 欧美高清视频一二三区| 国产一区二区播放| 国产精品自拍av| av免费看网址| 欧美黄色影院| 国产成人在线播放| 无遮挡的视频在线观看| 在线播放国产精品二区一二区四区| 久久一级免费视频| 国产一区二区91| 大伊香蕉精品视频在线| 日本成人7777| 国产精品aaaa| 黄网站视频在线观看| 欧美不卡在线视频| 国产在线观看黄色| 国产清纯在线一区二区www| 一级黄色特级片| 欧美伊人影院| 久久久久久久免费| 亚洲电影有码| 欧美日韩高清在线观看| 艳母动漫在线看| 欧美日本乱大交xxxxx| 精品无码m3u8在线观看| 久久久精品国产免费观看同学| 青青草久久伊人| 在线观看的日韩av| 日韩精品不卡| 中文字幕视频精品一区二区三区| 91大神在线播放精品| 幼a在线观看| 精品国产乱码久久久久久久 | 9i看片成人免费高清| 在线观看国产精品91| 亚洲va欧美va| 在线观看日韩高清av| 国产高潮流白浆| 久久亚洲欧美国产精品乐播 | 91在线porny国产在线看| www.日本xxxx| 在线不卡亚洲| 国产a级片免费看| 亚洲系列另类av| 91视频免费进入| 福利视频亚洲| 538国产精品视频一区二区| 黄黄的网站在线观看| 亚洲日韩中文字幕| 亚洲欧美高清视频| 欧美日韩一区不卡| av大片免费观看| 亚洲激情一二三区| 极品久久久久久久| 91偷拍与自偷拍精品| 成人高清在线观看视频| 视频一区二区中文字幕| 91成人综合网| 五月久久久综合一区二区小说| 欧美精品中文字幕一区二区| xxxx日韩| 97超级碰碰| 日韩在线电影| 国产精品高潮呻吟久久av野狼 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲精品国产精品粉嫩| 99精品国产一区二区| 亚洲18在线| 国产精品小说在线| 欧美特大特白屁股xxxx| 欧美一级淫片播放口| sm在线播放| 欧美黄色片在线观看| 黄av在线播放| 久久久999精品视频| 日韩在线观看www| 中文字幕在线观看日韩| 久草在线网址| 亚洲日韩第一页| 黄色影院在线播放| 亚洲另类图片色| 国产日本在线观看| 亚洲欧美国产一区二区三区| 欧洲成人av| 亚洲美女精品久久| 日韩在线免费看| 亚洲男人天堂古典| 精品久久av| 影音先锋日韩有码| yw193.com尤物在线| 国产亚洲精品久久久优势| 黄色毛片在线观看| 一本久久综合亚洲鲁鲁| av网站在线免费观看| 色偷偷噜噜噜亚洲男人| 国产黄色在线网站| 美女久久久久久久| 青青草视频在线免费直播| 欧美激情成人在线视频| 都市激情久久综合| 2019中文字幕在线| 中文字幕人成乱码在线观看| 日韩免费在线看| 国产精品久久久久久久久久齐齐| 国产日韩在线看| 国产精品视频一区二区三区| 成人在线免费网站| 欧美激情影院| 香蕉久久夜色| 在线精品国产| 久久久久免费看黄a片app| 亚洲一区二区网站| 国产又大又黄又粗的视频| 九九久久精品视频| 少妇伦子伦精品无吗| 91美女片黄在线观看91美女| 日韩精品欧美| 图片区小说区国产精品视频| 天堂网一区二区三区| 色综合久久88色综合天天免费| 亚洲精品无码久久久久| 91精品国产美女浴室洗澡无遮挡| 亚洲精品网站在线| 亚洲女人天堂视频| 麻豆传媒免费在线观看| 欧美精品成人在线| 欧美一区国产| www.av一区视频| 久久99久久人婷婷精品综合| 一级一片免费播放| 日韩亚洲国产精品| 午夜激情av在线| caoporen国产精品视频| 日本美女xxx| 亚洲国产欧美一区二区三区丁香婷| 久久久久在线视频| 日韩一级在线观看| 青青免费在线视频| 欧美精品生活片| 色8久久影院午夜场| 成人黄色片视频网站| 国产亚洲电影| 无码熟妇人妻av在线电影| 三级不卡在线观看| 国产伦精品一区二区三区88av| 亚洲国产成人在线| 国产精品99re| 欧美一区二区三区在线看| 色视频免费在线观看| 精品自在线视频| 久久久久久久性潮| 国内视频一区| 欧美日韩亚洲三区| xxww在线观看| 久久久青草青青国产亚洲免观| 久草免费在线视频观看| 欧美日韩一区 二区 三区 久久精品| 午夜性色福利影院| 久久91精品国产91久久久| 久久爱.com| 日韩av一级大片| 亚洲日本免费| 精品人妻二区中文字幕| 综合色天天鬼久久鬼色| 波多野结衣一二区| 精品亚洲男同gayvideo网站| 七七久久电影网| 亚洲精品日韩av| 99免费精品| 亚洲一区二区三区观看| 国产精品欧美经典| 国产精品尤物视频| 亚洲欧洲av一区二区| 日本乱码一区二区三区不卡| 国产精品一国产精品最新章节| 欧美va天堂在线| 在线a免费观看| 亚洲精品大片www| 国产女人18毛片18精品| 久久久国产精品视频| 成人在线视频www| 99精品一区二区三区的区别| 久久99国产精品麻豆| 自拍偷拍第9页| 欧美精选一区二区| 黄黄的网站在线观看| **亚洲第一综合导航网站| 91超碰国产精品| gogo亚洲国模私拍人体| 一区二区三区资源| www.xxxx国产| 久久久久久久国产精品| 精品国产影院| 青青艹视频在线| 久久久九九九九| 日本欧美www| 久青草国产97香蕉在线视频| 成人污污视频| 日韩美女爱爱视频| 94色蜜桃网一区二区三区| 黑人一级大毛片| 亚洲视频777| 宅男噜噜噜66国产精品免费| 永久免费看av| 99久久er热在这里只有精品15| 日韩欧美成人一区二区三区| 一区二区三区精品99久久 | 青草青草久热精品视频在线网站 | 久久久精品免费视频| 久久在线观看| 成人午夜精品久久久久久久蜜臀| 91丨国产丨九色丨pron| 探花国产精品一区二区| 久久成人人人人精品欧| 国产精品巨作av| 亚洲综合在线网站| 亚洲婷婷综合久久一本伊一区| 狠狠人妻久久久久久综合麻豆| 1769国产精品| 日韩理论电影院| 动漫av在线免费观看| 狠狠做深爱婷婷久久综合一区 | 久久久久久伊人| 羞羞色国产精品网站| 性欧美videossex精品| 一区二区三区四区激情| 麻豆av电影在线观看| 成人高清视频观看www| 亚洲经典三级| 九一在线免费观看| 欧美成人性福生活免费看| 精品国产第一福利网站| 日韩人妻精品一区二区三区| 97久久超碰国产精品电影| 一区二区视频在线免费观看| 欧美极品少妇xxxxⅹ喷水| 国产一区国产二区国产三区| 一起草最新网址| 91国产成人在线| 国产盗摄在线视频网站| 亚洲一区二区三区乱码| k8久久久一区二区三区| 97人妻精品一区二区三区视频| 97国产在线观看|