Web前端可以转行做游戏吗?

作者:ManfredHu
链接:http://www.manfredhu.com/2018/03/15/31-laya-game-tips/index.html
声明:版权所有,转载请保留本段信息,谢谢大家

LayaBox

Web前端最近都在跨界!!现在又伸手到游戏领域了。但是真的那么好跨界吗?请让我一一道来。

Canvas和WebGL的出现其实让Web游戏有了实现的可能,但是让我们用ctx一个个画,效率还是低了点,所以需要游戏引擎。它帮助我们去动态渲染游戏每一帧的元素。

业界比较著名的几个H5游戏引擎,有Egret(白鹭),Layabox,Three.js,coco2d-js等等,详情可以看知乎的回答
因为我们团队不是一开始做游戏的,我们是传统意义上的前端团队,从web发家的,起初做的是电商类的业务——拍拍。所以这里我们综合几家游戏引擎,选择了Layabox。
有如下有点吧:

  1. LayaAir是一个优秀的适用于多端的游戏引擎,配备有丰富的组件,有自己的IDE可以快速构建布局等,不需要写类似CSS的代码
  2. 支持html的页面渲染,就是说你可以让游戏引擎跟web页面,混用(这在一些类似文本的页面非常有用)
  3. 支持2D、3D甚至VR方面的开发。性能也足够优秀
  4. 对Web前端普遍的上手难度也较其他引擎框架简单很多
  5. 不需要写重构(CSS)代码

其实我们团队之前也是做得H5竞猜小游戏,不过是基于DOM的,用CSS3做动画。但是发现CSS3操作复杂动画,有很多缺点:

  1. 复杂动画支持度非常差
  2. 页面元素太多,渲染性能差
  3. 很多复杂的需求做起来很耗时
  4. 玩家手机容易发烫(页面元素多,动画复杂)

因此,我们经过预研和讨论,果断走出传统Web的开发模式,拥抱传统的游戏开发!!当然这里肯定不是一帆风顺的,从Web前端转向游戏开发,还是有非常多的坑点的。

首先需要摆脱HTML和CSS,你不是在做页面,你是在做一个游戏!!游戏的逻辑占据了一个游戏80%的工作量,所以你很多时候是在写JavaScript代码,这不是问题,其次,你需要拥有面向对象编程的思想。这可能是很多老前端欠缺的,因为JavaScirpt说到底是一门面向函数、面向过程的语言。大家知道模块化,但是却还是习惯写function而不是ES6的class

这里因为平台也在转型向ES6靠近,所以大胆采用了ES6+Babel+Webpack的模式,甚至于在做Weex、小程序、Web三端融合。即一份代码,可以在三个平台跑。扯的有点远哈,下面开始正文,我们不说用法,具体是说一些坑点,和优缺点对比。

游戏引擎不适用的地方

游戏引擎这东西在动画一块是真心好用,可以高度还原设计师的动画,可是其没有网页的排版布局,更多的布局应该是通过x、y、更改pivot、anchor属性来实现。
CSS可以很快速的通过代码进行相关布局(flex、float、position等属性),网页那种自上而下的内容排版可以自动适应内容,对文字处理十分便捷。

针对各自的优缺点,从实现的便捷性来说,游戏主场景(动画极多)的情况下,为了提高用户的体验,应该用游戏引擎来写。
而对一些活动浮层、投注记录、游戏规则等有大量图片文本的页面,应该用传统的Web网页来编写,这样才是物尽其用的做法。

在这个背景下,游戏开发的前端需要掌握多好几种技能——简单的游戏开发的技能、重构部分的构建技能(团队大前端的趋势下,去除重构岗位,重构工作由前端接管),可以说工作量翻了一倍。但是在业务侧来考虑,因为减少了相关的中间环节,需求迭代可以更快速的落地。

Laya的IDE使用要注意的地方

LayaIDE提供一个组件库,如list列表,tab按钮切换等等简单的Web组件,可以直接拖拽使用而不用自己用代码再实现一次。
但是IDE自带的很多组件有坑点,如list组件的selectHandler触发并不灵敏,数据源重新绑定后会出现点击无法响应的问题,这个时候要绑定mouseHanlder来代替点击事件等。
IDE的使用对于不熟悉的人来说上手并不简单,熟练后可以提高效率。具体可以看官网的介绍

sceneColor并不起作用

这个属性是IDE的一个配置属性,在引用的时候并不会起作用。可以理解为是一个IDE的背景色,可以让你在用IDE编辑的时候看的更清楚。
sceneColor并不起作用
如果你需要更换背景色,应该通过绘制一个底部的矩形来实现。


1

this.graphics.drawRect(0, 0, this.stage.width, this.stage.height, ‘#404d6f‘); //设置背景颜色

var和name

var

一般组件view下不管嵌套的层级多深,只要有一个var属性的命名,都可以用this.xxx来获取到这个var属性得带组件的引用,并对其进行逻辑操作。

name

而name在特定的组件内name有自己的命名规则,如list下的box,命名为render,可以自动识别该box为list内部渲染节点,设置list的repeat等值,直接简便的实现某些功能。
再譬如dialog界面,我们设置btn的name为close、yes、no等值,可以直接实现关闭dialog窗口的功能等等。name在这个组件下面也是唯一的,可以用来区分不同的组件。

top、right对x,y的影响

如果组件设置了top、right等值,在对其进行x,y变化是无效的。
解决方法:IDE通过这些属性设置好布局要取消掉,会转化为对应的x、y值,此时可以操作

图集图片过大导致图片加载失败

之前按照引擎官方人员的建议设置最大合集图片为2048乘以2048,后面经过我们的测试发现1024宽高比较适配大部分机型,即图片最大不能超过1024,否则微信手Q会有图片load时间过长导致失败的问题。
这里可能是部分合并的大图片下载失败,也可能是全部下载失败。然后引擎会单独去下载每个碎片文件,而服务器是没有这些文件的,导致下载全部返回404。应该尽量避免这种情况发生。

显示区域与点击区域并不完全相等

用一句话来说就是:你看到的并不一定是真实的。如我要完成收起按钮,然后隐藏整个浮层。
但是你明明可以看到,绑定的点击事件却没有触发。
这是因为这个层级的高度或者宽度太小,被遮挡这部分是不会触发的。但是是可见的

分离代码和工程

起初是因为不想在LayaIDE下写代码,所以分成了两部分,后面发现这种形式还是非常OK的,因为Laya工作人员不是传统前端开发,他们的IDE是类似Atom的Electron做的,所以其实运行起来编码体验并不是太好。其次是因为IDE会生成图片(png)和图集(atlas)文件,这些图片类的静态资源,更新频率还是非常高的。如果你只需要修改代码,或者只要修改图片图集,发布一次就好了,不需要同时发布两种。

这样的分离,代码你可以按照你喜欢的方式来写,比如webpack配置工程,比如文件摆放,该怎么放怎么放。再把Laya生成的东西拷贝进来就好了。

设计稿和工程大小

这里我们设计稿和IDE的宽度高度是完全对应的,所以不存在换算的问题。也不需要类似CSS的做REM兼容等等操作。你设定宽度是750,高度会自动拉伸,但是显示的页面层级,需要在初始化的时候拉伸一下,不然还是IDE里面设定的宽高,当然如果你害怕上面提到的点不到,也可以设定一个非常大的值。

Object.assign兼容

Object.assign是ECMAScript标准的合并对象属性的方法,类似有jQuery的extend等等。
如果你抛弃了jQuery和Zepto等懒得写extend方法,又拥抱了ES6,那你可以像我这样找polyfill来兼容,这里babel官方有个模块
也可以自己选择做兼容,在入口开始的时候载入兼容文件就好。

抗锯齿问题

这个问题是在WebGL下(Canvas不会),会出现graphics.drawCircle绘制的圆环有锯齿问题。如下图:
锯齿问题
左边为没有设置抗锯齿,右边设置了抗锯齿。


1

2


Laya.Config.isAntialias=true; //开启抗锯齿,会消耗一些性能

Laya.init(Browser.clientWidth, Browser.clientHeight, WebGL);

mask遮罩不支持抗锯齿

有无锯齿处理的区别
如图,下边是没有优化前的,锯齿严重。上边那个图是优化后的,明显边框清晰了很多。
这里之前的思路是矩形头像和mask遮罩为一个整体在前面,然后内边框和外边框层级在后面,但是这样的话,mask遮罩部分现在laya还不会抗锯齿,所以这里对公共头像组件进行参数扩展,加了zOrder参数。让边框盖在头像上,就可以达到抗锯齿的作用。
最后实现的思路如下图层级所示。
头像层级

Laya几种优化的写法

用Laya自带的属性获取像素比


1

2

3


//var browserHeight = document.body.scrollHeight * window.devicePixelRatio;

var browserHeight = Laya.Browser.height;//会考虑设备像素比,而且会针对特定机型调整补全

`

这个不用自己算了,Laya.Broswer现在可以获取得到了。简化了运算过程

用.super()方法继承父类

Laya.class定义的时候会在原型定义.super方法,直接用就好。两种用法等价,但是看起来.super更简单把?
可能有一些例子是通过xxx._super.call(this)继承父类的,其实直接xxx.super(this)就好了。_super还是看成私有属性好了。

原文地址:https://www.cnblogs.com/manfredHu/p/8571277.html

时间: 2024-12-13 05:08:13

Web前端可以转行做游戏吗?的相关文章

web前端多少岁不能做了

互联网行业的告诉发展也带动了前端的高速发展,那么对于高度发展的前端来说,web前端多少岁不能做了,这是一个让人比较关心的问题. 据统计:学习Web前端的人群年龄集中在20-30年龄阶段,20-29年龄占据50%之多,大量的年轻人加入到web前端开发行业中来,web前端开发在中国正处于快速发张阶段,如果你是刚毕业,或处于工作迷茫期,并且对web前端感兴趣,加入前端开发领域也是非常好的选择. Web前端的工资情况: 全国前端开发平均工资:¥9541元/月,最低工资2K-3K,最高工资20K-30K.

想做web前端工程师应该学习些什么?

偶然间看到这篇文章,感觉博主写的挺不错的,如果你想做web前端工程师的话,建议您阅读以下这篇文章,其实web前端工程师所做的工作其实就是网站设计,有些小公司的美工其实就是做web前端的.这篇文章对于想学web前端工作的人有很大的帮助,如果您是做SEO的,也建议您学习下博主推荐的这些课程,或许对你以后的职业.薪资都有很大的帮助! 遇到很多新手,都会问,如果要学习web前端开发,需要学习什么?难不难?多久能入门?怎么能快速建一个网站?工资能拿到多少?还有些让我推荐一些培训机构什么的要去学习.我建议是

如何深入了解Web前端的未来前景,并且用更有效率的方式去学习

随着互联网在中国的发展,只要跟互联网计算机领域相关的工作,都成了每一年的热门,从2015年开始,web前端的需要量,像火箭一样"嗖"的一下就上去了.现在各种传统行业如电子.机械.建筑等并不被年轻人所青睐,互联网时代的年轻人更加喜欢快捷的.方便的,信息化的工作,转行做web前端的就是最多的,同时web前端岗位也是需求最大的.而当我们决定学习一个技能的时候,首先会考虑的以后发展的前景如何,然后就是是否难学,零基础学不学的会,今天小编就来为你揭开WEB前端的神秘面纱,认真看完. 我是一个做w

五分钟带你了解年薪50W的Web前端开发工程师需要掌握什么?

进入一个 新行业肯定是看好这个行业的发展前景,那么web前端开发的前景到底怎样呢? 据悉,目前web前端工程师的年薪待遇平均在10万以上,高级HTML前端工程师年薪达30-50万,很多企业对于与web前端相关的技术职位更是求贤若渴. 以目前的互联网企业为例,他们都十分注重前端的设计.因为,只有先做好前端技术.做好客户体验一切才有可能.用户体验做好,才有人访问,访问的人多了,才会优化后端,才做客户分析,公司上市了,才从大量数据做数据分析,获得更有价值的数据信息.所以,一些互联网创业公司也是如此,在

如何正确学习web前端流程以及如何找工作

解释一下web前端工作是做啥的,Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/Flash等各种Web技术进行客户端产品的开发.完成客户端程序(也就是浏览器端)的开发,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web开发,致力于通过技术改善用户体验. 个人背景: 首先我的前端是自学的,而那个时候并没有前端的称呼,那个时候叫网页制作,所以我们当时是学Java,所谓的web前端其实就是顺带学的,并没啥难度,我学编程

web前端工程师在移动互联网时代里地位问题

支付宝十周年推出了一个新产品:支付宝的十年账单,我也赶个时髦查看了一下我的支付宝十年账单,哎,感慨自己真是太屌丝了,不过这只是说明我使用淘宝少了,当我大规模网上购物时候,我很讨厌慢速的快递,所以我大部分消费都贡献给了像京东这样具有火箭般快递速度的电子商城了.不过在支付宝十年账单里,有个统计数据引起了我的危机意识,在中国一些偏远或者是经济欠发达的省份,电子购物在居民的全部消费里的占比比发达地区高多了,而这个的助推剂居然是移动互联网在中国的普及,在中国使用智能手机和平板电脑购物的人们已经远超使用PC

转 WEB前端性能分析--工具篇

在线网站类: WebPageTest 说明: 在线的站点性能评测网站,地址http://www.webpagetest.org/ 补充: 其实这网站也是个开源项目,所以支持自己搭建一个内部的测试站点 ShowSlow 说明: showslow是yslow的数据收集与展示平台http://www.showslow.com/,它是一个开源的php项目,可以用来与firefox的yslow插件.page speed插件或者dynatrace通信,收集插件或程序所发送过来的信息并集中展示.只需要在dyn

大公司和小公司的web前端岗位,工作内容有哪些不同?

web前端岗位可以做哪些工作? 泛泛来说,会有这么些岗位: 网页制作.网页制作工程师.前端制作工程师.网站重构工程师.前端开发工程师.资深前端开发工程师.前端架构师. 当然,对于不同规模的公司,web前端岗位的设定也是有区别的,下面就来给大家介绍一下,企业是如何根据规模大小设定web前端的岗位的. ▼ 1. 企业规模:10人以下 我们先从几个人的小作坊说起,这种小作坊里面,基本上有一个人负责页面的设计,然后把页面"切"出来,然后有一个专门的人负责套程序.在这样的公司里面,Web前端其实

2017年Web前端必火的6大流行开发趋势!

Web前端流行开发趋势 每到年底,人们总喜欢展望下一年,Web 开发领域也不例外.在 Web 开发领域,技术革新的速度堪比光速,未来总是超乎我们的想象,我们只能尽自己所能做一些合理的预测. 今天这篇文章,分享了2017年web前端的六大流行趋势,一起来一探究竟吧! 01 更加移动优先 响应式设计显然是目前 web 开发领域的主要趋势之一,并且这一趋势还将持续一段时间. 虽然现在的响应式设计大部分还是以 PC 版优先,然而,如果有一天我们把 PC 版放到比移动版次要的位置上,也没什么好奇怪的. 许