0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙上開發(fā)“小蜜蜂”游戲

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:OST開源開發(fā)者 ? 2023-04-03 11:27 ? 次閱讀

小時(shí)候我們有個(gè)熟悉的游戲叫小蜜蜂。本文教大家在鴻蒙上學(xué)做這個(gè)小蜜蜂游戲。

開發(fā)實(shí)戰(zhàn)

①HAP 應(yīng)用建立

前面我們介紹了簡(jiǎn)單的 Hap 應(yīng)用的開發(fā)以及基礎(chǔ)控件的介紹,這里我們就不贅述 Hap 項(xiàng)目的建立過(guò)程,以下就是基礎(chǔ)的 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 是基礎(chǔ)頁(yè)面的構(gòu)造函數(shù),用于界面的元素構(gòu)造,其他的頁(yè)面的生命周期函數(shù)如下:
declareclassCustomComponent{
/**
*Customizethepop-upcontentconstructor.
*@since7
*/
build():void;

/**
*aboutToAppearMethod
*@since7
*/
aboutToAppear?():void;

/**
*aboutToDisappearMethod
*@since7
*/
aboutToDisappear?():void;

/**
*onPageShowMethod
*@since7
*/
onPageShow?():void;

/**
*onPageHideMethod
*@since7
*/
onPageHide?():void;

/**
*onBackPressMethod
*@since7
*/
onBackPress?():void;
}

②Canvas 介紹

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

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-components-canvas-canvas-0000001333641081
頁(yè)面顯示前會(huì)調(diào)用 aboutToAppear() 函數(shù),此函數(shù)為頁(yè)面生命周期函數(shù)。 canvas 組件初始化完畢后會(huì)調(diào)用 onReady() 函數(shù),函數(shù)內(nèi)部實(shí)現(xiàn)小游戲的初始頁(yè)面的繪制。

初始化頁(yè)面數(shù)據(jù):

drawall(){
this.context.clearRect(0,0,this.context.width,this.context.height)
this.drawFj();
this.drawEn();
this.drawBullet();
this.drawScore();
}
繪制飛機(jī):
drawFj(){
this.context.drawImage(this.fjImg,this.fjStartX,this.fjslotY,this.birdH,this.birdW)
}
繪制害蟲:
drawEn(){
for(letline=0;line

不同行的害蟲長(zhǎng)相不同,分值不同。

③游戲邏輯

簡(jiǎn)單的小游戲主體游戲邏輯為:點(diǎn)擊鼠標(biāo)移動(dòng)飛機(jī),飛機(jī)發(fā)射子彈,命中害蟲,計(jì)算分?jǐn)?shù):

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

④完整邏輯

@Entry
@Component
structIndex{
@Statemessage:string='HelloWorld'
privatesettings:RenderingContextSettings=newRenderingContextSettings(true);
privatecontext:CanvasRenderingContext2D=newCanvasRenderingContext2D(this.settings);
privateblockType:number=0
privateblockSize:number=30
privateen1Img:ImageBitmap=newImageBitmap("common/images/mf1.png")
privateen2Img:ImageBitmap=newImageBitmap("common/images/mf2.png")
privateen3Img:ImageBitmap=newImageBitmap("common/images/mf3.png")
privatefjImg:ImageBitmap=newImageBitmap("common/images/fj.png")

privatestartX=30;
privatestartY=100;
privateenStartY=140;
privatefjStartX=50;
privatefjStartY=610;
privatefjslotX=50;
privatefjslotY=this.fjStartY;
privateen1slotX=50;
privateen1slotY=this.enStartY;
privateen2slotX=50;
privateen2slotY=this.enStartY;
privatebulletX=65;
privatebulletY=550;
privatebirdH=40;
privatebirdW=40;
privatescore=0;
privatefjDirection=1;

privateenemylist=[
[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
}elseif(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?{
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")
}
}
遺留問題:

飛機(jī)的子彈可以多發(fā)

害蟲可以攻擊飛機(jī)

游戲聲音問題:目前 ohos 不支持音頻播放資源音頻,看之后版本是否支持

DevEco 用 setInterval 重繪 canvas 會(huì)導(dǎo)致 ide 崩潰

總結(jié)

本文主要介紹了小游戲的開發(fā),畫布功能的使用,獲取源碼請(qǐng)通過(guò)“閱讀原文”下載附件。

作者:王石

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 游戲
    +關(guān)注

    關(guān)注

    2

    文章

    758

    瀏覽量

    26525
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1537

    瀏覽量

    63070
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4359

    瀏覽量

    63497
  • Canvas
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    11114
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2459

    瀏覽量

    43475

原文標(biāo)題:鴻蒙上開發(fā)“小蜜蜂”游戲

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高云半導(dǎo)體小蜜蜂家族再添新成員——GW1NS-2 FPFA-SoC芯片揭開AI的序幕

    中國(guó)廣州,2018年7月23日,廣東高云半導(dǎo)體科技股份有限公司(以下簡(jiǎn)稱“高云半導(dǎo)體”)今日宣布:高云半導(dǎo)體首款FPGA-SoC產(chǎn)品—小蜜蜂?(LittleBee?)家族GW1NS系列GW1NS-2開始提供工程樣片及開發(fā)板,揭開了布局AI的序幕。
    的頭像 發(fā)表于 07-23 14:09 ?9892次閱讀

    [轉(zhuǎn)帖]這才叫高科技:美科學(xué)家用機(jī)械蜜蜂演奏007主題曲

    賓夕法尼亞大學(xué)研制的四旋翼機(jī)械蜜蜂曾經(jīng)令人印象深刻,但是從來(lái)沒人想到,這些機(jī)械小蜜蜂真的會(huì)干出一件和007相稱的事:它們?cè)谝幌盗袕?fù)雜的飛行之后,成功地演奏出了邦德的主題曲。這些機(jī)器人在電子琴鍵上降落
    發(fā)表于 08-13 20:19

    小蜜蜂擴(kuò)音器的電路圖和元器件清單

    本帖最后由 gk320830 于 2015-3-7 13:41 編輯 小蜜蜂擴(kuò)音器的電路圖和元器件清單。我很急希望各位大大可以幫忙。謝謝大家了。。。{:4:}
    發(fā)表于 04-19 22:44

    小蜜蜂】基于ZigBee的水情信息采集平臺(tái)

    本帖最后由 wangjiamin2014 于 2015-1-9 11:38 編輯 項(xiàng)目名稱:基于ZigBee的水情信息采集平臺(tái) 團(tuán)隊(duì)名稱:小蜜蜂團(tuán)隊(duì)成員:張建祥、李如菊、李艷作品演示作品介紹水
    發(fā)表于 12-31 11:19

    游戲玩家讓自己兒子按年代順序玩了六年古董游戲

    。1979年的Galaxian(小蜜蜂)是他兒子的啟蒙游戲。他的兒子Eliot出生于2004年,因此Baio最近才發(fā)表了他長(zhǎng)達(dá)十年的研究——“關(guān)于強(qiáng)迫懷舊和質(zhì)疑教育的實(shí)驗(yàn)”。該研究是為了讓他的兒子探索媒介
    發(fā)表于 05-04 16:12

    小蜜蜂雙輪平衡車

    `經(jīng)過(guò)一個(gè)月的努力,做了點(diǎn)小東西,在這里跟大家分享一下。當(dāng)然也歡迎大家多多噴我。由于本人等級(jí)有限沒辦法發(fā)視頻連接,大家可以前往優(yōu)酷,然后搜索----小蜜蜂雙輪車測(cè)試視頻.有什么問題可以加入個(gè)人qq:2424607185.`
    發(fā)表于 01-15 17:27

    小蜜蜂機(jī)器人APP測(cè)試

    經(jīng)過(guò)一個(gè)月的努力,做了點(diǎn)小東西(無(wú)廣告),在這里跟大家分享一下。當(dāng)然也歡迎大家多多噴我。下載方式:應(yīng)用寶,然后搜索“小蜜蜂機(jī)器人”。由于本人等級(jí)有限沒辦法發(fā)視頻連接,大家可以前往優(yōu)酷,然后搜索---”小蜜蜂機(jī)器人APP使用介紹“ .有什么問題可以加入個(gè)人qq:242460
    發(fā)表于 01-17 17:09

    有一種微信營(yíng)銷神器叫云控系統(tǒng),有它吸粉引流不會(huì)累!

    就研發(fā)了這樣一款微信營(yíng)銷吸粉神器——小蜜蜂吸粉精靈云控系統(tǒng)。做過(guò)微商或者通過(guò)微信進(jìn)行營(yíng)銷的人都知道,在通過(guò)微信進(jìn)行微信營(yíng)銷吸粉引流的過(guò)程中,人為操作往往會(huì)出現(xiàn)各種各樣的問題,需要耗費(fèi)大量的時(shí)間、人力去
    發(fā)表于 08-15 14:32

    【EFM8 Universal Bee試用體驗(yàn)】開箱+上電

    `晚上收到了開發(fā)板,我打開一看,包裝果然有大廠風(fēng)范,一個(gè)大大的蜜蜂,我姑娘看到了,以為里面裝的是小蜜蜂玩具呢,差點(diǎn)給就地正法。我趕快搶過(guò)來(lái),告訴他這個(gè)是爸爸的玩具,我才有機(jī)會(huì)打開了看看里面有什么不但
    發(fā)表于 11-07 12:34

    【FPGA開發(fā)者項(xiàng)目連載】一次開發(fā)經(jīng)驗(yàn)淺談

    ` 非常開心參加了高云半導(dǎo)體的的星核計(jì)劃。也很榮幸收到了高云半導(dǎo)體贊助的小蜜蜂開發(fā)板。玩FPGA也有兩三年的時(shí)間了,因?yàn)閷W(xué)校有時(shí)間,平常也喜歡做一些相關(guān)的東西。 這也是我第一次拿到咱們國(guó)產(chǎn)的FPGA
    發(fā)表于 05-12 19:41

    海爾小蜜蜂智能修改版V1.03

    電子發(fā)燒友網(wǎng)站提供《海爾小蜜蜂智能修改版V1.03.exe》資料免費(fèi)下載
    發(fā)表于 02-27 09:15 ?0次下載

    瞄準(zhǔn)車載FPGA領(lǐng)域,高云半導(dǎo)體推小蜜蜂家族新品

    ,分別是使用嵌入式閃存工藝的非易失FPGA小蜜蜂?家族和基于SRAM的中密度FPGA晨熙?家族,這兩個(gè)家族的器件均已支持商業(yè)級(jí)(0C°-85C°)和工業(yè)級(jí)(-40C°~+100C°)溫度標(biāo)準(zhǔn)。此次推出支持汽車級(jí)溫度范圍(-40C°~+125C°)的為小蜜蜂?家族部分FPG
    的頭像 發(fā)表于 11-30 10:41 ?9262次閱讀

    高云半導(dǎo)體小蜜蜂家族GW1NS系列產(chǎn)品入圍Arm TechCon 2018年度最佳技術(shù)創(chuàng)新獎(jiǎng)

    中國(guó)廣州,2018年10月10日,廣東高云半導(dǎo)體科技股份有限公司(以下簡(jiǎn)稱“高云半導(dǎo)體”)今日宣布,小蜜蜂家族GW1NS系列產(chǎn)品被提名入圍Arm TechCon 2018年度最佳技術(shù)創(chuàng)新獎(jiǎng)。
    的頭像 發(fā)表于 10-10 10:27 ?6276次閱讀

    鴻蒙上實(shí)現(xiàn)“數(shù)字華容道”小游戲

    本篇文章教大家如何在鴻蒙上實(shí)現(xiàn)“數(shù)字華容道”小游戲
    的頭像 發(fā)表于 12-26 09:52 ?1403次閱讀

    8位MCU市場(chǎng)中,飛來(lái)的這只“小蜜蜂”~

    8位MCU市場(chǎng)中,飛來(lái)的這只“小蜜蜂”~
    的頭像 發(fā)表于 10-26 15:44 ?875次閱讀
    8位MCU市場(chǎng)中,飛來(lái)的這只“<b class='flag-5'>小蜜蜂</b>”~

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品