検索
ホームページウェブフロントエンドH5 チュートリアルCanvas を使用して迷路ゲームを実装する

Canvas を使用して迷路ゲームを実装する

Jul 10, 2018 pm 05:32 PM
canvashtml5javascript

この記事は、主に迷路ゲームを実装するためのキャンバスの使用方法を紹介しています。これは、必要な友人に参考にしていただけるように共有します。デザインパターンを認識しており、それに直面しています。純粋な JS は本当に退屈です -_-。だから、それにスパイスを加えるために何か面白いものを書いてください)

canvas は新しいものではありませんが、一般的には使用されないためです。今日は、簡単な canvas 迷路を実装する方法を紹介します。この例は「html5 cheats」の第 2 版に由来しており、コードはわずかに調整されています。

キャンバスを使用して画像情報を取得する場合は途中にステップがあるためサーバー環境を使用する必要があります。そこで、まずサンプルを書いてサーバーに投げてみました。まずはその効果を体験してください(達成感を原動力にします笑)


テキストcanvas已经不算新鲜了,不过由于日常业务中并不常用,所以实践并不多,今天分享一下,如何实现简单canvas迷宫。这个例子来源于《html5秘籍》第二版,代码有稍微做了点调整。

由于中间有一步使用canvas获取图片信息的时候,必须使用服务器环境。所以我先写了一个样例扔在服务器上,大家可以先体验一下效果(用成就感作为驱动力哈哈哈)

正文

实现这个小游戏也不难,让我们想想,一个迷宫游戏有哪些基本要素。

首先当然得有个地图,然后得有个移动的小人,这两个我们利用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是迷宫的图片地址,startingXstartingY,是起始点的坐标。在这里图片引入的方式用了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 <p>上述代码中,移动函数比较简单,绘制帧的函数里面比较重要的就是碰撞检测函数,在下面详细解释。</p><h3 id="碰撞检测">碰撞检测</h3><p>要检测物体与墙体是否碰撞,<strong>通常情况</strong>是要先把地图信息保存到内存里,然后在移动物体时检测是否与当前的某个墙体碰撞,但是<strong>由于我们的地图背景是黑白迷宫,所以可以使用颜色来检测碰撞</strong>。具体的做法是:</p><p><strong>获取当前物体的坐标位置,利用<code>canvas</code>检测当前地图上这个位置的颜色是否为黑色,如果是,说是是墙体,不应该执行移动</strong>,下面就是代码:</p><pre class="brush:php;toolbar:false">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 <p>在这里,<code>15</code>是小人的宽度,我们检测小人两侧各1px范围(对应代码中的<code>getImageData(x - 1, y - 1, 15 + 2, 15 + 2)</code></p>この小さなゲームを実装するのは難しくありません。迷路ゲーム 基本的な要素は何ですか。 <h3></h3> まず第一に、 もちろん<strong>地図</strong>がなければならず、 次に<strong>動く人間</strong>がなければなりません。これら 2 つを描くためにキャバンを使用します。ステップは<strong>オブジェクトの移動</strong>プログラムで、このプログラムには主に次の 2 つの側面が含まれています: <p></p>1. オブジェクトが壁に接触したかどうかを検出します。 <ol class=" list-paddingleft-2">
<li>迷路と動く小さな人々の地図を描きます<p></p> 地図を描くための主な手順は次のとおりです: </li>
<li>
<p></p>地図の写真を入手します</li>
</ol><p></p>キャバンを使用して画像を描きます。 <h2></h2><p></p>迷路マップの生成は、Google のオンライン迷路ジェネレーターを利用して取得できます。 <p></p>悪役を描く場合も同様です。ただし、 ここで注意する必要があるのは<strong>正方形の絵</strong>を見つける必要があることです。モバイルの衝突検出と四角形の比較を後で行うため、適切な判断が必要です。 <p></p>次のステップは、迷路と悪役を描画するためのメイン関数を記述することです<p class="post-topheader custom- pt0">rrreee<a title="HTML5 Canvas API制作简单的猜字游戏" href="http://www.php.cn/html5-tutorial-405761.html" target="_blank"><code>mazeFile</code> は迷路の画像アドレス、<code>startingX</code> と <code>startingY code> は開始点の座標です。ここで画像を紹介する方法は2つあります。理由は、悪役の画像は頻繁に変更しないので、迷路のマップは可変であることを目的としており、ページに直接書き込むだけです。すべての画像が必要な場合は、js を使用して直接インポートしても問題ありません。他の部分は比較的単純なので、再度説明しません。 </code></a><br>移動関数</p><p class="mb20">移動の主な原理は次のとおりです: <a title="HTML5 Canvas实现烟花绽放的特效" href="http://www.php.cn/html5-tutorial-405760.html" target="_blank">指定されたユーザー入力 (ここでは方向キーへの応答) を受け入れ、それを対応する移動命令に変換します。次に、 動作指示を<strong>定期的に確認</strong>し、対応する目標位置を描画します。簡単な例を見てみましょう: </a></p>たとえば、上方向キーを押すたびに、上に移動する必要があることが記録され、100 ミリ秒ごとに現在の移動コマンドを確認し、移動するターゲット位置を描画し、これを繰り返します。プロセス。コードも比較的単純です: 🎜rrreee🎜 上記のコードでは、移動関数は比較的単純です。フレームを描画する最も重要な関数は、以下で詳しく説明します。 🎜🎜衝突検出🎜🎜 物体が壁に衝突したかどうかを検出するには<strong>通常</strong>、まず地図情報をメモリに保存し、次にオブジェクトを移動したときに現在の壁に衝突するかどうかを検出する必要があります。 object ですが<strong>マップの背景は白黒の迷路なので、 色を使用して衝突を検出できます</strong>。具体的な方法は次のとおりです: 🎜🎜<strong>現在のオブジェクトの座標位置を取得し、<code>canvas</code> を使用して、現在のマップ上のこの位置の色が黒であるかどうかを検出します。移動</strong>するには、次のコードを使用します: 🎜rrreee🎜 ここで、 <code>15</code> は悪役の幅で、両側の 1px の範囲を検出します。悪役の (コードの <code>getImageData(x) - 1, y - 1, 15 + 2, 15 + 2)</code> が黒の場合は、なぜ +2 なのかを考えることができます)。 、衝突が検出されたことを意味します。 🎜🎜残り🎜🎜 コードには、回答を求めるプロンプトなどの他の機能を追加しました。マップの変更に関しては比較的単純で、マップに対応するファイルアドレス、始点座標、回答画像のパスなどをオブジェクトに格納し、マップ配列を設定し、クリックするとマップを切り替えて再描画するだけです。次のような最適化する価値のある領域もいくつかあります。 🎜🎜🎜🎜 コーナーでの衝突検出エクスペリエンスが良くありません。 🎜🎜🎜🎜 現在の状況で走行中にトラックが存在します。応答モードでトラックを削除するにはどうすればよいですか? 🎜🎜🎜🎜興味のある学生は、自分で実装してみることができます。 🎜🎜概要🎜🎜 この例は比較的単純で、js に対する高い要件はありません。これを使ってみるのは非常に良いです。 🎜🎜上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 🎜🎜関連する推奨事項: 🎜🎜🎜単純な推測ゲームを作成するための HTML5 Canvas API🎜🎜🎜🎜🎜花火の特殊効果を実現するための HTML5 Canvas🎜🎜

以上がCanvas を使用して迷路ゲームを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
H5:Webコンテンツとデザインの未来H5:Webコンテンツとデザインの未来May 01, 2025 am 12:12 AM

H5(HTML5)は、新しい要素とAPIを介してWebコンテンツと設計を改善します。 1)H5はセマンティックタグ付けとマルチメディアサポートを強化します。 2)キャンバスとSVGを導入し、Webデザインを濃縮します。 3)H5は、新しいタグとAPIを介してHTML機能を拡張することにより機能します。 4)基本的な使用には、それを使用したグラフィックの作成が含まれ、高度な使用法にはwebstorageapiが含まれます。 5)開発者は、ブラウザの互換性とパフォーマンスの最適化に注意を払う必要があります。

H5:Web開発の新機能と機能H5:Web開発の新機能と機能Apr 29, 2025 am 12:07 AM

H5は多くの新しい機能と機能をもたらし、Webページのインタラクティブ性と開発効率を大幅に改善します。 1。SEOの強化などのセマンティックタグ。 2.マルチメディアサポートは、オーディオとビデオの再生とタグを簡素化します。 3. Canvas Drawingは、動的なグラフィックスの描画ツールを提供します。 4.ローカルストレージは、LocalStorageとSessionStorageを介してデータストレージを簡素化します。 5. Geolocation APIは、ロケーションベースのサービスの開発を促進します。

H5:HTML5の重要な改善H5:HTML5の重要な改善Apr 28, 2025 am 12:26 AM

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

HTML5:標準とWeb開発への影響HTML5:標準とWeb開発への影響Apr 27, 2025 am 12:12 AM

HTML5のコア機能には、セマンティックタグ、マルチメディアサポート、オフラインストレージ、ローカルストレージ、フォームエンハンスメントが含まれます。 1。コードの読みやすさとSEO効果を改善するためのセマンティックタグなど。 2.ラベルでマルチメディアの埋め込みを簡素化します。 3。アプリケーションキャッシュやLocalStorageなどのオフラインストレージとローカルストレージは、ネットワークのない操作とデータストレージをサポートします。 4.フォームエンハンスメントでは、処理と検証を簡素化するための新しい入力タイプと検証プロパティを導入します。

H5コードの例:実用的なアプリケーションとチュートリアルH5コードの例:実用的なアプリケーションとチュートリアルApr 25, 2025 am 12:10 AM

H5は、さまざまな新機能と機能を提供し、フロントエンド開発の機能を大幅に向上させます。 1.マルチメディアサポート:メディアを埋め込んで要素を埋め込み、プラグインは必要ありません。 2。キャンバス:要素を使用して、2Dグラフィックとアニメーションを動的にレンダリングします。 3。ローカルストレージ:ユーザーエクスペリエンスを改善するために、ローカルストレージとセッションストレージを介して永続的なデータストレージを実装します。

H5とHTML5の接続:類似性と相違点H5とHTML5の接続:類似性と相違点Apr 24, 2025 am 12:01 AM

H5とHTML5は異なる概念です。HTML5は、新しい要素とAPIを含むHTMLのバージョンです。 H5は、HTML5に基づくモバイルアプリケーション開発フレームワークです。 HTML5はブラウザを介してコードを解析およびレンダリングしますが、H5アプリケーションはコンテナを実行し、JavaScriptを介してネイティブコードと対話する必要があります。

H5コードの構成要素:キー要素とその目的H5コードの構成要素:キー要素とその目的Apr 23, 2025 am 12:09 AM

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5およびH5:一般的な使用法の理解HTML5およびH5:一般的な使用法の理解Apr 22, 2025 am 12:01 AM

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール