国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

如何使用HTML 5 Canvas創(chuàng)建太空游戲

2024-04-27 14:59:20
字體:
供稿:網(wǎng)友

HTML5 Canvas 可以快速創(chuàng)建出有助于游戲開發(fā)的輕型圖片。 本部分說明如何使用 Canvas 創(chuàng)建將在網(wǎng)頁中運行的懷舊風(fēng)格外太空飛行游戲。 此游戲的設(shè)計主要是為了展示使用 Canvas 功能開發(fā) Web 游戲的基本原則。 此太空游戲的目標(biāo)是,使您的宇宙飛船穿過分布著爆炸小行星的星域,安全返回基地。

  本教程包含運行游戲的完整代碼。代碼是使用 HTML5 Canvas 和 javaScript 編寫的,包含四個獨立的有注釋代碼示例。 每個示例都涉及一項關(guān)鍵的編程任務(wù),這些任務(wù)是開發(fā)游戲的不同方面所必需的。 第四個代碼示例將所有任務(wù)組合在一起,創(chuàng)建了一個完整有效的游戲,您可以使用箭頭鍵移動飛船,穿越分布著爆炸紅色小行星的星域迷宮。 如果您的飛船撞到行星,則將被毀壞。 為了安全返回基地,您必須避開小行星,或在您撞上小行星之前將其炸毀。 將根據(jù)您移動飛船的次數(shù)和您發(fā)射的炸彈數(shù)來進行計分。

  本主題包括一個獨立的有注釋代碼示例,為您演示如何使用 HTML5 Canvas 和 Javascript 創(chuàng)建包含白色星星的隨機區(qū)域,以及繪制外形像飛盤一樣的橙綠相間的宇宙飛船。 此游戲圖像是使用像素創(chuàng)建的。 通過使用即時模式,Canvas 具有將像素直接放在屏幕上的能力。 此功能您能夠輕松地在需要的位置,以選擇的顏色繪制點、線和形狀。 此代碼示例將為您演示如何通過在形狀中組合數(shù)學(xué)貝塞爾曲線和顏色來創(chuàng)建宇宙飛船。 然后,它將說明如何使用由弧形組成的小圓圈來繪制星星。

  此代碼示例包含以下任務(wù)來演示使用Canvas 繪制這些游戲元素的基本原則:

  1.向網(wǎng)頁添加 Canvas 元素

  2.創(chuàng)建黑色背景

  3.在背景上繪制隨機星星

  4.向背景添加宇宙飛船

  代碼示例的末尾是討論材料,說明有關(guān)這些任務(wù)的設(shè)計和結(jié)構(gòu)以及工作方式的詳細(xì)信息。

 Canvas 代碼示例:

<!DOCTYPE html>
<html>

<head>
<script type="text/javascript">
//Thisfunctioniscalledonpage load.


functioncanvasSpaceGame() {

//Getthe canvas element.
canvas=document.getElementById("myCanvas");

//Make sure you got it.
if(canvas.getContext)

//Ifyou have it, create a canvas user inteface element.
{
//Specify 2d canvas type.
ctx=canvas.getContext("2d");

//Paint it black.
ctx.fillStyle="black";
ctx.rect(0,0,300,300);
ctx.fill();

//Paint the starfield.
stars();

//Drawspaceship.
makeShip();
}
}

//Paint a random starfield.


functionstars() {

//Draw50stars.
for(i=0; i<=50; i++) {
//Getrandom positionsforstars.
var x=Math.floor(Math.random()*299)
var y=Math.floor(Math.random()*299)

//Make the stars white
ctx.fillStyle="white";

//Give the ship some room.
if(x<30|| y<30) ctx.fillStyle="black";

//Draw an individual star.
ctx.beginPath();
ctx.arc(x, y,3,0, Math.PI*2,true);
ctx.closePath();
ctx.fill();
}
}

functionmakeShip() {

//Draw saucer bottom.
ctx.beginPath();
ctx.moveTo(28.4,16.9);
ctx.bezierCurveTo(28.4,19.7,22.9,22.0,16.0,22.0);
ctx.bezierCurveTo(9.1,22.0,3.6,19.7,3.6,16.9);
ctx.bezierCurveTo(3.6,14.1,9.1,11.8,16.0,11.8);
ctx.bezierCurveTo(22.9,11.8,28.4,14.1,28.4,16.9);
ctx.closePath();
ctx.fillStyle="rgb(222, 103, 0)";
ctx.fill();

//Draw saucer top.
ctx.beginPath();
ctx.moveTo(22.3,12.0);
ctx.bezierCurveTo(22.3,13.3,19.4,14.3,15.9,14.3);
ctx.bezierCurveTo(12.4,14.3,9.6,13.3,9.6,12.0);
ctx.bezierCurveTo(9.6,10.8,12.4,9.7,15.9,9.7);
ctx.bezierCurveTo(19.4,9.7,22.3,10.8,22.3,12.0);
ctx.closePath();
ctx.fillStyle="rgb(51, 190, 0)";
ctx.fill();
}
</script>
</head>

<body onload="canvasSpaceGame()">
<h1>
CanvasSpaceGame
</h1>
<canvas id="myCanvas"width="300"height="300">
</canvas>
</body>

</html>

Canvas 代碼示例討論

  本節(jié)說明本代碼示例的設(shè)計和結(jié)構(gòu)。 它為您講解代碼的不同部分,以及整合它們的方式。 Canvas 示例使用標(biāo)準(zhǔn) HTML5 標(biāo)頭 ,以便瀏覽器可以將它作為 HTML5 規(guī)格的一部分加以區(qū)別。

  代碼分成兩個主要部分:

  1.主體代碼

  2.腳本代碼

  主體代碼

  在頁面加載時,主體標(biāo)記使用 onload 函數(shù)調(diào)用 canvasSpaceGame 函數(shù)。 Canvas 標(biāo)記是主體的一部分。 指定了 Canvas 初始寬度和高度,還指定了 ID 屬性。 必須使用 ID,才能將 canvas 元素添加到頁面的對象模型中。

  腳本代碼

  腳本代碼包括三個函數(shù): canvasSpaceGame、stars 和 makeShip。 加載頁面時將調(diào)用 canvasSpaceGame 函數(shù)。 stars 和 makeShip 都是從 canvasSpaceGame 調(diào)用的。

  canvasSpaceGame 函數(shù)

  加載頁面時將調(diào)用此函數(shù)。 它通過在主體代碼中使用 Canvas 元素 ID 來獲取畫布, 然后獲取畫布的上下文,并準(zhǔn)備好接受繪圖。 將上下文初始化為 2D 畫布后,使用 fillStyle、rect 和 fill 方法將畫布繪制為黑色。

  stars 函數(shù)

  此函數(shù)是從 canvasSpaceGame 調(diào)用的。 它使用 for loop 在二維平面上生成 50 個潛在的星星位置,然后使用 fillStyle 創(chuàng)建白色。 隨后,會進行一項檢查,確認(rèn) x,y 坐標(biāo)是否與左上角過于靠近。 如果星星繪制得與左上角過于靠近,則會將 fillStyle 更改為黑色,使其不會妨礙宇宙飛船。 隨后,使用 arc 方法繪制每個星星并使用相應(yīng)的填充顏色。

  makeShip

  此函數(shù)是從 canvasSpaceGame 調(diào)用的。 使用一系列的 beginPath、moveTo、bezierCurveTo、closePath、fillStyle 和 fill 方法,繪制一個簡單的宇宙飛船。

  飛船是通過繪制兩個橢圓來創(chuàng)建的,一個橢圓在另一個的上面。 它首先在 Adobe Illustrator CS5 中繪制,然后使用 的 Ai2Canvas 插件將圖像導(dǎo)出到 Canvas。 生成的 Canvas 代碼已復(fù)制并粘貼到此示例的代碼中。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开原市| 凉山| 沁水县| 新巴尔虎左旗| 台北市| 青河县| 邛崃市| 习水县| 瑞金市| 琼中| 和平县| 广元市| 电白县| 柏乡县| 隆尧县| 皮山县| 游戏| 小金县| 阜康市| 通州市| 忻州市| 皋兰县| 台山市| 华安县| 天津市| 嘉兴市| 海口市| 遵化市| 镇平县| 沅陵县| 麻栗坡县| 岳西县| 淮北市| 荣成市| 马关县| 罗定市| 阿鲁科尔沁旗| 北辰区| 肇州县| 左贡县| 察隅县|