国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

蘑菇與熊游戲開發第七回(熊碰到獎品處理)

開發 前端 游戲開發
給獎品加上一個存是否被撞過的屬性hit,默認值為false。當獎品撞到的時候。改變hit的值為true。描繪獎品的時候判斷hit值是否有沒撞到,被撞到的話就不描繪。

第七回主要講熊撞到獎品之后,獎品消失

預期達到的效果:http://www.html5china.com/html5games/mogu/index6.html

簡單說下原理:

給獎品加上一個存是否被撞過的屬性hit,默認值為false。當獎品撞到的時候。改變hit的值為true。描繪獎品的時候判斷hit值是否有沒撞到,被撞到的話就不描繪

一、給獎品加hit屬性

  1. //定義獎品數組Prizes和對象Prize,繼承游戲對象GameObject      
  2. var prizes = new Array();      
  3. function Prize() {};      
  4. Prize.prototype = new GameObject();//繼承游戲對象GameObject      
  5. Prize.prototype.row = 0;//獎品行位置      
  6. Prize.prototype.col = 0;//獎品列位置      
  7. Prize.prototype.hit = false;//是否被撞過    

二、熊撞到獎品事件

  1. //撞到獎品      
  2. function HasAnimalHitPrize()      
  3. {      
  4.     //取出所有獎品      
  5.     for(var x=0; x<prizes.length; x++)      
  6.     {      
  7.         var prize = prizes[x];      
  8.         //假如沒有碰撞過      
  9.         if(!prize.hit)      
  10.         {      
  11.             //判斷碰撞      
  12.             if(CheckIntersect(prize, animal, 0))      
  13.             {      
  14.                 prize.hit = true;      
  15.                 //熊反彈下沉      
  16.                 verticalSpeed = speed;      
  17.             }      
  18.         }      
  19.     }      
  20. }    

三、在描繪獎品函數中加如判斷是否有被碰撞 if(!prize.hit) ,沒被撞過,則描繪出來

  1. //撞到獎品      
  2. function HasAnimalHitPrize()      
  3. {      
  4.     //取出所有獎品      
  5.     for(var x=0; x<prizes.length; x++)      
  6.     {      
  7.         var prize = prizes[x];      
  8.         //假如沒有碰撞過,則描繪在畫布上      
  9.         if(!prize.hit)      
  10.         {      
  11.             //判斷碰撞      
  12.             if(CheckIntersect(prize, animal, 0))      
  13.             {      
  14.                 prize.hit = true;      
  15.                 //熊反彈下沉      
  16.                 verticalSpeed = speed;      
  17.             }      
  18.         }      
  19.     }      
  20. }    

#p#

到此第七回的完整代碼如下:

 

  1. <!DOCTYPE>        
  2. <html>        
  3. <head>        
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        
  5. <title>繪制獎品-html5中文網</title>        
  6. <!-- 要記得引用jquery-1.4.2.js -->     
  7. <script type="text/javascript" src="./js/jquery-1.4.2.js"></script>        
  8. <script type="text/javascript" >        
  9.     //全局變量         
  10.     var backgroundForestImg = new Image();//森林背景圖         
  11.     var mushroomImg = new Image();//蘑菇       
  12.     var bearEyesClosedImg = new Image();//閉著眼睛的熊熊       
  13.     var ctx;//2d畫布         
  14.     var screenWidth;//畫布寬度         
  15.     var screenHeight;//畫布高度       
  16.     var speed = 2;//不變常量,從新開始的速度        
  17.     var horizontalSpeed = speed;//水平速度,隨著熊的碰撞會發生改變      
  18.     var verticalSpeed = -speed; //垂直速度,開始肯定是要向上飄,所以要負數,隨著熊的碰撞會發生改變      
  19.     var bearAngle = 2;//熊旋轉的速度      
  20.     var flowerImg = new Image();//獎品鮮花      
  21.     var leafImg = new Image();//獎品葉子      
  22.     var acornImg = new Image();//獎品橡子      
  23.      
  24.     //公用 定義一個游戲物體戲對象         
  25.     function GameObject()         
  26.     {         
  27.         this.x = 0;         
  28.         this.y = 0;         
  29.         this.image = null;         
  30.     }         
  31.              
  32.     //定義蘑菇Mushroom 繼承游戲對象GameObject         
  33.     function Mushroom() {};         
  34.     Mushroom.prototype = new GameObject();//游戲對象GameObject         
  35.     //蘑菇實例         
  36.     var mushroom = new Mushroom();        //循環描繪物體        
  37.            
  38.     //定義動物熊 Animal 繼承 游戲對象GameObject      
  39.     function Animal() {};      
  40.     Animal.prototype = new GameObject();//游戲對象GameObject      
  41.     Animal.prototype.angle = 0;//動物的角度,目前中(即作為動物它在屏幕上旋轉退回)      
  42.     //定義熊實例       
  43.     var animal = new Animal();      
  44.           
  45.     //定義獎品數組Prizes和對象Prize,繼承游戲對象GameObject      
  46.     var prizes = new Array();      
  47.     function Prize() {};      
  48.     Prize.prototype = new GameObject();//繼承游戲對象GameObject      
  49.     Prize.prototype.row = 0;//獎品行位置      
  50.     Prize.prototype.col = 0;//獎品列位置      
  51.     Prize.prototype.hit = false;//是否被撞過      
  52.           
  53.     function GameLoop()         
  54.     {         
  55.         //清除屏幕         
  56.         ctx.clearRect(0, 0, screenWidth, screenHeight);         
  57.         ctx.save();         
  58.         //繪制背景         
  59.         ctx.drawImage(backgroundForestImg, 0, 0);         
  60.         //繪制蘑菇         
  61.         ctx.drawImage(mushroom.image, mushroom.x, mushroom.y);       
  62.         //繪制獎品      
  63.         DrawPrizes();             
  64.         //繪制熊      
  65.         //改變移動動物X和Y位置      
  66.         animal.x += horizontalSpeed;      
  67.         animal.y += verticalSpeed;      
  68.         //改變翻滾角度      
  69.         animal.angle += bearAngle;      
  70.         //以當前熊的中心位置為基準      
  71.         ctx.translate(animal.x + (animal.image.width/2), animal.y + (animal.image.height/2));      
  72.         //根據當前熊的角度輪換      
  73.         ctx.rotate(animal.angle * Math.PI/180);      
  74.         //描繪熊      
  75.         ctx.drawImage(animal.image, - (animal.image.width/2), - (animal.image.height/2));      
  76.      
  77.         ctx.restore();      
  78.         //檢測是否碰到邊界      
  79.         HasAnimalHitEdge();      
  80.         //檢測熊碰撞蘑菇      
  81.         HasAnimalHitMushroom();      
  82.         //檢測熊碰撞獎品      
  83.         HasAnimalHitPrize();      
  84.         }         
  85.     //加載圖片         
  86.     function LoadImages()         
  87.     {         
  88.         mushroomImg.src = "images/mushroom.png";//蘑菇         
  89.         backgroundForestImg.src = "images/forest1.jpg";//森林背景圖        
  90.         bearEyesClosedImg.src = "images/bear_eyesclosed.png";//閉著眼睛的      
  91.         flowerImg.src = "images/flower.png";//獎品花      
  92.         acornImg.src = "images/acorn.png";//獎品橡子      
  93.         leafImg.src = "images/leaf.png";//獎品葉子      
  94.               
  95.         mushroom.image = mushroomImg;         
  96.         animal.image = bearEyesClosedImg;      
  97.     }       
  98.     //熊碰撞邊界      
  99.     function HasAnimalHitEdge()      
  100.     {      
  101.         //熊碰到右邊邊界      
  102.         if(animal.x>screenWidth - animal.image.width)      
  103.         {      
  104.             if(horizontalSpeed > 0)//假如向右移動      
  105.                 horizontalSpeed =-horizontalSpeed;//改變水平速度方向      
  106.         }      
  107.         //熊碰到左邊邊界      
  108.         if(animal.x<-10)      
  109.         {      
  110.             if(horizontalSpeed < 0)//假如向左移動      
  111.                 horizontalSpeed = -horizontalSpeed;//改變水平速度方向      
  112.         }      
  113.         //熊碰到下面邊界      
  114.         if(animal.y>screenHeight - animal.image.height)      
  115.         {      
  116.             //2秒鐘后從新開始      
  117.             setTimeout(function(){      
  118.                 horizontalSpeed = speed;      
  119.                 verticalSpeed = -speed;      
  120.                 animal.x = parseInt(screenWidth/2);      
  121.                 animal.y = parseInt(screenHeight/2);      
  122.                 GameLoop();      
  123.             }, 2000);      
  124.         }      
  125.         //熊碰到上邊邊界      
  126.         if(animal.y<0)      
  127.         {      
  128.             verticalSpeed = -verticalSpeed;      
  129.         }      
  130.     }      
  131.     //事件處理         
  132.     function AddEventHandlers()         
  133.     {         
  134.         //鼠標移動則蘑菇跟著移動         
  135.         $("#container").mousemove(function(e){         
  136.             mushroom.x = e.pageX - (mushroom.image.width/2);         
  137.         });          
  138.                  
  139.     }       
  140.     //檢測2個物體是否碰撞      
  141.     function CheckIntersect(object1, object2, overlap)      
  142.     {      
  143.         //    x-軸                      x-軸      
  144.         //  A1------>B1 C1              A2------>B2 C2      
  145.         //  +--------+   ^              +--------+   ^      
  146.         //  | object1|   | y-軸         | object2|   | y-軸      
  147.         //  |        |   |              |        |   |      
  148.         //  +--------+  D1              +--------+  D2      
  149.         //      
  150.         //overlap是重疊的區域值      
  151.         A1 = object1.x + overlap;      
  152.         B1 = object1.x + object1.image.width - overlap;      
  153.         C1 = object1.y + overlap;      
  154.         D1 = object1.y + object1.image.height - overlap;      
  155.            
  156.         A2 = object2.x + overlap;      
  157.         B2 = object2.x + object2.image.width - overlap;      
  158.         C2 = object2.y + overlap;      
  159.         D2 = object2.y + object2.image.width - overlap;      
  160.            
  161.         //假如他們在x-軸重疊      
  162.         if(A1 > A2 && A1 < B2     
  163.            || B1 > A2 && B1 < B2)      
  164.         {      
  165.             //判斷y-軸重疊      
  166.             if(C1 > C2 && C1 < D1     
  167.            || D1 > C2 && D1 < D2)      
  168.             {      
  169.                 //碰撞      
  170.                 return true;      
  171.             }      
  172.            
  173.         }      
  174.         return false;      
  175.     }      
  176.     //動物碰撞蘑菇      
  177.     function HasAnimalHitMushroom()      
  178.     {      
  179.         //假如碰撞      
  180.         if(CheckIntersect(animal, mushroom, 5))      
  181.         {      
  182.             //假如碰撞的位置屬于蘑菇的左下位置      
  183.             if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.25))      
  184.             {      
  185.                 horizontalSpeed = -speed;//反彈      
  186.             }      
  187.             //假如碰撞的位置屬于蘑菇的左上位置      
  188.             else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.5))      
  189.             {      
  190.                 //反彈速度減半      
  191.                 horizontalSpeed = -speed/2;      
  192.             }      
  193.             //假如碰撞的位置屬于蘑菇的右上位置      
  194.             else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.75))      
  195.             {      
  196.                 horizontalSpeed = speed/2;      
  197.             }      
  198.             else      
  199.             {      
  200.                 horizontalSpeed = speed;      
  201.             }      
  202.             verticalSpeed = -speed;//改變垂直速度。也即動物向上移動      
  203.            
  204.         }      
  205.     }      
  206.     //創建獎品數組      
  207.     function InitPrizes()      
  208.     {      
  209.         var count=0;      
  210.         //一共3行      
  211.         for(var x=0; x<3; x++)      
  212.         {      
  213.             //一共23列      
  214.             for(var y=0; y<23; y++)      
  215.             {      
  216.                 prize = new Prize();      
  217.                 if(x==0)      
  218.                     prize.image = flowerImg;//鮮花放在***行      
  219.                 if(x==1)      
  220.                     prize.image = acornImg;//豫子剛在第2行      
  221.                 if(x==2)      
  222.                     prize.image = leafImg;//葉子放在第3行      
  223.                           
  224.                 prize.row = x;      
  225.                 prize.col = y;      
  226.                 prize.x = 20 * prize.col + 10;//x軸位置      
  227.                 prize.y = 30 * prize.row + 20;//y軸位置      
  228.                 //裝入獎品數組,用來描繪      
  229.                 prizes[count] = prize;      
  230.                 count++;      
  231.             }      
  232.         }      
  233.     }      
  234.     //繪制獎品,把獎品顯示在畫布上      
  235.     function DrawPrizes()      
  236.     {      
  237.         for(var x=0; x<prizes.length; x++)      
  238.         {      
  239.             currentPrize = prizes[x];                 
  240.             //假如沒有被撞擊,則描繪      
  241.             if(!currentPrize.hit)      
  242.             {      
  243.                 ctx.drawImage(currentPrize.image, prizes[x].x, prizes[x].y);      
  244.             }      
  245.         }      
  246.     }      
  247.     //撞到獎品      
  248.     function HasAnimalHitPrize()      
  249.     {      
  250.         //取出所有獎品      
  251.         for(var x=0; x<prizes.length; x++)      
  252.         {      
  253.             var prize = prizes[x];      
  254.             //假如沒有碰撞過,則描繪在畫布上      
  255.             if(!prize.hit)      
  256.             {      
  257.                 //判斷碰撞      
  258.                 if(CheckIntersect(prize, animal, 0))      
  259.                 {      
  260.                     prize.hit = true;      
  261.                     //熊反彈下沉      
  262.                     verticalSpeed = speed;      
  263.                 }      
  264.             }      
  265.         }      
  266.     }      
  267.     //初始化         
  268.     $(window).ready(function(){          
  269.         AddEventHandlers();//添加事件        
  270.         LoadImages();                 
  271.         ctx = document.getElementById('canvas').getContext('2d'); //獲取2d畫布            
  272.         screenWidth = parseInt($("#canvas").attr("width")); //畫布寬度       
  273.         screenHeight = parseInt($("#canvas").attr("height"));         
  274.         //初始化蘑菇      
  275.         mushroom.x = parseInt(screenWidth/2);// 蘑菇X坐標        
  276.         mushroom.y = screenHeight - 40;//蘑菇Y坐標         
  277.         //初始化熊      
  278.         animal.x = parseInt(screenWidth/2);      
  279.         animal.y = parseInt(screenHeight/2);       
  280.         //初始化獎品      
  281.         InitPrizes();      
  282.         setInterval(GameLoop, 10);         
  283.     });         
  284.        
  285.         
  286. </script>        
  287. </head>        
  288.         
  289. <body>        
  290.     <div id="container" style="border:1px solid; cursor:none; width:480px; height:320px;">        
  291.         <canvas id="canvas" width="480" height="320" >       
  292.         瀏覽器不支持html5,<a target="_blank" href="http://www.html5china.com/help/browser.html">請下載</a>支持html5的瀏覽器來觀看       
  293.         </canvas>        
  294.     </div>        
  295.        </body>        
  296. </html>       

第七回講完,整個游戲功能的大概框架已經出來了,成功就在眼前~

后面我們的任務就是去完善這個簡陋的游戲,比如說加開始按鈕、熊的生命數、顯示得分、獎品被碰到后旋轉再消失、蘑菇被碰到后顫抖幾下、音樂等等

講到這了,相信大家已經對整個游戲的功能、流程差不多了解了。后面的回合就不講那么詳細了,浪費大家的時間是吧~

第八回,開始完善游戲,加開始按鈕、生命數、現實得分

原味鏈接:http://www.html5china.com/course/20110101_1499.html

【編輯推薦】

  1. 蘑菇與熊游戲開發***回(游戲分析)
  2. 蘑菇與熊游戲開發第二回(讓蘑菇動起來)
  3. 蘑菇與熊游戲開發第三回(讓熊動起來)
  4. 蘑菇與熊游戲開發第四回(熊碰撞邊界處理)
  5. 蘑菇與熊游戲開發第五回(熊碰撞蘑菇處理)
  6. 蘑菇與熊游戲開發第六回(繪制獎品)
  7. 蘑菇與熊游戲開發第八回(完善游戲)

 

責任編輯:張偉 來源: HTML5China
相關推薦

2012-05-21 13:18:12

HTML5

2012-05-21 13:11:51

HTML5

2012-05-21 13:25:49

HTML5

2012-05-21 10:53:30

HTML5

2012-05-21 14:08:21

HTML5

2012-05-21 10:40:13

HTML5

2012-05-21 10:45:30

HTML5

2020-07-09 10:18:00

人工智能

2021-03-13 13:59:49

Python編碼回測

2020-12-07 16:20:53

Python 開發編程語言

2012-11-05 10:48:14

敏捷測試軟件測試

2020-03-31 19:22:04

微信實名制小游戲

2018-02-24 15:48:53

2017-07-04 15:32:28

周年慶極速狂奔小米手機

2011-05-31 13:18:14

51CTO 熊平 新

2013-10-31 11:03:02

2013年度IT博客大熊子川

2017-04-11 10:27:10

2015-11-17 11:15:23

2020-11-25 08:24:13

人臉識別
點贊
收藏

51CTO技術棧公眾號

日韩美女毛茸茸| 99在线视频免费观看| 9191在线播放| 亚洲精品欧美二区三区中文字幕| 日本特级黄色大片| 鲁大师成人一区二区三区| 成人妇女淫片aaaa视频| 欧美黑人巨大videos精品| 在线色欧美三级视频| 久久精品女人天堂av免费观看| 日韩亚洲欧美一区| 国产超级va在线视频| 一本大道久久a久久综合| 天海翼一区二区三区四区在线观看 | 精品国产在天天线2019| 成a人v在线播放| 色综合天天性综合| 国产三级在线看| 欧美日韩精品三区| 超碰在线免费公开| 亚洲精品一区二区三区福利| 欧洲性视频在线播放| 亚洲国产精品网站| 日韩天堂在线| xxx欧美精品| 成人免费在线电影网| 国产91对白在线播放| 欧美色图一区| 99伊人久久| 免费日韩一区二区| 潘金莲一级淫片aaaaaa播放1| 高清不卡在线观看| 性生活免费在线观看| 亚洲综合在线免费观看| 国产在线黄色| 精品国产乱码久久久久久牛牛| 精品3atv在线视频| 在线播放精品一区二区三区 | 国产精品普通话对白| 国产精品高清网站| av软件在线观看| 欧美一区二区三级| 美女视频在线免费| 日韩网站在线观看| 曰本一区二区三区视频| 99久久99| 国产综合一区二区| 少妇性l交大片| 精品一区二区三区免费毛片爱| 欧美成人自拍| 免费国产一区| 欧美亚洲丝袜| 久久久久久穴| 黄网站免费观看| 日韩在线免费av| 66精品视频在线观看| 精品久久sese| 欧美日韩高清影院| 韩国av一区二区| 中文字幕欧美人与畜| 在线精品国精品国产尤物884a| 国外成人福利视频| 18禁裸男晨勃露j毛免费观看| 视频一区中文字幕国产| 精品中文字幕乱| 亚洲国产天堂| 精品中文字幕视频| 成人97精品毛片免费看| 欧美一区二区日韩一区二区| 国产在线观看91| 正在播放一区二区| 亚洲日本视频在线| 欧美成人免费全部| 超碰在线成人| 日韩国产精品一区二区| 黑人精品xxx一区一二区| 伊人成综合网yiren22| 国产又大又黄又猛| 欧美激情一区二区三区在线视频观看 | 日韩亚洲一区在线| 中国动漫在线观看完整版免费| 美女性感视频久久久 | 欧美色图一区二区三区| 亚洲妇女成熟| 亚洲风情亚aⅴ在线发布| 国产香蕉在线| 亚洲免费av片| 欧美三级电影网址| 成人免费看黄网站| 秋霞午夜av一区二区三区| 日本中文字幕视频| 国产精品日韩专区| 国产乱码精品一区二区三区忘忧草 | 欧美性video| 欧美大肚乱孕交hd孕妇| 综合亚洲视频| 久久9精品区-无套内射无码| 欧美日韩一区二区三区不卡| 在线欧美三级| 日本免费黄色小视频| 欧美精品久久一区二区| 亚洲欧美国产毛片在线| 亚洲看片免费| 精品一区二区三区中文字幕| 在线观看一区日韩| 视频一区在线播放| 日韩一级淫片| 北岛玲一区二区三区| 91精品国产毛片武则天| 国内精品模特av私拍在线观看| 在线免费观看一区| 国产精品1区2区3区在线观看| 国产精品国内免费一区二区三区| 毛片网站在线看| h动漫在线视频| 日韩极品视频在线观看| 国产精品美女www爽爽爽视频| 国产婷婷成人久久av免费高清| 精品久久久久久国产91| 国产乱码精品一品二品| 美女高潮在线观看| 日本天堂在线观看| 中文字幕在线免费观看| 亚洲最新免费视频| 99在线观看| 国产精品入口尤物| 久久久久北条麻妃免费看| 亚洲高清一二三区| 日韩一区二区免费高清| 国产网站一区二区| 最新亚洲精品| 精品一区二区三区四区五区| 亚洲一区站长工具| 国产粉嫩在线观看| av美女在线观看| 男人的天堂在线免费视频| 亚洲欧洲www| 中文幕一区二区三区久久蜜桃| 亚洲日本久久| 欧美日韩一区二区三区四区在线观看| 亚洲va在线| 日韩福利视频导航| 不卡av电影在线播放| 国产伦精品一区二区三区在线观看| 韩日精品视频| 狂野欧美性猛交xxxx巴西| 久久av一区二区三区| 国产一区亚洲一区| 欧美在线精品一区| 国产亚洲在线| 成人动漫一区二区在线| 国产亚洲精品aa| 国产jizzjizz一区二区| 国产精品久久久久天堂| 久久欧美一区二区| 国产成a人无v码亚洲福利| 国产亚洲婷婷免费| 色美美综合视频| www.美女亚洲精品| 欧美最猛性xxxxx亚洲精品| 中文字幕一区日韩电影| 国语自产在线不卡| 国产精品视频成人| 蜜桃视频成人| 久久久久久欧美精品色一二三四 | 色国产在线视频| 爆操欧美美女| 欧美三级电影在线| 日韩高清中文字幕一区| 亚洲综合成人在线| 波霸ol色综合久久| 国产91视觉| 亚洲аv电影天堂网| 日韩久久免费av| 国产精品老牛影院在线观看| 日本一区二区三区免费看| 欧美色图另类小说| av在线中文| 999国产精品永久免费视频app| 国产黄色成人av| 精品国产乱码久久久久久久| 久久久亚洲影院| 女人床在线观看| 日本在线视频网| 欧美gay囗交囗交| 国内精品久久久久久久影视麻豆 | 本网站久久精品| 亚洲精品播放| 精品在线一区二区| 欧美无乱码久久久免费午夜一区| 日韩美女福利视频| 欧美不卡在线播放| 亚洲第一av| 国产成人av一区二区三区在线| 日韩成人久久久| 裸体裸乳免费看| 中文字幕毛片| 激情久久婷婷| 精品国产乱码久久久久久老虎| 欧美洲成人男女午夜视频|