自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HTML 5游戲制作之五彩連珠(畫(huà)圖)

開(kāi)發(fā) 前端
棋盤(pán)起始的位置我也做了調(diào)整,只要修改起始的x y值,棋盤(pán)就會(huì)在這個(gè)點(diǎn)開(kāi)始畫(huà)。那,現(xiàn)在我們要在第五行,第六列畫(huà)一個(gè)黃色的球,該怎么畫(huà)呢?只需要給map增加一個(gè)方法,再調(diào)用這個(gè)方法就行啦

好吧,新的一天來(lái)了,我才開(kāi)始動(dòng)筆,真夠懶得:)昨天說(shuō)了今天我們要畫(huà)一個(gè)球,在canvas上。好吧,這是游戲的入門(mén)的第一步,只是昨天沒(méi)寫(xiě)完,所以。。。

  1. <!DOCTYPE html>   
  2. <html xmlns="http://www.w3.org/1999/xhtml">   
  3. <head>   
  4.     <title></title>   
  5. </head>   
  6. <body>   
  7.     <canvas id="canvas" height="400" width="600" style="background: #fff;"></canvas>   
  8.     <script type="text/javascript">   
  9.         var canvas = document.getElementById("canvas");   
  10.         var ctx = canvas.getContext("2d");   
  11.         ctx.beginPath();   
  12.     
  13.         ctx.arc(110, 110, 40, 0, Math.PI * 2);   
  14.     
  15.         ctx.strokeStyle = "red";   
  16.         ctx.fillStyle = "yellow";   
  17.     
  18.         ctx.fill();   
  19.         ctx.stroke();   
  20.     
  21.     </script>   
  22. </body>   
  23. </html> 

上面的代碼是在VS11 beta上寫(xiě)的,實(shí)在是太舒服了,vs是非常強(qiáng)大的編輯器。上面的代碼中我們繪制了一個(gè)大大的圓,并且著色了,紅邊和黃心。
看下 arc (弧度)方法,昨天的文章里有他的鏈接地址,我在這里粘貼下。

The arc(x, y, radius, startAngle, endAngle, anticlockwise) method draws an arc. 

arc(x,y,弧度,開(kāi)始角度點(diǎn),結(jié)束角度點(diǎn), 順時(shí)針),角度點(diǎn)你可能不是很清楚如何表示,這里是用Math.PI 圓周率來(lái)表示 6.28是周長(zhǎng)。 想畫(huà)圓的一部分也就是一段弧線(xiàn),可以取開(kāi)始的角度點(diǎn)和結(jié)束的角度點(diǎn)。

那么下一步就是要把圓能夠畫(huà)到我們棋盤(pán)上。其實(shí),這個(gè)很簡(jiǎn)單,只要我們把x,y和radius的值調(diào)整下就會(huì)繪制出來(lái)。我把昨天代碼寫(xiě)的更“專(zhuān)業(yè)”了一點(diǎn)。所以,今天的代碼會(huì)在新的代碼基礎(chǔ)上增加了。先看下改動(dòng)過(guò)的代碼。

  1. var canvas = document.getElementById("canvas");   
  2. var ctx = canvas.getContext("2d");   
  3. var g = {   
  4.     cellCount: 9,   
  5.     lineCount: 5,   
  6. };   
  7.    
  8. var map = {   
  9.     startX: 20.5,   
  10.     startY: 60.5,   
  11.     cellWidth: 30,   
  12.     getEndX: function () {   
  13.         return g.cellCount * this.cellWidth + this.startX;   
  14.     },   
  15.     getEndY: function () {   
  16.         return g.cellCount * this.cellWidth + this.startY;   
  17.     },   
  18.     draw: function () {   
  19.         ctx.beginPath();   
  20.    
  21.         ctx.moveTo(this.startX, this.startY);   
  22.    
  23.         for (var i = 0; i <= g.cellCount; i++) {   
  24.    
  25.             var p1 = i * this.cellWidth + this.startX;   
  26.             ctx.moveTo(p1, this.startY);   
  27.             ctx.lineTo(p1, this.getEndY());   
  28.    
  29.             var p2 = i * this.cellWidth + this.startY;   
  30.             ctx.moveTo(this.startX, p2);   
  31.             ctx.lineTo(this.getEndX(), p2);   
  32.    
  33.         }   
  34.         ctx.strokeStyle = "#456";   
  35.         ctx.stroke();   
  36.     },   
  37.    
  38. };   
  39.    
  40. map.draw(); 

是吧,更專(zhuān)業(yè)了吧,這樣就不會(huì)定義一坨的function,到時(shí)候沒(méi)出找,而是定義在一個(gè)對(duì)象里,這種封裝也能避免命名沖突。而且,棋盤(pán)起始的位置我也做了調(diào)整,只要修改起始的x y值,棋盤(pán)就會(huì)在這個(gè)點(diǎn)開(kāi)始畫(huà)。那,現(xiàn)在我們要在第五行,第六列畫(huà)一個(gè)黃色的球,該怎么畫(huà)呢?只需要給map增加一個(gè)方法,再調(diào)用這個(gè)方法就行啦

  1. drawBubble: function (x, y) {   
  2.     var px = this.startX + this.cellWidth * x - this.cellWidth / 2;   
  3.     var py = this.startY + this.cellWidth * y - this.cellWidth / 2;   
  4.     ctx.beginPath();   
  5.     ctx.arc(px, py, 12, 0, Math.PI * 2);   
  6.     ctx.strokeStyle = "white";   
  7.     ctx.fillStyle = "yellow";   
  8.     ctx.fill();   
  9.     ctx.stroke();   
  10. }, 

畫(huà)出來(lái)刷新下,居然是第六行,第五列,我們搞錯(cuò)了嗎?代碼沒(méi)有,只是我們誤認(rèn)為x是行y是列 按順序叫順口了,其實(shí)是反過(guò)來(lái)的:)

泡泡既然能畫(huà)出來(lái),也要能清除才是,不然沒(méi)法玩,所以再增加一個(gè)清除泡泡的方法。

  1. clearBubble: function (x, y) {   
  2.     var px = this.startX + this.cellWidth * x - this.cellWidth + 0.5;   
  3.     var py = this.startY + this.cellWidth * y - this.cellWidth + 0.5;   
  4.     ctx.beginPath();   
  5.     ctx.clearRect(px, py, this.cellWidth - 1, this.cellWidth - 1);   
  6.     ctx.stroke();   

ok,是不是很霸氣? o(∩_∩)o 哈哈,不過(guò)在獲取泡泡的位置時(shí)是不是很糾結(jié),為什么畫(huà)泡泡是 width/2 而擦除要加0.5? 

畫(huà)圓是從中心點(diǎn)開(kāi)始畫(huà),所以要去掉半徑,而擦數(shù)不能擦掉我們的棋盤(pán)線(xiàn),所以要偏移0.5 。

原文鏈接:http://www.cnblogs.com/mad/archive/2012/03/11/2390281.html

【編輯推薦】

  1. HTML 5游戲制作之五彩連珠(預(yù)覽)
  2. HTML 5游戲制作之五彩連珠(設(shè)計(jì))
  3. HTML 5游戲制作之五彩連珠(動(dòng)畫(huà))
  4. HTML 5游戲制作之五彩連珠(尋路)
  5. HTML 5游戲制作之五彩連珠(試玩)

 

責(zé)任編輯:張偉 來(lái)源: 君之蘭的博客
相關(guān)推薦

2012-05-18 14:05:53

HTML5

2012-05-18 13:11:09

HTML5

2012-05-18 13:07:04

HTML5

2012-05-17 13:45:35

HTML5

2012-05-18 13:59:45

HTML5

2011-11-30 15:14:32

HTML 5

2010-08-12 22:35:24

IBM培訓(xùn)

2019-09-11 15:20:21

華為

2012-06-07 15:29:31

HTML5

2021-03-26 07:06:40

Windows 10Windows操作系統(tǒng)

2012-05-15 13:57:41

HTML5

2012-01-10 16:37:46

樂(lè)團(tuán)

2012-03-29 09:18:47

HTML5WEB

2020-04-22 10:01:26

Vim編輯器代碼

2013-08-27 14:20:09

游戲應(yīng)用圖標(biāo)ASO應(yīng)用商店優(yōu)化

2019-09-12 10:10:10

Vim編輯器代碼

2012-05-30 13:49:52

HTML5

2014-12-30 17:13:51

HTML5

2011-12-16 11:11:36

HTML 5

2012-05-15 10:35:35

HTML5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)