上一篇,主要講了canvas提供的基本的Image API;
本篇我們使用canvas提供的Image Api及變換,來實現一些實例:小車的簡單運動、簡單遊戲地圖、圖像的平移縮放;
以下應用程式中所使用到的圖片:
圖片1:tanks--[32*32]*8--tanks.png | 圖片2:map--[32*32]*4--map.png |
#我們在Canvas上(50,50)的位置上顯示tanks的前1/8部分(第一個tank),如何做呢?我們用part of image api;
1 |
|
如果要讓目前的tank旋轉90度如何實現呢?
Canvas中旋轉操作不管是針對shape、text還是image都是一樣的;
首先,要把canvas的current state壓入堆疊:context.save();
然後啟動變換:context.setTransform(1,0,0,1,0 ,0);
我們要以tank自己為中心旋轉90度,所以,要把原點平移到tank的中心;
tank的位置(x,y)是(50,50),大小size(w,h)是(32,32);所以它的中心點為(x+w/2,y+h/2);
平移原點:context.translate(50 + 16, 50 + 16);
旋轉:context.rotate(90*Math.PI /180);
且記:本來是要在canvas的(50,50)位置繪製圖片,平移原點後,該位置座標就變成(-16,-16 );
繪製圖片:context.drawImage(tanks, 0, 0, 32, 32, -16, -16, 32, 32);
#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
輪子轉動動畫
#tanks一共有8個tank,每個圖片大小為(32,32);
如果我們要在(50,50)的位置上顯示第2個tank,如果要做呢?
第2個:context.drawImage(tanks, 32*(2-1), 0, 32, 32, -16, -16, 32, 32);
第3個:context.drawImage(tanks, 32*(3-1), 0, 32, 32, -16, -16, 32, 32);
#依序類別推,第8個:context.drawImage(tanks, 32*(8-1), 0, 32, 32, -16, -16, 32, 32);
每個tank圖片的不同之處,就在於其輪子部位,如果我們用定時器100ms來輪流顯示這1到8個tank圖片,就會看到一個tank輪子轉動動畫;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
tank的水平移動效果實現起來就易如反掌啦,只要每次改變每一幀動畫中, tank圖片的顯示的x位置就ok;
fcuntion drawScreen(){x=x+1;…………} 大家運行,看看效果! ! !
我們定義一個320*320大小的Canvas,用圖片map來繪製一個簡單的遊戲地圖;
圖片map共有四副小圖,皆是32*32:主背景、障礙、頂部底部磚塊、左邊右邊磚塊;
首先,我們把Canvas分成10*10的小格子,每個小格子的大小分別是32*32,剛好跟圖片大小相同;
然後我們來定義一個二維數組來存放每一個小格子所要顯示的圖片的索引;
再用一個二層循環繪製圖片,地圖出來了;
先看看效果圖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
再分享一個Image Api的應用:
#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
|
该代码中,有一个图片"pan.jpg",大家随便找一个比较大的图就可以;
快运行,看看效果吧!
以上是Html5 Canvas Image的圖文程式碼詳解(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!