当前位置:   article > 正文

Laya3.0游戏框架搭建流程(随时更新)

laya

  近两年AI绘图技术有了长足发展,准备把以前玩过的游戏类型重制下,也算是圆了一个情怀梦。

  鉴于unity商用水印和启动时间的原因,我决定使用Laya来开发。目前laya已经更新到了3.0以上版本,就用目前比较新的版本。

  之后关于开发中遇到的一些小问题,我都会记录到这篇博客中。毕竟只是个人项目,所以按照帖子的方式更新。

1,Laya的生命周期

  这个没什么说的,了解unity的生命周期后,这快设计的差不多,实例化一个继承Laya的类的时候,也可以看到相关的函数:

  1. /**
  2. * 组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
  3. */
  4. //onAwake(): void {}
  5. /**
  6. * 组件被启用后执行,例如节点被添加到舞台后
  7. */
  8. //onEnable(): void {}
  9. /**
  10. * 组件被禁用时执行,例如从节点从舞台移除后
  11. */
  12. //onDisable(): void {}
  13. /**
  14. * 第一次执行update之前执行,只会执行一次
  15. */
  16. //onStart(): void {}
  17. /**
  18. * 手动调用节点销毁时执行
  19. */
  20. //onDestroy(): void {
  21. /**
  22. * 每帧更新时执行,尽量不要在这里写大循环逻辑或者使用getComponent方法
  23. */
  24. //onUpdate(): void {}
  25. /**
  26. * 每帧更新时执行,在update之后执行,尽量不要在这里写大循环逻辑或者使用getComponent方法
  27. */
  28. //onLateUpdate(): void {}
  29. /**
  30. * 鼠标点击后执行。与交互相关的还有onMouseDown等十多个函数,具体请参阅文档。
  31. */
  32. //onMouseClick(): void {}

2,TS的单例化

  单例化是常见的设计模式,ts的单例化用传统写法是这样:

  1. export class UIProp {
  2. private static instance: UIProp = null;
  3. static getInstance() {
  4. if (!UIProp.instance) {
  5. UIProp.instance = new UIProp();
  6. }
  7. return UIProp.instance;
  8. }
  9. /*
  10. 单例模式,仅允许通过 UIProp.getInstance 获取全局唯一实例
  11. */
  12. private constructor() {
  13. console.log("创建函数");
  14. }
  15. public Start()
  16. {
  17. console.log("UI数据初始化");
  18. }
  19. public Update()
  20. {
  21. }
  22. }

调用方法如下:

 UIProp.getInstance().Update();

  但明显这样写很麻烦,尤其在单例化很多的情况下。而我想到,在C#可以用静态+泛型的方法解决。ts既然语法特性和C#很像,没道理不能简化,如是我又找到了如下写法:

  1. //实例化脚本:基类
  2. export class Singleton<T>{
  3. private static inst: any = null;
  4. public static Inst<T>(s: { new(): T }): T
  5. {
  6. if (this.inst == null)
  7. {
  8. this.inst = new s();
  9. }
  10. return this.inst;
  11. }
  12. }

  之后再想创建单例化类的时候,只需要这样写就行。

  1. import { Singleton } from "./Singleton";
  2. /**
  3. * name
  4. */
  5. export class Test extends Singleton<Test>{
  6. public Start()
  7. {
  8. console.log("初始化成功Test");
  9. }
  10. }

  调用方法如下:

 Test.Inst(Test).Start();

  我们简单测试下,结果如下:

   暂时就先更新这么多,数据存储和读表放到端午节再更。

~~~~~~~2023/6/18~~~~~~~~

3,Excel表格读取

  抱歉鸽了大家这么久,中间项目上线等系列琐事,耽误了进度。

  最近一直在思考,用什么来处理excel表比较合适。一般做过游戏的都知道,作为策划需要用excel来配置数值,而程序需要将这些数据读取出来并用于程序里面。比如很简单的角色升级表:

  在unity这边,用的是二进制存储的,所以内存还可以接受;但laya这边,当我试图用json来存储数据的时候,才发现一个严重的问题,那就是无用的格式信息占据了大多数的内存。如上表,转为json后如下所示:

  我们可以看出来,这里面有很多无效的格式信息,占据的内存甚至远超数据本身。

  这里我问了下别的用laya开发的项目组(国内某知名游戏),他们用的是sql二进制的方式存储的表格数据,这里作为备选方案。

  不过现在读取数据库这块比较复杂,所以我还是准备用excel自己定义格式转存为json,之后自己解析,代码周末续上。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  顺便说下,之前一直在纠结采用unity还是laya开发。但最近unity搞得安装收费模式真是令人无语,所以还是决定采用laya。毕竟多个引擎多个后路。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/253946
推荐阅读
相关标签
  

闽ICP备14008679号