ネイティブ js を使用して HTML5 レンガ崩しゲームを実装する (コード例)
この記事では、ネイティブ JS を使用して HTML5 レンガ破壊ゲームを実装する方法をコード例を通じて紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
まえがき
PS: このプロジェクトでは多くの es6 構文が使用されています。 es6 構文に慣れていない人は、読み続ける前にいくつかの基本原則を理解するのが最善です。
まず第一に、このシリーズの目的を説明させてください。実際、これは主にブロガーがキャンバス関連の API の使用に習熟したいと考えており、同時にその実装により興味があるからです。小さなゲームのロジックを理解しているので、この一連の小さなゲームを使ってゲームをプレイしてプログラミング スキルを向上させたいと思っています; es6 の構文については、個人的に es6 の構文は今後ますます普及すると考えているので、文法使用スキルを事前に習得します。ミニゲームの実装ロジックは完璧ではないかもしれませんし、バグもあるかもしれませんが、あくまでプログラミング能力やスキルの向上を目的としたものですので、あまり深刻に考えないでいただければ幸いです。 # 初めて共有するので、レンガを壊すことを選択しました。それほど複雑ではないロジックを備えた小さなゲームです。同時に、実際のゲーム効果に近づけるために、レベル、レンガの状態、および物理衝突モデルの簡素化された実装もゲームに追加されました。実際には、ゲームの実装ロジックに注目してください。
オンライン デモ アドレス: http://demo.jb51.net/js/2018/h5-game-blockBreaker
github アドレス: https: / /github.com/yangyunhe369/h5-game-blockBreaker
ローカル ダウンロード アドレス: http://xiazai.jb51.net/201801/yuanma/h5-game-blockBreaker(jb51.net) .rar
ps: github アドレスとローカル ダウンロードにはコード デモと参照用のソース コードがあり、オンライン デモ アドレスはプレビューに利用できます
まずはゲームをプレイしてみよう 完了後のスクリーンショット
ゲームプロジェクトのディレクトリは以下の通りです#.
├─ index.html // 首页html
│
├─ css // css样式资源文件
├─ images // 图片资源文件
└─ js
├─ common.js // 公共js方法
├─ game.js // 游戏主要运行逻辑
└─ scene.js // 游戏场景相关类
ここでは、ゲーム内で描画する必要があるバッフル、ボール、レンガ、スコアボードがインスタンス化され、ゲームの主な実行ロジックは、個別にインスタンス化します。
Baffle Paddle
class Paddle { constructor (_main) { let p = { x: _main.paddle_x, // x 轴坐标 y: _main.paddle_y, // y 轴坐标 w: 102, // 图片宽度 h: 22, // 图片高度 speed: 10, // x轴移动速度 ballSpeedMax: 8, // 小球反弹速度最大值 image: imageFromPath(allImg.paddle), // 引入图片对象 isLeftMove: true, // 能否左移 isRightMove: true, // 能否右移 } Object.assign(this, p) } // 向左移动 moveLeft () { ... } // 向右移动 moveRight () { ... } // 小球、挡板碰撞检测 collide (ball) { ... } // 计算小球、挡板碰撞后x轴速度值 collideRange (ball) { ... } }
小球ボール
class Ball { constructor (_main) { let b = { x: _main.ball_x, // x 轴坐标 y: _main.ball_y, // y 轴坐标 w: 18, // 图片宽度 h: 18, // 图片高度 speedX: 1, // x 轴速度 speedY: 5, // y 轴速度 image: imageFromPath(allImg.ball), // 图片对象 fired: false, // 是否运动,默认静止不动 } Object.assign(this, b) } move (game) { ... } }
class Block { constructor (x, y, life = 1) { let bk = { x: x, // x 轴坐标 y: y, // y 轴坐标 w: 50, // 图片宽度 h: 20, // 图片高度 image: life == 1 ? imageFromPath(allImg.block1) : imageFromPath(allImg.block2), // 图片对象 life: life, // 生命值 alive: true, // 是否存活 } Object.assign(this, bk) } // 消除砖块 kill () { ... } // 小球、砖块碰撞检测 collide (ball) { ... } // 计算小球、砖块碰撞后x轴速度方向 collideBlockHorn (ball) { ... } }
ScoreboardScore
class Score { constructor (_main) { let s = { x: _main.score_x, // x 轴坐标 y: _main.score_y, // y 轴坐标 text: '分数:', // 文本分数 textLv: '关卡:', // 关卡文本 score: 200, // 每个砖块对应分数 allScore: 0, // 总分 blockList: _main.blockList, // 砖块对象集合 blockListLen: _main.blockList.length, // 砖块总数量 lv: _main.LV, // 当前关卡 } Object.assign(this, s) } // 计算总分 computeScore () { ... } }
Scene
class Scene { constructor (lv) { let s = { lv: lv, // 游戏难度级别 canvas: document.getElementById("canvas"), // canvas 对象 blockList: [], // 砖块坐标集合 } Object.assign(this, s) } // 实例化所有砖块对象 initBlockList () { ... } // 创建砖块坐标二维数组,并生成不同关卡 creatBlockList () { ... } }
ゲーム メイン ロジック ゲーム
class Game { constructor (fps = 60) { let g = { actions: {}, // 记录按键动作 keydowns: {}, // 记录按键 keycode state: 1, // 游戏状态值,初始默认为1 state_START: 1, // 开始游戏 state_RUNNING: 2, // 游戏开始运行 state_STOP: 3, // 暂停游戏 state_GAMEOVER: 4, // 游戏结束 state_UPDATE: 5, // 游戏通关 canvas: document.getElementById("canvas"), // canvas 元素 context: document.getElementById("canvas").getContext("2d"), // canvas 画布 timer: null, // 轮询定时器 fps: fps, // 动画帧数,默认60 } Object.assign(this, g) } ... }
ゲーム シーン全体を描画します。
タイマーを呼び出してアニメーションをフレームごとに描画します。
- ゲームクリアおよびゲーム終了判定バインドボタンイベント境界検出処理関数衝突検出処理関数
- Entry function_main
- Entry function: ゲームに必要なすべてのクラスのインスタンス化を実現し、ゲームを初期化します さらにクールな特殊効果については、次のサイトにアクセスすることをお勧めします:
let _main = { LV: 1, // 初始关卡 MAXLV: 3, // 最终关卡 scene: null, // 场景对象 blockList: null, // 所有砖块对象集合 ball: null, // 小球对象 paddle: null, // 挡板对象 score: null, // 计分板对象 ball_x: 491, // 小球默认 x 轴坐标 ball_y: 432, // 小球默认 y 轴坐标 paddle_x: 449, // 挡板默认 x 轴坐标 paddle_y: 450, // 挡板默认 y 轴坐标 score_x: 10, // 计分板默认 x 轴坐标 score_y: 30, // 计分板默认 y 轴坐标 fps: 60, // 游戏运行帧数 game: null, // 游戏主要逻辑对象 start: function () { let self = this /** * 生成场景(根据游戏难度级别不同,生成不同关卡) */ self.scene = new Scene(self.LV) // 实例化所有砖块对象集合 self.blockList = self.scene.initBlockList() /** * 小球 */ self.ball = new Ball(self) /** * 挡板 */ self.paddle = new Paddle(self) /** * 计分板 */ self.score = new Score(self) /** * 游戏主要逻辑 */ self.game = new Game(self.fps) /** * 游戏初始化 */ self.game.init(self) } }
javascript 特殊効果コレクション###!
以上がネイティブ js を使用して HTML5 レンガ崩しゲームを実装する (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。
