重拾H5小游戏之入门篇(二)
上一篇,水了近千字,很酸爽,同时表达了“重拾”一项旧本领并不容易,还有点题之效果。其实压缩起来就一句话:经过了一番记忆搜索,以及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小游戏之入门篇(二)的更多相关文章
- Egret白鹭H5小游戏开发入门(二)
前言: 昨天的文章中简单的介绍了Egret白鹭引擎从安装到基本的使用配置等问题,今天着重介绍H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明,开始布局等等. 整体概况: 根据上一篇 ...
- Egret白鹭H5小游戏开发入门(一)
前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJS,玩得了Egret,又学过PIXI.js. ...
- Egret白鹭H5小游戏开发入门(三)
前言: 在上一篇文章中着重介绍了H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明等等,那么今天主要是涉及到场景的创建,loading的修改等等的代码编写. 对于这一节,我在讲解的过 ...
- 开发H5小游戏
Egret白鹭H5小游戏开发入门(一) 前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJ ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- 原生JS实现的h5小游戏-植物大战僵尸
代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...
- 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条
本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...
- 青瓷qici - H5小游戏 抽奖机 “one-arm bandit”
写在前面 本文实现一个简单的抽奖效果,使用青瓷qici引擎,其中应用了Tween动画,粒子系统,遮罩,UI界面布局,项目设置,发布等功能呢. 目前开发采用1.0.7版本,后续如果界面有所变化请参考这个 ...
- PC游戏编程(入门篇)(前言写的很不错)
PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...
随机推荐
- vue项目在执行npm install时报错
npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ETIMEDOU ...
- 【译】ASP.NET Core updates in .NET 5 Preview 8
.NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...
- 【Android】Android开发实现带有反弹效果,仿IOS反弹scrollview详解教程
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- P3419 [POI2005]SAM-Toy Cars
Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上 ...
- (Python)正则表达式进行匹配
import os import re pattern=re.compile(r'(\d{4})-(\d{2})-(\d{2})-b(\d{3})') // 要匹配的目录格式 for root,dir ...
- 查看CentOs6.5/7的系统版本号
在centos6.5上用 [root@msg45 ~]# lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0- ...
- 在Python程序中执行linux命令
import commands print commands.getstatusoutput('ls') 输出: (0, '1.py\nwork.nfs') 参考文档: https://blog.cs ...
- Ajax获取接口数据,url拼接参数跳转页面,js获取上一级页面参数给本页面
1.Ajax获取接口数据 function demo(){ //假设请求参数 var requestBody = [{ "name":"zhang", &quo ...
- 你还记得 Tomcat 的工作原理么
SpringBoot 就像一条巨蟒,慢慢缠绕着我们,使我们麻痹.不得不承认,使用了 SpringBoot 确实提高了工作效率,但同时也让我们遗忘了很多技能.刚入社会的时候,我还是通过 Tomcat 手 ...
- [LeetCode] 139. 单词拆分(DP)
题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没 ...