成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HTML5中canvas實(shí)現(xiàn)小球擊打小方塊游戲

dingda / 1005人閱讀

摘要:創(chuàng)建用于擊打的小球定義一個(gè)用于移動(dòng)和擊打小方塊的小球,該小球包含如下的屬性,小球的做坐標(biāo)位置,半徑,在軸和軸的速度。

源代碼:http://download.csdn.net/detail/liumingm...

游戲開發(fā)流程:

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

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

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;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79103.html

相關(guān)文章

  • HTML5canvas實(shí)現(xiàn)擊打方塊游戲

    摘要:創(chuàng)建用于擊打的小球定義一個(gè)用于移動(dòng)和擊打小方塊的小球,該小球包含如下的屬性,小球的做坐標(biāo)位置,半徑,在軸和軸的速度。 源代碼:http://download.csdn.net/detail/liumingm... 游戲開發(fā)流程: 1、創(chuàng)建畫布: 將畫布放在div標(biāo)簽里面,這樣可以控制畫布居中的位置,再對(duì)div標(biāo)簽加上一些樣式比如border和border-radius,這樣...

    余學(xué)文 評(píng)論0 收藏0
  • HTML5canvas實(shí)現(xiàn)擊打方塊游戲

    摘要:創(chuàng)建用于擊打的小球定義一個(gè)用于移動(dòng)和擊打小方塊的小球,該小球包含如下的屬性,小球的做坐標(biāo)位置,半徑,在軸和軸的速度。 源代碼:http://download.csdn.net/detail/liumingm... 游戲開發(fā)流程: 1、創(chuàng)建畫布: 將畫布放在div標(biāo)簽里面,這樣可以控制畫布居中的位置,再對(duì)div標(biāo)簽加上一些樣式比如border和border-radius,這樣...

    ityouknow 評(píng)論0 收藏0
  • js+canvas仿微信《彈一彈》游戲

    摘要:在彈一彈游戲中,小球不能向上發(fā)射。這里又有一個(gè)坑彈一彈游戲中,剛射擊出去的小球是不受重力影響的不然瞄準(zhǔn)還有什么意義。 前言 半年前用js和canvas仿了熱血傳奇網(wǎng)游(地址),基本功能寫完之后,剩下的都是堆數(shù)據(jù)、堆時(shí)間才能完成的任務(wù)了,沒什么新鮮感,因此進(jìn)度極慢。這次看到微信《彈一彈》比較火,因?yàn)樯婕暗轿锢硪妫榱苏鎸?shí)),于是動(dòng)手試了一下。一共用了10個(gè)小時(shí),不僅完成了這個(gè)demo,...

    Invoker 評(píng)論0 收藏0
  • 一步步實(shí)現(xiàn)nest粒子特效

    摘要:嘗試實(shí)現(xiàn)畫出一個(gè)彈射的小球很簡(jiǎn)單,那怎么用多個(gè)小球?qū)崿F(xiàn)這樣的效果呢。 本文首發(fā)于我的博客,這是我的github,歡迎star。 ??這篇博客是模仿nest.js實(shí)現(xiàn)一個(gè)demo,由簡(jiǎn)單到復(fù)雜,來一步步的實(shí)現(xiàn)它。這里是效果預(yù)覽。我的github里邊還有很多別的前端的demo,喜歡的話可以點(diǎn)個(gè)star,你的支持就是我的動(dòng)力。 從一道面試題開始 實(shí)現(xiàn)一個(gè)半徑10px的小球在500px*5...

    ky0ncheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<