最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript HTML5 canvas實(shí)現(xiàn)打磚塊游戲

 更新時(shí)間:2020年06月18日 15:17:29   作者:liuming_music  
這篇文章主要介紹了基于javascript HTML5 canvas實(shí)現(xiàn)打磚塊游戲的具體實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例編寫的一個(gè)小游戲,基于HTML5中的canvas。游戲主要是小球反彈擊打小方塊。在代碼中主要實(shí)現(xiàn)了小方塊的生成,鍵盤鍵事件的監(jiān)聽,小球的移動(dòng)和碰壁之后的反彈以及怎樣消除小方塊等方法。代碼使用到了一個(gè)js腳本庫

游戲開發(fā)流程:

1、創(chuàng)建畫布:

將畫布放在div標(biāo)簽里面,這樣可以控制畫布居中的位置,再對(duì)div標(biāo)簽加上一些樣式比如border和border-radius,這樣一來使其看上去像手機(jī),利于觀看。

<div id="main">
 <!--將畫布嵌在div塊里面,使其可以居中-->
 <canvas id="liuming_canvas" width="300px" height="500px">
 </canvas>
</div>

2、創(chuàng)建移動(dòng)的小木塊:

定義一個(gè)可以用于移動(dòng)的小方塊,該移動(dòng)小方塊包含如下的屬性,坐標(biāo)位置,小方塊的長(zhǎng)和寬和小方塊每次移動(dòng)的距離。

var diamond = {
 x : 100, 
 y : 485,
 width : 100,
 height : 15,
 move : 10
}

3、創(chuàng)建用于擊打的小球:

定義一個(gè)用于移動(dòng)和擊打小方塊的小球,該小球包含如下的屬性,小球的做坐標(biāo)位置,半徑,在x軸和y軸的速度。其中x軸和y軸的速度是為小球計(jì)算移動(dòng)的方向和移動(dòng)之后的坐標(biāo)值。

var ball_impact = {
 x : 150,
 y : 465,
 r : 10,
 vx : 200,
 vy : 200
}

4、生成一系列的小方塊:

生成一系列的小方塊用于被小球擊打,小球的生成主要是根據(jù)畫布的大小和小方塊的坐標(biāo)與長(zhǎng)寬以及各個(gè)小方塊的x軸和y軸的間隔。

var diamond_impact = [];//定義存儲(chǔ)擊打小方塊的數(shù)組
diamond_impact.length = 0;
var width_span = 25; // 任意兩個(gè)小方塊的橫向間隔 
var height_span = 25; //任意兩個(gè)小方塊的水平間隔 
for(var i =1 ; i <=10 ; i++){//控制每行輸出的小方塊
 for(var j = 1 ; j < 10 ; j++){//輸出每列的小方塊 只有x軸和y軸的坐標(biāo)不一樣而已
 var diamond_impact_children = {
 x : width_span,
 y : height_span,
 width : 10,
 height : 10
 };
 width_span += 30;
 diamond_impact.push(diamond_impact_children); //將得到的小方塊放在 diamond_impact 中,已被以后使用
 }
 height_span += 25;
 width_span = 25;
}

5、編寫移動(dòng)小方塊的移動(dòng)方法:

移動(dòng)小方塊的實(shí)現(xiàn),首先需要監(jiān)聽獲得鍵盤的事件,之后再根據(jù)獲得的鍵盤事件來分別處理來向那個(gè)方向移動(dòng),在此處我分別定義了四個(gè)方向,目的是為了只在左右移動(dòng)可能不能完全消滅小方塊,
在移動(dòng)的過程之中還要判斷移動(dòng)小方塊的位置,以防止是否已經(jīng)出界。在此處我分別定義了四個(gè)方法來處理各個(gè)方向的移動(dòng)。

//鍵盤事件,獲取當(dāng)前在那個(gè)方向運(yùn)動(dòng)

var direction = "";
document.onkeydown = function (e) {
 if (e.keyCode == 37 ) direction = "left" ;
 if (e.keyCode == 39 ) direction = "right";
 if (e.keyCode == 38 ) direction = "up";
 if (e.keyCode == 40 ) direction = "down";
}
 
//定義四個(gè)方法來重繪制方塊的位置 分別有 左、右、上、下

function move_right_diamond(){
 clear_diamond();//清除以前的方塊
 init_canvas_background();//再次初始化畫布 下同
 //重新繪制小方塊的位置
 if(diamond.x + diamond.width >= canvas.width){ //判斷方塊是否已經(jīng)到達(dá)最右端
 cxt.fillStyle = "#17F705";
 cxt.fillRect(diamond.x,diamond.y,diamond.width,diamond.height);
 }else{
 diamond.x += diamond.move;
 cxt.fillStyle = "#17F705";
 cxt.fillRect(diamond.x,diamond.y,diamond.width,diamond.height);
 }
}
//其余方法類似 

6、編寫小球移動(dòng)的方法以及碰壁和接觸移動(dòng)小方塊反彈的方法:

反彈:小方塊的反彈,主要改變其x軸和y軸方向的速度,由于我們定義的是勻速運(yùn)動(dòng),為此我們只需要改變其速度的方向。
移動(dòng):根據(jù)小球的速度和指定的移動(dòng)大小來計(jì)算出新的小球坐標(biāo),之后再繪制新的小球。
反彈圖片實(shí)例:(對(duì)于觸碰墻壁反彈類似,就不多說)

小球移動(dòng)的代碼:

cxt.arc(ball_impact.x,ball_impact.y,ball_impact.r,0,Math.PI * 2,true);
cxt.closePath();
cxt.fill();
ball_impact.x += ball_impact.vx * cyc /1000;//改變其坐標(biāo)的位置
ball_impact.y += ball_impact.vy * cyc /1000;

7、小球擊打小方塊,小方塊消失的方法:

擊打:小球擊打小方框,主要判斷小球和小方塊的坐標(biāo)位置即可。注意此處將會(huì)分別判斷y軸和x軸將小球的擊打的小方塊限定在一個(gè)區(qū)域里面。
小時(shí):擊中當(dāng)前小方塊之后改變其長(zhǎng)寬,之后重繪小方塊即可,由于當(dāng)前的小方塊的長(zhǎng)寬都為0,即繪制之后的小方塊沒有。
圖解擊打的坐標(biāo)變化:

8、判斷游失敗和成功的方法:

失?。菏且∏虻牡舻阶畹投思葱∏虻腨坐標(biāo)大于畫布的Y坐標(biāo) 就是失敗;
成功:計(jì)數(shù)判斷是否消滅的小方塊數(shù)是否和指定的小方塊數(shù)相同。

if(ball_impact.y + ball_impact.r >= canvas.height){
 cxt.fillStyle = "#FC0000";
 cxt.font = "bold 50px 微軟雅黑";
 cxt.fillText("FAILURE!",30,250);
 diamond.move = 0;//不能移動(dòng)板塊
}

//判斷是否與所有的小方塊數(shù)相等
if(count_sum == 90){
 cxt.fillStyle = "#FCF205";
 cxt.font = "bold 50px 微軟雅黑";
 cxt.fillText("SUCCESS!",20,250);//在畫布上書寫SUCCESS 
 diamond.move = 0;//不能移動(dòng)板塊
 ball_impact.vx =0;
 ball_impact.vy =0;
else{
 count_sum = 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 詳解處理bootstrap4不支持遠(yuǎn)程靜態(tài)框問題

    詳解處理bootstrap4不支持遠(yuǎn)程靜態(tài)框問題

    這篇文章主要介紹了詳解處理bootstrap4不支持遠(yuǎn)程靜態(tài)框問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 分享11個(gè)常用JavaScript小技巧

    分享11個(gè)常用JavaScript小技巧

    在我們的日常開發(fā)過程中,我們經(jīng)常會(huì)遇到數(shù)字與字符串轉(zhuǎn)換,檢查對(duì)象中是否存在對(duì)應(yīng)值,條件性操作對(duì)象數(shù)據(jù),過濾數(shù)組中的錯(cuò)誤值,等等這類處理。本文整理出了一些常用的小技巧,希望大家能喜歡
    2022-06-06
  • js實(shí)現(xiàn)翻牌小游戲

    js實(shí)現(xiàn)翻牌小游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)翻牌小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • JavaScript中內(nèi)存泄漏的幾種情況總結(jié)

    JavaScript中內(nèi)存泄漏的幾種情況總結(jié)

    在JavaScript中,內(nèi)存泄漏通常是由于變量、對(duì)象、閉包、事件監(jiān)聽器等長(zhǎng)期存在而沒有被釋放引起的。本文就來和大家總結(jié)一下常見的幾種情況以及解決方法吧
    2023-05-05
  • JS輸出空格的簡(jiǎn)單實(shí)現(xiàn)方法

    JS輸出空格的簡(jiǎn)單實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狫S輸出空格的簡(jiǎn)單實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • 通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼

    通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼

    通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼,需要的朋友可以參考下
    2012-05-05
  • SVG動(dòng)畫vivus.js庫使用小結(jié)(實(shí)例代碼)

    SVG動(dòng)畫vivus.js庫使用小結(jié)(實(shí)例代碼)

    本文通過代碼給大家介紹SVG動(dòng)畫vivus.js庫使用小結(jié),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-09-09
  • 詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實(shí)現(xiàn)

    詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實(shí)現(xiàn)

    這篇文章主要介紹了詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 用Javascript來生成ftp腳本的小例子

    用Javascript來生成ftp腳本的小例子

    昨天閑著沒事,又因?yàn)楣ぷ餍枰?,寫了一個(gè)腳本,用來做ftp。當(dāng)然不是直接做ftp,而是產(chǎn)生一個(gè)ftp的腳本,供ftp命令使用。
    2013-07-07
  • JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    在我們做業(yè)務(wù)開發(fā)的漫長(zhǎng)歲月里,會(huì)多次跟時(shí)間打交道,相信大多數(shù)小伙伴對(duì)日期格式化也并不陌生,本文簡(jiǎn)單記錄了JavaScript實(shí)現(xiàn)日期格式化的過程,以及一些拓展,希望對(duì)大家有所幫助
    2023-05-05

最新評(píng)論

应城市| 萨嘎县| 玛曲县| 普陀区| 乌什县| 宜宾县| 玉门市| 会同县| 元朗区| 化德县| 连城县| 博兴县| 兴业县| 舒城县| 汾阳市| 沈阳市| 凤台县| 仙居县| 临颍县| 沾化县| 安庆市| 万全县| 隆林| 峨山| 蓝田县| 弥勒县| 苍山县| 呼玛县| 霍山县| 明水县| 昌宁县| 淄博市| 集贤县| 明星| 武功县| 华蓥市| 抚顺市| 宾川县| 肇庆市| 宝清县| 清远市|