百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Phaser - 有趣的开源 HTML5 游戏框架

zhezhongyun 2025-02-11 14:24 18 浏览

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Phaser 是一个快速、免费且有趣的开源 HTML5 游戏框架。

Phaser 是一个快速、免费且有趣的开源 HTML5 游戏框架,提供跨桌面和移动 Web 浏览器的 WebGL 和 Canvas 渲染。可以使用 3rd 方工具将游戏编译为 iOS、Android 和本机应用程序。您可以使用 JavaScript 或 TypeScript 进行开发。

安装使用

安装 Web 服务器

我们会推荐WAMP Server或XAMPP,两者都有简单的设置指南。WAMP 专门将一个图标安装到您的系统托盘中,您可以从中停止和重新启动服务,以及修改 Apache 设置,例如为项目创建新的文件夹别名。

操作系统

作为一个本质上的 Unix 环境,OS X 上的可用选项比 Windows 多。但是,如果您想要像 WAMP 这样的“一体式”方法,具有干净且易于使用的界面,那么我们强烈推荐MAMP。

Grunt连接

Grunt是一个非常强大的安装工具,无论您是否将其用作 Web 服务器。从本质上讲,它是一个基于 JavaScript 的任务运行器,允许您自动执行繁琐耗时的任务。例如,我们在 Phaser 中使用它来构建我们的分发脚本。但它也可以使用插件Connect进行配置,以提供本地文件,充当 Web 服务器。

使用 Python 的简单 HTTP 服务器

如果您需要一个快速运行的 Web 服务器,并且不想搞乱设置 Apache 或下载应用程序,那么 Python 可以提供帮助。Python 带有一个简单的内置 HTTP 服务器,它可以提供来自任何本地文件夹的文件。

选择编辑器

您将需要一个编辑器来准备您的 JavaScript 代码。

示例:Sublime Text 这是 Phaser 团队用于构建框架和所有项目的编辑器。它甚至是编写本指南的编辑器。Sublime 应该被认为是一个非常强大的文本编辑器,而不是一个 IDE。

下载 Phaser

Phaser 3 可通过 GitHub、npm 和 CDN 获得:

  • 通过https、 ssh 或使用 GitHub Windows或Mac客户端克隆 git 存储库。
  • 下载为zip
  • 下载构建文件:phaser.js和phaser.min.js

通过npm安装:

npm install phaser

内容分发网络:

Phaser 位于 jsDelivr 上,这是一个“面向开发人员的超快速 CDN”。在您的 html 中包含以下内容:

或缩小版:

Hello World!

设置好编辑器、安装 Web 服务器并下载 Phaser 后,就可以创建一些东西并检查一切是否正常。

您需要发现您的“网络根”在您的机器上的位置。这是服务器在其中查找文件的文件夹。如果您在 Windows 上使用 WAMP,您可以通过单击系统托盘中的 WAMP 图标并从弹出菜单中选择“www 目录”来找到它。其他服务器将有其他确定位置的方法,但从这一点开始,我们将其称为“webroot”。

在 webroot 内部创建一个名为的文件index.html并将以下代码粘贴到其中:




    



    


打开您的网络浏览器并加载index.html页面。这可能就像在浏览器中输入localhost/或输入一样简单。127.0.0.1/或者您可能还需要指定端口号,这完全取决于您使用的服务器设置方法。

API 文档

打字稿定义

TypeScript 定义可以在文件types夹中找到。它们也在 中的类型条目中被引用package.json。根据您的项目,您可能需要将以下内容添加到tsconfig.json文件中:

"typeRoots": [
    "./node_modules/phaser/types"
],
"types": [
    "Phaser"
]

游戏状态

Class

通过

描述

StateManager

state

创建、管理和交换您的游戏状态。

State


您可以扩展的基本游戏状态对象。

装载机

Class

通过

描述

Cache

cache

缓存是存储和检索所有加载资产的地方。

Loader

load

加载所有外部资产类型(图像、音频、json、xml、txt)并将它们添加到缓存中。由 Statespreload方法自动调用。

LoaderParser


加载器用来处理复杂资产类型解析的静态类。

文本

Class

描述

Text

使用系统字体或 Web 字体显示文本,并带有可选的填充、阴影和描边。

BitmapText

使用位图字体文件的基于纹理的文本对象。

RetroFont

类似于 BitmapText 对象,但使用经典的精灵表。每个字符都是固定宽度的。

动画片

Class

通过

描述

AnimationManager

sprite.animations

在 Sprite 游戏对象上添加、播放和更新动画。

Animation


动画管理器创建的基础动画对象。

AnimationParser


Phaser Loader 在内部使用它来解析来自外部文件的动画数据。

FrameData


组成动画的 Frame 对象的集合。

Frame


动画的单帧。存储在 FrameData 对象中。

时间

Class

通过

描述

Time

time

所有 Phaser 时间相关操作所依赖的内核内部时钟。

Timer

time.create

包含一个或多个 TimerEvent 的自定义 Timer。可以使用一次,也可以设置为重复使用。

TimerEvent

time.add

单个时间相关的事件对象。属于 Phaser.Timer。

Tilemaps

Class

描述

Tilemap

一个 Tilemap 由一个或多个 TilemapLayers 和相关的瓦片数据组成。包含用于切片数据操作和 TilemapLayer 生成的方法。

TilemapLayer

Tilemap 中的单个图层。从 Phaser.Sprite 扩展并负责渲染自身。

Tileset

包含用于由 TilemapLayer 渲染图块的纹理和数据的对象。

Tile

具有相关属性的单个 Tile 对象。其中一个存在于地图中的每个图块中。

TilemapParser

用于解析外部加载的地图数据的静态类。通常由 Phaser.Loader 直接调用。

Phaser 3 示例

在本地创建一个index.html页面并将以下代码粘贴到其中:




     



    


这是一个标准的空网页。你会注意到有一个脚本标签正在拉入 Phaser 3 的构建,但除此之外,这个网页还没有做任何事情。现在让我们设置游戏配置。在标签之间粘贴以下内容:

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 200 }
        }
    },
    scene: {
        preload: preload,
        create: create
    }
};

config是一个非常标准的 Phaser 3 游戏配置对象。如果可以的话,我们告诉config使用 WebGL 渲染器,将画布设置为 800x600 像素的大小,启用 Arcade Physics,最后调用preload和create函数。preload并且create还没有实现,所以如果你运行这段 JavaScript 代码,你会遇到错误。在 之后添加以下内容config:

var game = new Phaser.Game(config);

function preload ()
{
    this.load.setBaseURL('https://labs.phaser.io');

    this.load.image('sky', 'assets/skies/space3.png');
    this.load.image('logo', 'assets/sprites/phaser3-logo.png');
    this.load.image('red', 'assets/particles/red.png');
}

function create ()
{
}

game是一个使用我们的配置对象的 Phaser Game 实例config。preload我们还为和添加了函数定义create。该preload功能可帮助您轻松地将资产加载到游戏中。在preload中,我们将 Base URL 设置为 Phaser 服务器并加载 3 个 PNG 文件。该create函数是空的,所以是时候填充它了:

function create ()
{
    this.add.image(400, 300, 'sky');

    var particles = this.add.particles('red');

    var emitter = particles.createEmitter({
        speed: 100,
        scale: { start: 1, end: 0 },
        blendMode: 'ADD'
    });

    var logo = this.physics.add.image(400, 100, 'logo');

    logo.setVelocity(100, 200);
    logo.setBounce(1, 1);
    logo.setCollideWorldBounds(true);

    emitter.startFollow(logo);
}

在这里,我们将天空图像添加到游戏中并创建粒子发射器。该scale值意味着粒子最初会很大,随着寿命的延长会缩小到零。

创建 后emitter,我们添加一个名为logo. 由于logo是物理图像,logo默认情况下被赋予物理体。我们设置了一些属性logo:速度、反弹(或恢复)以及与世界边界的碰撞。这些属性将使我们的标志在屏幕上反弹。最后,我们告诉粒子发射器跟随 logo - 所以当 logo 移动时,粒子将从它流出。

在浏览器中运行它,您将看到以下内容:

—END—

开源协议:MIT License

开源地址:
https://github.com/photonstorm/phaser

相关推荐

字体缩放(方式一)(字体缩放150%怎么做)

通过元素宽度和字数计算得到缩放简单实现如下:/***字体最大为视觉要求大小(maxFontSize);超出缩小字体显示,最小为minFontSize;最小字体时超出部分使用圆点(...);*p...

网页世界隐藏的神秘代码语言,竟能这样改变布局

CSS基础:选择器与属性CSS(CascadingStyleSheets)是用于控制网页外观的一门样式表语言。它通过定义HTML元素的显示方式来增强网页的表现力。CSS的选择器允许开发者精确地定位...

CSS属性值计算过程详解(css属性用来定义元素计算)

在CSS中,即使某些属性没有显式声明,浏览器也会通过**属性值计算过程**为每个元素的所有属性赋予最终值。这一过程分为四个关键步骤,以下将逐一解析。1.确定声明值浏览器首先检查所有**直接应用**到...

软网推荐:找回调整Windows 10字号功能

之前的系统,从WindowsXP到早期版本的Windows10,均有字体大小调整功能,但从创意者版Windows10以来,取消了之前的设置选项,取而代之的是自定义缩放比例设置。使用这个功能调整过...

Excel中如何设置文本框属性,实例代码讲解

Excel不仅可以对数据进行处理,而且也可以图形化数据,直观显示数据表达的内容。本节介绍一个很重要的对象,Characters,字符对象,使用Characters对象可修改包含在全文本字符串中的任...

CSS 字体样式(css中字体)

本节我们来讲字体样式,之前我们学习HTML的时候学过一些用于字体加粗、倾斜的标签,但是使用标签来实现的效果肯定没有我们通过CSS中的样式来的方便。接下来我们会给大家介绍下面这几个属性的使用:通...

PC网站建设必备代码知识:HTML基础与应用技巧

在PC网站建设的相关课程里,代码扮演着至关重要的角色。只有熟练运用正确的代码,我们才能打造出功能完善、用户体验出色的PC网站。接下来,我会详细讲解在PC网站建设环节中必须了解的代码知识。HTML基础代...

让你大跌眼镜的疯狂 HTML 和 CSS 技巧

今天,分享一个让你大开眼界的技巧。通过使用这个技巧,你可以将整个网页变成一个CSS编辑器。没错,你从未见过这种方法。当我第一次尝试时,我完全被震惊到了。现在,让我们开始吧!步骤1首先,创建一个基础的...

jQuery EasyUI使用教程:创建一个链接按钮

jQueryEasyUI最新版下载>本教程主要为大家展示如何使用jQueryEasyUI创建一个链接按钮。通常情况下,使用“button/”元素来创建一个按钮;使用“a/”元素来创建链接按钮...

React 19 有哪些新特性?(react100)

如果你对React18还不熟悉,欢迎阅读之前的文章《React18全览[1]》最近React发布了V19RC版本,按照惯例,我们对React19的新特性进行一次深度的体验学习...

Java注解探秘:为什么@PostConstruct能解决你的初始化难题?

你是否在Spring项目中遇到过这样的困扰:明明依赖注入已经完成,但某些配置就是无法正常加载?手动调用初始化方法又容易引发空指针异常?这就是@PostConstruct注解大显身手的时候了!@Post...

AI驱动的表单自动填写(ai置入表格)

我们都同意,填写表格是一项枯燥且耗时的任务。如果我们可以创建一个可以为我们填写表格的AI助手,让我们将时间投入到更有建设性的任务中,那会怎样?AI助手将能够通过调用以表单字段为参数的函数来填写表...

从零到一:小程序设计新手如何快速上手?

开发环境搭建对于小程序设计新手而言,搭建合适的开发环境是首要任务。以小程序为例,其官方提供了功能强大的开发工具——开发者工具。首先,新手需前往官方开发者平台,在页面中找到“工具下载”板块,根据...

JavaSwingGUI从小白到大神-6(续)(java从小白到大牛怎么样)

接上一篇《JavaSwingGUI从小白到大神-6》,因本篇文章3万多字,头条一篇发不完,只能分开发。同事查询面板:CompanyFind.javapublicclassCompanyFind{...

C# winform界面假死(c#程序假死)

针对C#WinForm界面假死问题,以下是分步解决方案:1.使用异步编程(async/await)将耗时操作移至后台线程,保持UI线程响应。步骤:将事件处理函数标记为async。使用Task....