Bootstrap

想要做网页游戏怎么办 ?PixiJs篇(一)

作为一个不太正经的前端开发人员,为了生存一定得想办法提升自己的能力呀!!!

想学习一些与前端能搭的上边的新知识,想做一个能在web上运行的小游戏练练手︿( ̄︶ ̄)︿,就算不提高能力也得提高自己的眼界吧,虽然技术饭可能吃不到老,开发人的痛 o(╥﹏╥)o

时代变了

实际上空城机(本人,下文中可能也会这样称呼)之前就已经在学习与之相关的一些知识了。当前如果想要在web端网页上做一些小游戏,现在基本上也就是HTML游戏了吧,毕竟flash已经在逐步退出了,时代变了。在当初网页上面很多小游戏都是以flash为主开发的,比如鼎鼎有名的半瓶神仙醋这位开发人员就是开发了不少的flash小游戏。

只要是接触过互联网的人,无论年龄,对Flash都不陌生,比如早期在线视频、Flash 动画以及网页版小游戏等都离不开它的支持。直到今天,很多网站上的内容仍需通过Flash插件才能显示,之前有个火车系统网站应为flash停用的事件还是挺火的(),不过其不安全、泄露隐私、进程服务无法彻底终止等特性也始终让人诟病。

当初的4399之类的小游戏网站也在不断的转型,从flash的时代中走出来,还是挺怀念以前的《死神VS火影》之类的小游戏的。

flash的消失:Adobe正式公布了2020年12月31日,终止支持Flash。这个日期后,Adobe将不会发布Flash的任何更新与安全补丁。此外,Adobe还将从官方网站中删除Flash Player早期版本的所有存档,并阻止基于Flash的内容运行。

学习的选择

一般学习流程步骤如下了解相关游戏背景知识与专业术语(理解场景(页面),sprite(控件) ,时间轴(timer,定时器)等)了解具体语言以及ide,以及游戏引擎比如dom,cocos等

事实上在目前一些前端游戏的开发上,选择无非就是那么几样。对于空城机这种业余的,刚开始入门还是从简单的js库进行入手吧。之后再学习一下这个工具。在HTML上,入门的js库也许就那几个选择吧,虽然空城机之前已经拜过的山头了,但是pixi.js的山头空城机也准备拜一下,毕竟3D的门总是看起来比2D更加高大。

之前写过three.js的学习记录,读者们有兴趣的话阔以去瞧瞧空城机的这一个系列。

......

因为不是学生了、白天要上班的原因,直接上班看视频学习过于嚣张啦,所以先从文档开始慢慢学起来吧!

网上找的建议:

如果你不用游戏引擎。那就写原生html,js,css,或者使用canvas/svg。

如果使用游戏引擎,又想用前端的技术栈,那就用cocos creator。
一次开发,多端打包。整个引擎非常的像Unity3d,可以理解为是2d版本的unity。使用的是js作为脚本语言。
cocos creator暂时只能做2d游戏。

如果你想做3d游戏。那就直接开搞Unity3d吧。
不过虽然Unity3d也支持js作为脚本语言,但实际上大部分公司和团队选择的是C#,
大部分教程也是以C#作为脚本语言,所以如果要上手Unity3d,那就需要学习C#

正文开始

前面废话水了一大堆的字呢┗( T﹏T )┛

接下来才是有关于pixi的正菜......

什么是Pixi.JS?

官方说明:The aim of this project is to provide a fast lightweight 2D library that works across all devices. The PixiJS renderer allows everyone to enjoy the power of hardware acceleration without prior knowledge of WebGL. Also, it's fast. Really fast.

译文:这个项目的目标是提供一个快速轻量级的2D库,它可以跨所有设备工作。PixiJS渲染器让每个人都可以享受硬件加速的强大功能,而无需事先了解WebGL。而且,速度很快。真的很快。

好了,从上面这一段pixi开发者的说明中,空城机了解到了pixi.js是一个轻量级的2D库,能够用于HTML的动作渲染,并且由于和webgl对接,所以我们无需担心pixi.js的渲染性能问题,pixi.js非常快

接下来看另一份有关pixi比较全面的介绍(下面这段当然是抄的)

在此介绍两个对于Pixi.Js学习很有用的网站:

其中的中文网对于我们学习很便利,但是有个缺点,时代变了呀,中文网中讲述的一些pixi的方法可能已经改变了,如果下载的是最新版本的pixi.js那我们就可能使用不了这些方法了(就和空城机当初学three.js一样)

所以另一个API网站就显得尤为重要了,虽然API网站是英文的,对于我这种英文不好的学习者来说非常非常不友好,但是里面能够找到最新的方法。所以英文的瑕疵我阔以接受了,生活就像......,你不能反抗,那就只能接受了。

怎么开始干活?

找到参考教程后,那我们就阔以按照教程来慢慢学习起来了。

First

首先,第一步,我们先把pixi.js下载下来并安装好吧。

在中文网的教程当中,提供了GitHub仓库地址:

可以通过仓库来获取pixi.js文件,并且使用script标签进行导入文件

但是由于本人创建了一个vue cli项目,所以我选择使用npm进行下载。下载的语句也很简单,注意需要在pixi后面加.js。 使用语句下载完pixi.js后,本人并没有在package.json中找到下载的pixi,实际上已经被下载好了啦。

npm install pixi.js

我们阔以使用以下代码进行测试,来试一下到底是否已经导入pixi.js。

vue项目中,写在main.js中进行测试即可。

import * as PIXI from 'pixi.js'
Vue.use(PIXI)
/*********** 如果使用script标签,不需要上面两句 ***************/
// 测试pixi是否安装完成
let type = "WebGL"
if(!PIXI.utils.isWebGLSupported()){
  type = "canvas"
}
PIXI.utils.sayHello(type)

出现啦,F12打开页面的控制台,会发现PixiJS能够成功的进行使用,并且还会告诉你当前PixiJS的版本。中文网的教程使用的版本是PixiJS 4.4.5。

Second

导入了pixi.js工具,那么赶紧搭建舞台吧,有了舞台,人物们才能够粉墨登场呀

pixi.js搭建出的场景也是在上面的,这一点想必大家也都见怪不怪了

创建一个环境:

使用Pixi上的Application对象创建一个矩形显示区域。 它会自动生成一个HTML 元素,然后在canvas画布上显示图像。PIXI.Application会自动选择使用Canvas或者是WebGL来渲染图形,这取决于您的浏览器支持情况。有一个对象。在本例中,它的属性用来设置Canvas画布的宽度和高度(以像素为单位)。您可以在这个options对象中设置更多的可选属性;下面是如何使用它来设置反锯齿,透明度和分辨率。




生成了一个透明的canvas标签,宽高为300像素

生成的pixi:

当然为了看的清楚一些,将背景设置成有色的吧,renderer.backgroundColor

let app = new pixi.Application({
  width: 300,         // default: 800 宽度
  height: 300,        // default: 600 高度
  antialias: true,    // default: false 反锯齿
  transparent: false, // default: false 透明度
  resolution: 1,       // default: 1 分辨率
  backgroundAlpha: 0   // 设置背景颜色透明度   0是透明
});
app.renderer.backgroundColor = 0x8b968d;  // 设置canvas背景颜色

效果:

如果需要将舞台铺满全屏,接下来阔以设置canvas的大小以及监听形变

initState() {
  //Create a Pixi Application   创建一个pixi应用
  let app = new pixi.Application({
    width: 300,         // default: 800 宽度
    height: 300,        // default: 600 高度
    antialias: true,    // default: false 反锯齿
    transparent: false, // default: false 透明度
    resolution: 1,       // default: 1 分辨率
    backgroundAlpha: 0   // 设置背景颜色透明度   0是透明
  });
  console.log(app)
  app.renderer.backgroundColor = 0x8b968d;  // 设置画布背景颜色
  // app.view是canvas画布  生成一个256像素×256像素的黑色canvas元素
  document.getElementById('pixi1').appendChild(app.view)
  app.renderer.view.style.position = "absolute";
  app.renderer.view.style.display = "block";
  app.renderer.autoResize = true;  //为了确保画布的大小调整到与分辨率匹配
  app.renderer.resize(window.innerWidth, window.innerHeight);    //改变舞台大小
  window.onresize = function () {
    app.renderer.resize(window.innerWidth, window.innerHeight);
  } 
  // stage是舞台  stage(舞台)是Pixi的Container(容器)对象
  console.log(app.stage)
}

效果:

关于pixi.js创建的属性其实还有很多,这里就不一一列举了,需要使用了赶紧去查看

Third

有了舞台,那么人物也要出场啦!

任何你想要在渲染器中可见的东西都必须添加到一个特殊的Pixi对象中,这个对象叫做。就是上面的app.stage可以打印出来看看。

是Pixi的对象。你可以把一个想象成一种空盒子,它会把你放进去的东西组合在一起并储存起来。对象是场景中所有可见事物的根容器。你在里放的任何东西都会在canvas画面上渲染出来。现在是空的,但很快我们就会开始把东西放进去。

而舞台之上的表演者,也就是人物被称之为sprite(精灵)。这一种的特殊图像对象。您可以控制它们的位置、大小和其他属性。

创建方法有三种:

  • 通过单个图像文件。

  • 通过。

  • 通过。

本人有一篇文章中也有提及纹理贴图怎么制作:

这里因为我困了,就简要写一发一下代码了。

这是由我之前通过TexturePacker生成的纹理贴图集,。

生成的json主要说明了是由三张图片构成的,具体素材我扔到网盘了,有兴趣可以下载一下:

提取码:gjhi

json中说明了位置信息,也是之后使用时判断和裁剪人物与场景的判断依据

"anim.png":
{
	"frame": {"x":212,"y":1,"w":50,"h":88},
	"rotated": false,
	"trimmed": true,
	"spriteSourceSize": {"x":0,"y":2,"w":50,"h":88},
	"sourceSize": {"w":50,"h":90}
},
"changjing.png":
{
	"frame": {"x":1,"y":1,"w":209,"h":214},
	"rotated": false,
	"trimmed": false,
	"spriteSourceSize": {"x":0,"y":0,"w":209,"h":214},
	"sourceSize": {"w":209,"h":214}
},
"damu2.png":
{
	"frame": {"x":212,"y":91,"w":56,"h":87},
	"rotated": false,
	"trimmed": true,
	"spriteSourceSize": {"x":0,"y":0,"w":56,"h":87},
	"sourceSize": {"w":60,"h":90}
}},

废话不多说,赶紧看看效果吧

就决定是你了,代码兽,赶紧上吧




效果:

呼,结束了!

哈哈哈,终于完成了pixi.js学习记录第一篇