首先,你要創(chuàng)建一個HTML頁面,其中包含如下canvas標(biāo)簽:
在巧家等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營銷推廣,外貿(mào)網(wǎng)站制作,巧家網(wǎng)站建設(shè)費用合理。
!doctype html
html
head
title/title
/head
body style=’position: absolute; padding:0; margin:0; height: 100%; width:100%’
canvas id=”gameCanvas”/canvas
/body
/html
如果你載入以上代碼,當(dāng)然什么也不會出現(xiàn)。那是因為雖然我們有一個canvas標(biāo)簽,但我們還沒在上面繪制任何東西。我們來添加一些簡單的canvas命令來繪制小箱子吧。
head
title/title
script type=’text/javascript’
var canvas = null;
function onload() {
canvas = document.getElementById(‘gameCanvas’);
var ctx = canvas.getContext(“2d”);
ctx.fillStyle = ‘#000000′;
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = ‘#333333′;
ctx.fillRect(canvas.width / 3, canvas.height / 3, canvas.width / 3,
canvas.height / 3);
}
/script
/head
body onload=’onload()’ …
在這個例子中,我已經(jīng)在body標(biāo)簽中添加了一個onload事件,然后執(zhí)行功能獲得畫布元素,并繪制幾個箱子。非常簡單。
result 1(from webappers.com)
這個箱子不錯,但你會注意到,畫布沒有鋪滿整個瀏覽器窗口。為了解決這個問題,我們可以增加畫布的寬度和高度。我是指根據(jù)畫布所包含的文件元素的大小來靈活地調(diào)整畫布尺寸。
var canvas = null;
function onload() {
canvas = document.getElementById(‘gameCanvas’);
canvas.width = canvas.parentNode.clientWidth;
canvas.height = canvas.parentNode.clientHeight;
…
加載后,會看到畫布鋪滿整個屏幕了。太好了。
再進一步,如果瀏覽器窗口大小是由用戶調(diào)整的,還要重置畫布的尺寸。
var canvas = null;
function onload() {
canvas = document.getElementById(‘gameCanvas’);
resize();
}
function resize() {
canvas.width = canvas.parentNode.clientWidth;
canvas.height = canvas.parentNode.clientHeight;
var ctx = canvas.getContext(“2d”);
ctx.fillStyle = ‘#000000′;
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = ‘#333333′;
ctx.fillRect(canvas.width/3, canvas.height/3, canvas.width/3, canvas.height/3);
}
添加onresize命令到body標(biāo)簽。
body onresize=’resize()’ …
現(xiàn)在,如果你調(diào)整瀏覽器的大小,矩形應(yīng)該如下圖所示。
result 2(from webappers.com)
載入圖像
大部分游戲都需要動畫的子畫面,所以我來添加一些圖像吧。
首先,你需要圖像資源。因為我們要用javascript繪制它,所以我覺得先聲明圖像然后設(shè)置它的src屬性為你想載入的圖像的URL,比較合理。
var img = null;
function onload() {
…
img = new Image();
img.src = ‘simba.png’;
}
然后你可以通過添加這個到resize方法中來繪制圖像:
ctx.drawImage(img, canvas.width/2 – (img.width/2), canvas.height/2 – (img.height/2));
如果重新載入頁面后,在大部分情況下,會看到圖像出現(xiàn)了。不過我說的是大部分情況下,因為這取決于機器跑得有多快、瀏覽器是否已經(jīng)緩存了圖像。那是因為resize方法的調(diào)用時間介于開始載入圖像(設(shè)置它的src屬性)的時間到瀏覽器準(zhǔn)備好的時間之間。對于一兩張圖像,這個方法可能不錯,但當(dāng)?shù)挠螒蜷_始變大時,就必須等到所有圖像加載完才能執(zhí)行活動。
給圖像添加一個通知監(jiān)聽器,這樣當(dāng)圖像準(zhǔn)備就緒時就會收到回叫信號。我得重新整理一下,以下是更新過的代碼:
var canvas = null;
var img = null; var ctx = null;
var imageReady = false;
function onload() {
canvas = document.getElementById(‘gameCanvas’);
ctx = canvas.getContext(“2d”);
img = new Image();
img.src = ‘images/simba.png’;
img.onload = loaded();
resize();
}
function loaded() {
imageReady = true; redraw();
}
function resize() {
canvas.width = canvas.parentNode.clientWidth;
canvas.height = canvas.parentNode.clientHeight; redraw();
}
function redraw() {
ctx.fillStyle = ‘#000000′;
ctx.fillRect(0, 0, canvas.width, canvas.height);
if (imageReady)
ctx.drawImage(img, canvas.width/2 – (img.width/2), canvas.height/2 – (img.height/2));
}
結(jié)果應(yīng)該是:
這個圖像顯示了的6個奔跑幀。為了把這個子畫面做成動畫,必須每次繪制一個幀。
子畫面動畫
可以用drawImage命令的源參數(shù)繪制一個幀。事實上,是只繪制源圖像的一部分。所以為了繪制這唯一的第一幀,使用允許你指定源圖像中的矩形的drawImage的拓展版。因為的貓動畫是由6個96 x 96象素大小的幀組成的,可以添加:
ctx.drawImage(img, 0, 0, 96, 54, canvas.width/2 – 48, canvas.height/2 – 48, 96, 54);
這里的關(guān)鍵是起點(0, 0, 96, 54)。這限制被繪制圖像為貓動畫的第一幀。還設(shè)置根據(jù)單幀來居中,而不是包含所有6幀的整個圖像尺寸。
現(xiàn)在總算有點意思了。為了讓圖像動起來,我必須追蹤要繪制的幀,然后隨著時間推進幀數(shù)。為此,必須把靜止頁面做成隔時循環(huán)的頁面。
按照老方法來做。添加60幀每秒間隔計時器。為了保證只有圖像加載后才開始循環(huán)動畫,要在loaded功能中添加以下命令:
function loaded() {
imageReady = true;
setTimeout( update, 1000 / 60 );
}
添加更新后的函數(shù),然后調(diào)用redraw:
var frame = 0;
function update() {
redraw(); frame++;
if (frame = 6) frame = 0;
setTimeout( update, 1000 / 60 );
}
當(dāng)繪制后且?guī)七M完,計時器就會重置。
下一步,調(diào)整繪制圖像,使源窗口根據(jù)我們想要繪制的那一幀位置來移動(關(guān)鍵是給幀設(shè)置的源X位置,是幀乘上幀的大?。?。
function redraw() {
ctx.fillStyle = ‘#000000′;
ctx.fillRect(0, 0, canvas.width, canvas.height);
if (imageReady)
ctx.drawImage(img, frame*96, 0, 96, 54,
canvas.width/2 – 48, canvas.height/2 – 48, 96, 54);
}
源碼簡介 相關(guān)最新源碼
HTML5圍住神經(jīng)貓游戲網(wǎng)頁版是一款基于HTML5 canvas、egret_loader.js和jquery.min.js等技術(shù)制作的圍住神經(jīng)貓網(wǎng)頁版游戲源碼。
游戲玩法:
游戲隨機出現(xiàn)灰色圓點和橙色圓點,屏幕中央為一只扭動的神經(jīng)貓。游戲要求通過觸擊灰色圓點從而變成橙色,使橙色圓點將神經(jīng)貓四周全部包圍起來,進而使其不能再行移動即為勝利。
H5是HTML5的簡稱。HTML5是HTML最新的修訂版本,是一種超文本標(biāo)記語言。H5有兩大特點:首先,強化了 Web 網(wǎng)頁的表現(xiàn)性能。其次,追加了本地數(shù)據(jù)庫等 Web 應(yīng)用的功能。
H5頁面就是利用html5制作出來的頁面,尤其在微信中發(fā)展迅速,借由微信這個移動社交平臺,正在走進更多人的視野,比如從引爆朋友圈的H5小游戲《圍住神經(jīng)貓》,到顛覆傳統(tǒng)廣告的大眾點評H5專題頁《我們之間只有一個字》,各種H5游戲和專題頁紛紛嶄露頭角。
為活動推廣運營而打造的H5頁面是最常見的類型,形式多變,包括邀請函、賀卡、測試題等形式。與以往簡單的靜態(tài)廣告圖片傳播不同,如今的H5活動運營頁需要有更強的互動、更高質(zhì)量、更具話題性的設(shè)計來促成用戶分享傳播。
如果靜態(tài)的想實現(xiàn)的話,可以將foot做成一個庫文件,然后引用庫文件就可以啦。如果是jsp,則用link方法引入。