Phaser-MVC 使用教程

Phaser-MVC 是一个基于 Phasor.js 的 MVC 框架,它提供了一种将游戏开发中的业务逻辑、界面和数据分离的方式,使得游戏开发更加方便和有组织。本篇文章将介绍如何使用 Phaser-MVC,包括框架的结构、如何创建 MVC 架构下的游戏,以及一些在实际应用中的用法。

安装和使用

首先,你需要安装最新版本的 Node.js,Node.js 的包管理器 NPM 将会在安装 Node.js 后一同安装。

在终端里输入以下命令即可通过 NPM 安装 Phaser-MVC:

--- ------- ---------- ------

记得在你的项目中使用该命令时不要遗漏 --save 参数,这样可以将 Phaser-MVC 参数保存到项目的 package.json 文件中,方便以后的管理。

创建 MVC 游戏

Phaser-MVC 的最大特点是使用 MVC 的结构对游戏进行管理,一下我们来了解如何实现一个简单的 MVC 游戏。我们将要创建的是一个简单的贪吃蛇游戏,具体的实现细节可以在 phaser-mvc-examples 中的 snake-demo 示例中进行查看。

配置

在我们开始创建游戏之前,我们需要创建一个非常简单的配置文件以确保我们的游戏可以正确运行。在项目的根目录下创建一个 config.js 文件,并输入以下代码:

------ ------- -
    ------ ----
    ------- ----
    ---------------- ----------
    ----- ------------
    ------- -------
    ---- -
        ---------------- ----
    -
-

这里,我们采用了 ES6 的语法,使用 export 方法来将配置导出,方便在整个应用中的引用。配置文件中 widthheight 对应着游戏场景的大小,backgroundColor 设置游戏的背景颜色,type 指定了游戏的渲染器类型,parent 制定了游戏渲染的 HTML 元素的 ID,dom.createContainer 为了保证游戏在容器内正确显示。

实现

在我们的游戏中,贪吃蛇和食物都是游戏对象,因此我们需要按照 MVC 的方式来管理它们。首先创建一个名为 Snake.js 的文件,在这个文件中,我们将创建一个 Snake 类来管理贪吃蛇。

------ ------ ---- --------
------ ---- ---- --------

------ ------- ----- ----- ------- ------------------------ -
    ----------- ------- -
        ------------

        --------- - ------------------------------- ------------------- -------
        --------- - ---------------------- --------------- ------------ --

        -------------- - -----------------
        ---------- - ---

        ---------------- - ------------- -- --------------- -----
    -

    ------ -- -
        ----- ---- - --------------------------------------------

        -- --------------- -- -------------- --- -------------------- -
            -------------- - -----------------
            --------------- - -
        - ---- -- ----------------- -- -------------- --- ------------------ -
            -------------- - -------------------
            --------------- - ---
        - ---- -- ----------------- -- -------------- --- --------------------- -
            -------------- - -------------------
            --------------- - ---
        - ---- -- ------------------ -- -------------- --- -------------------- -
            -------------- - --------------------
            --------------- - --
        -

        ----------- -- ------------------------------------------ - ----------- - -----
        ----------- -- ------------------------------------------ - ----------- - -----

        -----------

        --------------------------------- - ------------
        ----------------------------------------------------------- ------------ --------
    -

    ------- -- -
        ----- - - --------------- --- - - ----------- - --------------------------------- - ----
        ----- - - --------------- --- - - ----------- - --- - --------------------------------- - ----

        -------------------------------- -- --------
    -

    --- ---------- -- -
        ------ ------------------------
    -

    ---- -- -
        -- ------------ - -- -
            ----------- - ----------------
        -

        -- ------------ - ----------------- -
            ----------- - -
        -

        -- ------------ - -- -
            ----------- - -----------------
        -

        -- ------------ - ------------------ -
            ----------- - -
        -
    -
-

在这个文件中,我们引入了之前提到的配置文件和 Data.js 文件,它们分别用于取得游戏的配置和一些游戏用到的常量。

Snake 类继承于 Phaser.GameObjects.Group 类,这表示贪吃蛇的运动和身体都将由一个组对象进行管理。在构造函数中,我们创建了一个贪吃蛇的头部,并且添加了一个默认的方向 Data.direction.up,一些速度相关的属性,以及一个用于定时添加身体的调用器。

接下来,我们在类的 update() 函数中来控制蛇的移动。我们通过监听输入对象 Phaser.Input.Keyboard.CursorKeys,检测键盘的输入来实现方向的变化。同时,我们也更新了身体的列表 this.bodyChildren 的位置和方向。当蛇的身体长度增长时,调用 this.addBody() 函数。

addBody() 的函数是用于添加贪吃蛇身体的,将会在适当的时机被调用,用于添加新的身体组件。这些组件是通过 this.scene.add.group() 创建的一个组,并加入到当前实例的组中。

get bodyLength() 函数返回当前身体的长度,而 wrap() 函数则用于检测贪吃蛇是否超出了游戏区域。如果是,函数会将贪吃蛇重新定位于游戏场景范围内。

在同一目录下创建一个名为 Food.js 的文件。这个文件的代码如下:

------ ------ ---- --------
------ ---- ---- --------

------ ------- ----- ---- ------- ------------------------ -
    ----------- ------- -- -- -
        ------------ -- -- -------

        -----------------------------
        -------------------------------------

        ------------------------------ - --
        -------------------

        -----------------
            ------------------------------ - -- ---------------- - ---------- - ---
            ------------------------------ - -- ----------------- - ----------- - --
        -
    -

    ------ -- -
        -- ----------- --- -- -
            -----------------
                ------------------------------ - -- ---------------- - ---------- - ---
                ------------------------------ - -- ----------------- - ----------- - --
            -
            ---------- - -
        -
    -

    --- -- -
        ---------- - -
    -
-

这里我们再次引入了 Data.js 文件,因此需要确保在当前目录下存在这个文件,我们并不需要对其进行修改。

Snake.js 中的 Snake 类相似,Food.js 中也是一个继承于 Phaser.GameObjects.Image 类的对象。不同的是,在 constructor() 函数中,我们为食物设定了一个圆形的哈物体以确保其可以和其他物体进行碰撞,而 setOrigin() 函数则将食物对象的初始位置设置在了它的正中心。

update() 函数控制着食物的出现和消失。当食物被吃掉时,它会重新出现,并且使得自己的 alpha(透明度) 值为 0,这样食物就不在游戏场景中可见了。

eat() 函数用于表示食物被吃掉了,这将会使得食物从游戏场景中消失。

控制器

贪吃蛇游戏已经完成,最后我们创建一个控制器来实现和模型的通信和协调。创建一个名为 SnakeController.js 的文件,内容如下:

------ ------ ---- --------
------ ---- ---- --------
------ ----- ---- ---------
------ ---- ---- --------

------ ------- ----- --------------- ------- ------------ -
    ----------- -- -
        ----------------------------------
    -

    ------- -- -
        ----------------------- ------------------
        ----------------------- ------------------
        ----------------------- ------------------
        ---------------------- -----------------
    -

    ------ -- -
        ----------------- --- ------ ----- ---- -- ------ - --------- ------- ----- --------- --

        ---------- - --- -----------
        -- ---------------------- -------- ---------
        --------- - --- ----------
    -

    ------ -- -
        -- -------------------------------------- ----------- -
            ----------------------

            --------------------
            ---------------
        -
    -
-

这个文件和其他的 Phaser 场景文件并没有什么区别,它也是一个继承于 Phaser.Scene 类的场景对象。我们在 preload() 函数中加载了游戏所需的资源,包括贪吃蛇的头部和身体,食物以及吃下食物的声音等。

create() 函数中,我们添加了一个文本提示,然后创建了一个贪吃蛇对象和一个食物对象。

最后,在 update() 函数中,我们检测贪吃蛇和食物是否碰撞,如果它们产生了碰撞,我们就会播放吃下食物的声音,并且将贪吃蛇的身体长度增加一个单位,并且将食物设定为已经被吃掉了。

总结

到此,我们就完成了 MVC 模式下的贪吃蛇游戏。这个例子和其他的 Phasor.js 的项目一样,都可以在 GitHub 上克隆或下载,希望读者掌握了如何使用 Phaser-MVC 进行游戏开发,并且可以将这些技术用于自己的项目中。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6005753a81e8991b448ea47c


猜你喜欢

  • npm 包 vandux 使用教程

    vandux 是一个基于 Vue 框架的状态管理库。它提供了一系列的 API,用于管理应用程序的状态。vandux 与 Vuex 相似,但是更加轻量化,易于使用。在本篇文章中,我们将深入学习 vand...

    3 年前
  • npm 包 js-senc 使用教程

    在前端开发中,我们常常需要对数据进行加密和解密的操作。这时,npm 包 js-senc 就成了帮助我们实现这个目标的工具。这篇文章将详细介绍 npm 包 js-senc 的使用方法,包括安装和基本用法...

    3 年前
  • npm 包 pwact 使用教程

    什么是 pwact? pwact 是一款 npm 包,它为我们提供了一个简单易用的工具,可以将一个 PWA(渐进式 Web 应用程序)项目打包成一个可以被托管到任何静态文件服务器的单个 HTML 文件...

    3 年前
  • npm 包 senc 使用教程

    简介 senc 是一个用于字符串加密和解密的 npm 包,其主要基于 AES-256-CBC 算法实现。这个包能够使得字符串的加密和解密变得非常容易。此外,这个包使用起来十分方便,仅需几行代码即可完成...

    3 年前
  • npm 包 @nichoth/wslog 使用教程

    前言 前端开发是一个较为广泛的领域,其中涉及到的技术也是越来越多,其中,使用 npm 包来完成前端开发已经是非常常见的做法。而今天我们要介绍的是一个叫做 @nichoth/wslog 的 npm 包,...

    3 年前
  • npm 包 w20-material-theme 使用教程

    在前端开发中,使用主题风格可以大大提高开发效率和用户体验。w20-material-theme 是一个可用于 React、Angular 和 Vue 等前端框架的 NPM 包,它提供了 Google ...

    3 年前
  • npm 包 effects-middleware 使用教程

    在前端开发中,我们经常使用许多工具和框架来提高我们的开发效率。其中,npm 包就是我们常用的工具之一。今天我想向大家介绍一个非常有用的 npm 包:effects-middleware。

    3 年前
  • npm 包 proxyquire-stub-lambda-class 使用教程

    proxyquire-stub-lambda-class 是一个 Node.js 的模块,它提供了一个方便的方式在测试 AWS Lambda 代码时,将其相互独立地测试。

    3 年前
  • npm 包 stashinvest-node 使用教程

    stashinvest-node 是一个 npm 包,它提供了对 StashInvest API 的访问和互动。使用 stashinvest-node,您可以轻松地与 StashInvest 进行交互...

    3 年前
  • npm 包 react-native-uking-fast-image 使用教程

    在 React Native 开发过程中,图片渲染无疑是一个需要注意的问题。随着应用越来越复杂,图片越来越多,我们必须寻找一种快速而可靠的方式来处理图片。 在这篇文章中,我将向你介绍一种非常有用的 n...

    3 年前
  • npm 包 spider-screenshot 使用教程

    在前端开发中,我们经常需要爬取网站或者需要在特定的条件下生成网站的截图,这时候就需要使用到 node 包 spider-screenshot。该包基于 puppeteer 实现,能够在无需打开浏览器的...

    3 年前
  • npm 包 get-group-monitoring 使用教程

    前言 在现在的前端开发领域,通过各种 npm 包能够快速地构建出一个在细节上都十分优美的应用,而 get-group-monitoring 包就是其中一个十分优秀的 npm 包。

    3 年前
  • npm 包 ngdatediff 使用教程

    在现代的 Web 应用程序中,日期处理是一个非常重要的主题。为了追踪日期的变化或者做日期运算,我们需要一种方便易用的日期处理工具。npm 包 ngdatediff 是一个专门用于 AngularJS ...

    3 年前
  • npm 包 ngx-video-scrubber 使用教程

    ngx-video-scrubber 是一个基于 Angular 框架的视频滑块组件,能够提供视频播放时的滑块进度条,支持鼠标和触控操作,能够轻松地实现视频快进、快退、暂停等常见功能。

    3 年前
  • npm 包 react-native-scaling-drawer 使用教程

    介绍 react-native-scaling-drawer 是一款 React Native 的第三方组件库,用于实现一个可缩放抽屉效果的页面组件。它不仅支持简单、快捷的页面开发,而且还提供了丰富的...

    3 年前
  • npm 包 soar-seo-checker 使用教程

    简介 soar-seo-checker 是一个 npm 包,用于检查网页的 SEO 优化状态。通过分析网页的 HTML、CSS、JS 等内容,该工具可以自动给出 SEO 优化建议。

    3 年前
  • npm 包 elevate-vg-cli 使用教程

    elevate-vg-cli 是一个用于创建和构建 Vega-Lite 可视化的命令行工具。本文将介绍如何使用 elevate-vg-cli,以及如何利用它来构建优秀的可视化。

    3 年前
  • npm 包 react-ratio 使用教程

    React 是一款流行的前端框架,它的组件化开发模式让前端开发更加便捷。而在开发 React 应用时,我们常常需要处理图片的缩放问题。而 npm 包 react-ratio 就是一个用于图片等比例缩放...

    3 年前
  • npm 包 jm-bootstrap-colorpicker 使用教程

    简介 jm-bootstrap-colorpicker 是一个基于 jQuery 和 Bootstrap 的颜色选择器插件,它可以让用户自由选择任意颜色,并且可以方便地集成到任何前端项目中。

    3 年前
  • npm 包 smwcentral.net-jsonapi 使用教程

    在前端开发中,我们经常需要使用 API 接口来获取数据。而 smwcentral.net 是一个超级马里奥世界的游戏网站,它提供了一个开放的 API 接口,可以让我们在前端应用中获取相关的数据。

    3 年前

相关推荐

    暂无文章