婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 快速實現(xiàn)一個簡單的canvas迷宮游戲的示例

快速實現(xiàn)一個簡單的canvas迷宮游戲的示例

熱門標(biāo)簽:電銷機器人電話用什么卡 當(dāng)涂高德地圖標(biāo)注 黃島區(qū)地圖標(biāo)注 南寧點撥外呼系統(tǒng)哪家公司做的好 四川點撥外呼系統(tǒng) 成都智能外呼系統(tǒng)平臺 江蘇智能電銷機器人哪家好 云南大理400電話申請官方 鎮(zhèn)江智能外呼系統(tǒng)有效果嗎

前言

(最近設(shè)計模式看的有點頭大,一直面對純js實在是有些枯燥-_-。所以寫一點有趣的東西調(diào)劑一下)
現(xiàn)在canvas已經(jīng)不算新鮮了,不過由于日常業(yè)務(wù)中并不常用,所以實踐并不多,今天分享一下,如何實現(xiàn)簡單canvas迷宮。這個例子來源于《html5秘籍》第二版,代碼有稍微做了點調(diào)整。

由于中間有一步使用canvas獲取圖片信息的時候,必須使用服務(wù)器環(huán)境。所以我先寫了一個樣例扔在服務(wù)器上,大家可以先體驗一下效果(用成就感作為驅(qū)動力哈哈哈)

點我體驗

git地址

正文

實現(xiàn)這個小游戲也不難,讓我們想想,一個迷宮游戲有哪些基本要素。

首先當(dāng)然得有個地圖,然后得有個移動的小人,這兩個我們利用cavans來繪制;

接下來是物體移動的程序,這個程序主要包括2個方面:

1.讓物體跟我們指定的指令來移動;
2.檢測物體是否碰到墻體或者出口。

繪制迷宮的地圖和移動的小人
繪制地圖的主要步驟是:

  1. 獲取一張地圖的圖片
  2. 利用cavans繪制圖像。

迷宮地圖的生成,可以借助谷歌的一個迷宮在線生成器來獲得。

繪制小人也是一樣直接找一個小人的圖片即可,不過這里要注意的是,要找正方形的圖片,因為一會我們需要做移動的碰撞檢測,方形比較好判斷。

接下來就要寫繪制迷宮和小人的主要函數(shù)

function drawMaze(mazeFile, startingX, startingY) {
  var imgMaze = new Image()
  imgMaze.onload = function () {
    // 畫布大小調(diào)整
    canvas.width = imgMaze.width
    canvas.height = imgMaze.height

    // 繪制笑臉
    var imgFace = document.getElementById("face")
    context.drawImage(imgMaze, 0, 0)

    x = startingX
    y = startingY
    context.drawImage(imgFace, x, y)
    context.stroke()
  }
  imgMaze.src = mazeFile
}

mazeFile是迷宮的圖片地址,startingX和startingY,是起始點的坐標(biāo)。在這里圖片引入的方式用了2種,原因是小人的圖片我不經(jīng)常更換,就直接寫在頁面里,迷宮的地圖打算做成可變的,所以在js里引入,你想把圖片都直接用js引入也沒有問題。其他部分比較簡單,不再贅述。

移動函數(shù)

移動的主要原理是:

接受指定的用戶輸入(在這里是響應(yīng)方向鍵),轉(zhuǎn)換成對應(yīng)的移動指令。然后周期性的檢查移動指令,繪制對應(yīng)的目標(biāo)位置。舉個簡單的例子:

比如每按下一次方向鍵上,就記錄下應(yīng)該往上移動,然后每隔100毫秒檢查當(dāng)前的移動指令,繪制應(yīng)該移動的目標(biāo)地點,重復(fù)這個過程。代碼也比較簡單:

// 移動函數(shù)
function processKey(e) {
  dx = 0
  dy = 0
  // 上下左右方向鍵檢測
  if (e.keyCode === 38) {
    dy = -1
  }
  if (e.keyCode === 40) {
    dy = 1
  }
  if (e.keyCode === 37) {
    dx = -1
  }
  if (e.keyCode === 39) {
    dx = 1
  }
}

// 繪制幀
function drawFrame() {
  if (dx != 0 || dy != 0) {
    // context.clearRect(x,y,canvas.width,canvas.height)
    // 繪制移動軌跡
    context.beginPath();
    context.fillStyle = "rgb(254,244,207)"
    context.rect(x, y, 15, 15)
    context.fill()
    x += dx
    y += dy
    // 碰撞檢測
    if (checkForCollision()) {
      x -= dx
      y -= dy
      dx = 0
      dy = 0
    }
    
    //繪制小人應(yīng)該移動的地點
    var imgFace = document.getElementById('face')
    context.drawImage(imgFace, x, y)

    if (canvas.height - y < 17) {
      // isFirst = false
      alert('恭喜你通關(guān) 游戲結(jié)束')
      return false
    }
    // 這里如果重置的話變成非自動移動,也就是每按下一次方向鍵只前進一步,由于目前體驗不好所以先不做重置
    // dx = 0
    // dy = 0
  }
  setTimeout(drawFrame, 20)
}

上述代碼中,移動函數(shù)比較簡單,繪制幀的函數(shù)里面比較重要的就是碰撞檢測函數(shù),在下面詳細(xì)解釋。

碰撞檢測

要檢測物體與墻體是否碰撞,通常情況是要先把地圖信息保存到內(nèi)存里,然后在移動物體時檢測是否與當(dāng)前的某個墻體碰撞,但是由于我們的地圖背景是黑白迷宮,所以可以使用顏色來檢測碰撞。具體的做法是:

獲取當(dāng)前物體的坐標(biāo)位置,利用canvas檢測當(dāng)前地圖上這個位置的顏色是否為黑色,如果是,說是是墻體,不應(yīng)該執(zhí)行移動,下面就是代碼:

function checkForCollision() {
  var imageData = context.getImageData(x - 1, y - 1, 15 + 2, 15 + 2)
  var pixels = imageData.data

  for (var i = 0, len = pixels.length; i < len; i++) {
    var red = pixels[i],
        green = pixels[i + 1]
        blue = pixels[i + 2]
        alpha = pixels[i + 3]

    // 檢測是否碰到黑色的墻
    if (red === 0 && green === 0 && blue === 0) {
      return true
    }
  }
  return false
}

在這里,15是小人的寬度,我們檢測小人兩側(cè)各1px范圍(對應(yīng)代碼中的getImageData(x - 1, y - 1, 15 + 2, 15 + 2)可以稍微思考下這里為什么是+2),如果是黑色,說明檢測到碰撞。

其余

在代碼里,我加了一些其他的功能,比如提示答案等。至于更換地圖也比較簡單:把地圖對應(yīng)的文件地址,起點坐標(biāo),答案圖片路徑等存在一個對象里,然后設(shè)置一個地圖數(shù)組,點擊的時候切換地圖并重新渲染就可以了。還有一些值得優(yōu)化的地方,比如:

  1. 碰撞檢測在拐彎的地方體驗不佳;
  2. 當(dāng)前情況運行時有軌跡,在答案模式下應(yīng)該如何去掉軌跡?

有興趣的同學(xué)可以試著自己實現(xiàn)下。

小結(jié)

這個例子相對比較簡單,對js的要求不高,拿來玩一下還是挺不錯的。

然后依然是每次都一樣的結(jié)尾,如果內(nèi)容有錯誤的地方歡迎指出;如果對你有幫助,歡迎點贊和收藏,轉(zhuǎn)載請征得同意后著明出處,如果有問題也歡迎私信交流,主頁有郵箱地址~溜了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:十堰 廣西 淮安 南京 西寧 酒泉 咸寧 佳木斯

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《快速實現(xiàn)一個簡單的canvas迷宮游戲的示例》,本文關(guān)鍵詞  快速,實現(xiàn),一個,簡單,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《快速實現(xiàn)一個簡單的canvas迷宮游戲的示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于快速實現(xiàn)一個簡單的canvas迷宮游戲的示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产福利视频一区二区三区| 亚洲电影在线免费观看| 亚洲综合免费观看高清完整版在线| 久久夜色精品一区| 日日骚欧美日韩| 欧美日韩午夜在线| 久久久天堂av| 91精品免费在线| 九九九久久久精品| 蜜臀av在线播放一区二区三区| 日本乱码高清不卡字幕| 日本成人在线一区| 亚洲综合色网站| 欧美亚洲国产一区二区三区va | 亚洲大片免费看| 亚洲欧美偷拍另类a∨色屁股| 美女视频黄免费的久久| 欧美影院精品一区| 欧美图区在线视频| 精品久久久久久最新网址| 日韩三级精品电影久久久| 日韩一区欧美一区| 欧美国产1区2区| 亚洲电影一级片| 麻豆精品一区二区综合av| 成人美女视频在线观看| 欧美日韩亚洲另类| 国产精品伦一区二区三级视频| 久久久久国产精品麻豆ai换脸| 91精品国产综合久久小美女 | 色综合久久99| 欧美日韩国产bt| 欧美一区二区黄| 国产精品久久夜| 午夜影院在线观看欧美| 国产乱码精品一区二区三区忘忧草 | 国产午夜一区二区三区| 成人欧美一区二区三区视频网页| 亚洲一二三四在线观看| 国产一区二区网址| 国产成人aaa| 欧美伊人精品成人久久综合97| 日韩一区二区三区免费看| 欧美午夜精品久久久久久孕妇| 日韩美女一区二区三区| 91久久精品一区二区三| 91网站在线观看视频| 欧美另类久久久品| 国产精品网曝门| 青青草97国产精品免费观看 | 成人激情动漫在线观看| 欧美日韩小视频| 欧美一区二区精品在线| 亚洲乱码中文字幕| 欧美成人国产一区二区| jiyouzz国产精品久久| 亚洲欧洲成人精品av97| 首页国产欧美日韩丝袜| 麻豆精品一区二区| 国产亚洲成av人在线观看导航 | 91老司机福利 在线| 精品在线一区二区三区| 色国产综合视频| 久久精品亚洲精品国产欧美| 日韩免费高清av| 激情亚洲综合在线| 国产精品欧美综合在线| 欧美一区二区视频网站| gogo大胆日本视频一区| 91精品办公室少妇高潮对白| 亚洲成人av中文| 5566中文字幕一区二区电影| 国产成人免费视| 蜜桃视频免费观看一区| 欧美韩日一区二区三区| 不卡的看片网站| 午夜影视日本亚洲欧洲精品| 日韩美女久久久| 亚洲精品成人在线| 色偷偷88欧美精品久久久| 国产suv精品一区二区三区| 日韩高清欧美激情| 成人一区二区三区视频| 欧美电影免费观看完整版| 制服丝袜成人动漫| 成人动漫在线一区| 99久久久久久99| 亚洲一区成人在线| 久久日韩粉嫩一区二区三区| 精品一区二区久久久| av电影在线观看一区| 久久精品男人的天堂| 国产成人高清视频| 欧美精品一二三| 国产精品久久精品日日| 不卡区在线中文字幕| 中文字幕一区二区三区在线不卡| √…a在线天堂一区| 丝袜亚洲精品中文字幕一区| 在线免费观看一区| 久久精品国产99国产| 青青草97国产精品免费观看 | 国产69精品久久久久777| 国产很黄免费观看久久| 欧美日韩一区 二区 三区 久久精品| 成人精品亚洲人成在线| 欧美日韩大陆一区二区| 久久久久久久久久久久久夜| 制服丝袜av成人在线看| 成人性生交大片免费看视频在线| 久久久91精品国产一区二区三区| 欧美色图天堂网| 亚洲va天堂va国产va久| 国产欧美日韩在线| aa级大片欧美| 成人做爰69片免费看网站| 日韩精品成人一区二区三区| 日本怡春院一区二区| 亚洲天堂福利av| 日韩一区二区三区四区五区六区| 色综合久久久久网| 成人黄色在线看| 麻豆精品一区二区| 亚洲一二三四区不卡| 亚洲人吸女人奶水| 国产精品素人视频| 欧美不卡一区二区三区四区| 久久99精品网久久| 午夜精品一区在线观看| 久久久久久一二三区| 日韩三级电影网址| 天天操天天综合网| 久久99精品国产| 天天影视网天天综合色在线播放| 91论坛在线播放| 亚洲欧美另类图片小说| 欧美成人性福生活免费看| 亚洲18色成人| 在线成人高清不卡| 天天亚洲美女在线视频| 国产精品美女久久久久久久久 | 91亚洲精品乱码久久久久久蜜桃| 久久不见久久见中文字幕免费| 亚洲免费在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 欧美日韩国产精选| 亚洲国产视频网站| 欧美成人a∨高清免费观看| 欧美国产精品中文字幕| 在线一区二区三区四区五区 | 精品久久久久一区二区国产| 久久国产麻豆精品| 精品国产一区二区三区四区四| 精品福利av导航| 国产成人av电影免费在线观看| 欧美中文字幕亚洲一区二区va在线| 欧美一级片免费看| 久久9热精品视频| 亚洲女女做受ⅹxx高潮| 欧美一卡2卡三卡4卡5免费| 国产精品日韩成人| av在线一区二区三区| 国产欧美精品一区| 制服丝袜av成人在线看| 亚洲欧美色图小说| 欧美精品aⅴ在线视频| 美国毛片一区二区三区| 亚洲不卡在线观看| 亚洲成人1区2区| 性做久久久久久| 美女免费视频一区| 麻豆国产精品视频| 久久不见久久见免费视频7| 激情小说亚洲一区| 91丨porny丨首页| 欧美精品粉嫩高潮一区二区| 久久久精品天堂| 亚洲精品视频一区| 成人美女视频在线观看18| 美女视频黄 久久| 丁香婷婷综合色啪| 欧洲日韩一区二区三区| 9191精品国产综合久久久久久| 色综合久久99| 欧美一区二区美女| √…a在线天堂一区| 亚洲欧美日韩一区二区| 亚洲自拍都市欧美小说| 国产一区二区三区黄视频| 在线精品视频一区二区三四| 欧美精品一区二区高清在线观看| 精品久久国产97色综合| 一区二区三区美女视频| 久久丁香综合五月国产三级网站| 91蜜桃在线观看| 精品av久久707| 午夜精品久久久久久久99樱桃 | 99久久精品99国产精品| 欧美理论电影在线| 亚洲精品少妇30p|