亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

快速實現一個簡單的canvas迷宮游戲的示例

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

前言

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

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

點我體驗

git地址

正文

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

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

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

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

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

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

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

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

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

function drawMaze(mazeFile, startingX, startingY) {
  var imgMaze = new Image()
  imgMaze.onload = function () {
    // 畫布大小調整
    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,是起始點的坐標。在這里圖片引入的方式用了2種,原因是小人的圖片我不經常更換,就直接寫在頁面里,迷宮的地圖打算做成可變的,所以在js里引入,你想把圖片都直接用js引入也沒有問題。其他部分比較簡單,不再贅述。

移動函數

移動的主要原理是:

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

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

// 移動函數
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
    }
    
    //繪制小人應該移動的地點
    var imgFace = document.getElementById('face')
    context.drawImage(imgFace, x, y)

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

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

碰撞檢測

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

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

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

其余

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

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

有興趣的同學可以試著自己實現下。

小結

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:十堰 廣西 淮安 南京 西寧 酒泉 咸寧 佳木斯

巨人網絡通訊聲明:本文標題《快速實現一個簡單的canvas迷宮游戲的示例》,本文關鍵詞  快速,實現,一個,簡單,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《快速實現一個簡單的canvas迷宮游戲的示例》相關的同類信息!
  • 本頁收集關于快速實現一個簡單的canvas迷宮游戲的示例的相關信息資訊供網民參考!
  • 推薦文章
    99久久精品国产免费| 国产原创视频在线| 二级片在线观看| 亚洲精品影院久久久久久| 深夜做爰性大片中文| 黄视频网站在线观看| 国产视频久久久| 精品国产亚洲一区二区三区| 国产麻豆精品| 国产综合成人观看在线| 日本特黄特色aa大片免费| 日韩欧美一二三区| 日本伦理网站| 亚飞与亚基在线观看| 亚洲精品永久一区| 日日日夜夜操| 成人影视在线播放| 国产91精品系列在线观看| 尤物视频网站在线| 四虎影视库国产精品一区| 精品国产一区二区三区国产馆| 亚洲不卡一区二区三区在线 | 黄色免费网站在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩在线观看免费完整版视频| 黄视频网站免费观看| 四虎影视久久久免费| 999久久66久6只有精品| 精品美女| 四虎论坛| 韩国毛片免费| 天天做人人爱夜夜爽2020| 韩国三级香港三级日本三级la| 超级乱淫黄漫画免费| 精品视频在线观看一区二区三区| 日韩中文字幕在线播放| 亚洲www美色| 欧美激情一区二区三区视频 | 在线观看成人网 | 国产a网| a级黄色毛片免费播放视频| 中文字幕一区二区三区精彩视频 | 国产一区二区精品久久91| 日韩女人做爰大片| 国产成a人片在线观看视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 免费国产在线观看| 黄视频网站在线观看| 国产一级强片在线观看| 久久国产一久久高清| 国产高清在线精品一区二区| 国产韩国精品一区二区三区| 日韩中文字幕一区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久99这里只有精品国产| 可以在线看黄的网站| 成人av在线播放| 超级乱淫黄漫画免费| 精品视频在线观看一区二区| a级毛片免费全部播放| 国产极品白嫩美女在线观看看| 精品视频在线观看一区二区 | 97视频免费在线| 日韩一级黄色| 麻豆系列国产剧在线观看| 久久99爰这里有精品国产| 亚洲 国产精品 日韩| 99久久精品国产国产毛片| 国产不卡在线播放| 美女免费精品视频在线观看| 香蕉视频久久| 欧美大片一区| 999久久久免费精品国产牛牛| 久草免费资源| 国产伦久视频免费观看 视频 | 999久久久免费精品国产牛牛| 精品久久久久久综合网| 国产不卡精品一区二区三区| 深夜做爰性大片中文| 99热精品在线| 欧美一级视频免费| 日韩中文字幕在线亚洲一区| 精品久久久久久中文| 国产a网| 国产一区精品| 二级片在线观看| 成人免费一级纶理片| 毛片的网站| 欧美激情一区二区三区视频| 可以在线看黄的网站| 国产视频在线免费观看| 精品国产亚一区二区三区| 国产不卡在线看| 亚洲天堂一区二区三区四区| 一级女人毛片人一女人| 国产麻豆精品高清在线播放| 精品久久久久久中文| 毛片的网站| 国产伦精品一区二区三区无广告| 韩国毛片免费| 日韩一级黄色| 国产伦理精品| 九九久久99| 国产原创视频在线| 四虎影视久久久免费| 美国一区二区三区| a级精品九九九大片免费看| a级精品九九九大片免费看| 四虎久久精品国产| 国产一区二区精品久久91| 国产一级生活片| 亚洲精品影院久久久久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产网站免费视频| 国产91精品一区二区| 国产91视频网| 精品视频在线看| a级毛片免费全部播放| 亚洲第一色在线| 九九精品久久久久久久久| 天天做人人爱夜夜爽2020| 台湾美女古装一级毛片| 国产伦久视频免费观看 视频 | 91麻豆精品国产自产在线观看一区| 亚洲精品影院一区二区| 国产成a人片在线观看视频| 九九九在线视频| 毛片的网站| 精品毛片视频| 韩国三级视频网站| 欧美a级成人淫片免费看| 精品视频在线观看一区二区三区| 国产一区二区福利久久| 欧美国产日韩一区二区三区| 999精品视频在线| 久久精品店| 青草国产在线观看| 午夜精品国产自在现线拍| 美国一区二区三区| 99色吧| 久久精品欧美一区二区| 国产不卡在线看| 999久久66久6只有精品| 99热精品在线| 国产a免费观看| 欧美另类videosbestsex久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人高清视频在线观看| 九九精品久久久久久久久| 亚久久伊人精品青青草原2020| 可以免费看污视频的网站| 亚欧视频在线| 午夜激情视频在线观看| 成人在免费观看视频国产| 青草国产在线| 亚洲www美色| 人人干人人草| 日韩字幕在线| 精品视频在线观看免费| 欧美电影免费| 国产视频网站在线观看| 国产91精品一区| 久草免费在线视频| 日韩在线观看视频黄| 欧美另类videosbestsex视频| 久久国产一久久高清| 精品视频免费在线| 国产国产人免费视频成69堂| 欧美激情伊人| 日韩欧美一二三区| 韩国毛片免费大片| 四虎影视库| 国产精品免费久久| 欧美大片aaaa一级毛片| 午夜家庭影院| 日韩专区一区| 日韩在线观看视频黄| 欧美激情一区二区三区在线播放| 久久精品免视看国产明星| 韩国毛片免费| 韩国毛片免费| 国产精品1024永久免费视频 | 九九久久99综合一区二区| 四虎影视库国产精品一区| 国产网站免费在线观看| 日韩免费在线视频| 九九精品在线播放| 精品视频在线观看视频免费视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 91麻豆国产级在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产视频在线免费观看| 免费国产在线观看| 久草免费资源| 日本乱中文字幕系列| 999久久66久6只有精品| 国产成人女人在线视频观看| 亚洲精品影院久久久久久| 精品久久久久久中文| 国产极品精频在线观看|