上一篇,水了近千字,很酸爽,同时表达了“重拾”一项旧本领并不容易,还有点题之效果。其实压缩起来就一句话:经过了一番记忆搜索,以及try..catch的尝试后,终于选定了Phaser 3.0作为我的小游戏开发引擎。

从这篇开始,我要开始拿出干货,进入实战。大家准备了好吗?一个字——干!

开发环境

首先说明一下,我的开发环境是VS Code + TypeScript。如果大家手头上没有用得比较顺手的TS开发环境,可以参考官微软方文档弄一个:

https://code.visualstudio.com/Docs/languages/typescript

项目搭建

项目伊始,先准备个大纲。然而这个大纲正正体现在项目的文件目录结构当中。

dist/
├── index.html
├── scripts/
│ ├── game.js
│ └── phaser.min.js
src/
├── game.ts
├── tsconfig.json
└── typings/
├── phaser.d.ts
└── matter.d.ts

说明一下:

两个目录: src 是ts源码目录; dist是发布目录;

/dist/index.html是入口html页面。负责加载scripts目录中的phaser.min.js,以及游戏应用执行脚本game.js(由源码目录中game.ts编译生成);

/src/tsconfig.json TypeScript编译参数的配置;

/src/game.ts 游戏应用的ts源代码(我的demo游戏代码量比较少,所以全写在这,懒得细分了);

/src/typings目录里面的是phaser的ts定义文件,Phaser的GitHub有提供。

下面先看看tsconfig.json配置

{

"compilerOptions": {

"noImplicitAny": false,

"noEmitOnError": true,

"removeComments": true,

"sourceMap": true,

"target": "es5",

"outDir": "../dist/scripts",

"module": "amd"

},

"files": [

"./game.ts"

]

}

其中,有两个关键的配置项需要留意的:

outDir - 配置ts编译后输出的目录

files - 配置编译的入口文件。当然我的源码只有game.ts一个文件,没有其他可选的。假设您的项目还有其他ts文件,而且都被game.ts所引用,那么这里也只是需要配置game.ts就够了,因为被它引用的ts文件也会连带被compile输出,不用额外配置进来。

接下来再看看index.html,其主要作用是js的引入和显示容器(说的就是那个div)的定义。

数独游戏

游戏场景
终于轮到正菜上桌了!game.ts来了。

class MyGame {

constructor() {

// 游戏开始前的场景

const enterScene= {

key: 'enter',

active: true,

preload: function () { that.preload(this) },

create: function () { that.enterGame(this) }

};

// 游戏进行中的场景

const playScene = {

key: 'play',

active: false,

visible: false,

create: function () { that.playGame(this) }

};

// 游戏结束的场景

const endScene = {

key: 'end',

active: false,

visible: false,

create: function () { that.endGame(this) }

};

// 游戏引擎初始化

this.game = new Phaser.Game({

type: Phaser.AUTO, // 引擎渲染方式:Canvas、WebGL

backgroundColor: 0x666666,

scale: {

parent: "playground",

autoCenter: Phaser.Scale.CENTER_BOTH,

mode: Phaser.Scale.FIT,

width: 800,

height: 600

},

scene: [enterScene, playScene, endScene]

});

}

// 资源预加载

preload(s:Phaser.Scene) {

}

// startScene初始化回调

enterGame(s:Phaser.Scene) {

}

// playScene初始化回调

playGame(s:Phaser.Scene) {

}

// endScene初始化回调

endGame(s:Phaser.Scene) {

}

}

window.onload = () => {

new MyGame();

}

以上的代码很简单,首先定义一个类MyGame,在其构造方法中进行游戏引擎的初始化。至此,一个空白的游戏场景就这样构建出来了,接下来任务就开始基于游戏玩法的设计来编写代码逻辑,然后在游戏场景中呈现出显示对象和实现交互方法。

有必要提及一下的是,我的游戏项目是个多场景应用。因此代码的开始,我定义了置三个场景【enterScene、playScene、endScene】,分别应用于【游戏开始、游戏进行、游戏结束】三个阶段做界面场景切换。这跟单场景的应用略有不同,具体差异大家可以打开Phaser的官方文档看看,这里不赘述了。

OK,今天的《入门篇》就先写到这里,我们在《实战篇》再会吧!

重拾H5小游戏之入门篇(二)的更多相关文章

  1. Egret白鹭H5小游戏开发入门(二)

    前言: 昨天的文章中简单的介绍了Egret白鹭引擎从安装到基本的使用配置等问题,今天着重介绍H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明,开始布局等等. 整体概况: 根据上一篇 ...

  2. Egret白鹭H5小游戏开发入门(一)

    前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJS,玩得了Egret,又学过PIXI.js. ...

  3. Egret白鹭H5小游戏开发入门(三)

    前言: 在上一篇文章中着重介绍了H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明等等,那么今天主要是涉及到场景的创建,loading的修改等等的代码编写. 对于这一节,我在讲解的过 ...

  4. 开发H5小游戏

    Egret白鹭H5小游戏开发入门(一)   前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJ ...

  5. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  6. 原生JS实现的h5小游戏-植物大战僵尸

    代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...

  7. 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条

    本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...

  8. 青瓷qici - H5小游戏 抽奖机 “one-arm bandit”

    写在前面 本文实现一个简单的抽奖效果,使用青瓷qici引擎,其中应用了Tween动画,粒子系统,遮罩,UI界面布局,项目设置,发布等功能呢. 目前开发采用1.0.7版本,后续如果界面有所变化请参考这个 ...

  9. PC游戏编程(入门篇)(前言写的很不错)

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

随机推荐

  1. python os库的使用方法 + 自动化安装第三方库脚本

    一.os库基本介绍 os库提供通用的.基本的操作系统交互功能,包括windows.Mac os.linux os库是python标准库,包含几百个函数 常用路径操作.进程管理.环境参数等几类 路径操作 ...

  2. [apue] 一图读懂 unix 文件句柄及文件共享过程

    与文件相关的一些概念 在开始上图之前,先说明几个和 unix 文件密切相关的术语,方便后续讨论使用 文件句柄 / 文件描述符 (file descriptor 或 FD):描述一个打开文件相关属性的类 ...

  3. MAC 上编译安装nginx-rtmp-module 流媒体服务器

    MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...

  4. KUDU 学习笔记

    Kudu 现存系统针对结构化数据存储与查询的一些痛点问题,结构化数据的存储,通常包含如下两种方式: 静态数据通常以Parquet/Carbon/Avro形式直接存放在HDFS中,吞吐能力大,适合离线分 ...

  5. 20190923-03Linux时间日期类 000 011

    1.基本语法 date [OPTION]... [+FORMAT] 2.选项说明 表1-20 选项 功能 -d<时间字符串> 显示指定的“时间字符串”表示的时间,而非当前时间 -s< ...

  6. 在Oracle中十分钟内创建一张千万级别的表

    小表不会产生性能问题,大表才会.要练习SQL调优,还非得有大表不可.但数据不会自然产生,没有数据时如何创建一张千万级别的大表呢? 之前,我想用Oracle的批量插入语法去插入数据,此语法如下: INS ...

  7. 关于ES6的let、const那些事儿

    Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...

  8. Hexo博客迁移

    Hexo用户指南 - 博客迁移 GitHub+Hexo搭建博客的过程比较平滑,但是它的配置却非常耗时,一旦电脑出现问题或者需要在另外一台电脑上写博客,那么Hexo博客的迁移非常就让人头疼.下面参考其他 ...

  9. java集合类源码学习一

    对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...

  10. 2020重新出发,NOSQL,MongoDB分布式集群架构

    MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...