游戏开发的一些小总节

这段时间对公司的项目代码进行了一些优化,这里记录一下,不针对某一个游戏引擎

1.是否应该有逻辑类?

其实我不怎么喜欢mvc框架,更别说在项目中为了用这个框架,把自己代码强行改成这种模式。但是,逻辑类和页面的分离是有必要的。

这对于解决一个游戏,多个主题问题有很大的帮助。在多主题游戏中,如果页面与逻辑分开,重新添加一套主题,如果页面布局不一样,你可以只修改UI页面的布局代码(毕竟不是所有布局都可以通过皮肤文件完成)。这样在修改和添加的时候,其实是更安全的,即使你UI定位有一点问题,也不会影响功能。

这对于开发一些同类型类似的游戏也是方便很多,有很多逻辑其实是可以直接拿来用的完全不用修改,比如一些简单的棋牌游戏,牌型判断,大小比较,一些枚举是完全一样的。

最后,有逻辑类可以让你的代码容易阅读,逻辑更加清晰

2.还应该有数据类。

之前修改过一个项目,它是有逻辑类的,但是它的逻辑类里面会定义很多变量,把用到的一些数据保存下来。将这个逻辑类用到的数据保存在这个逻辑类里面,这本身并没有什么问题。问题的关键是你分不清那些数据是这个逻辑类私有的,那些数据是共有的。即使,你现在分清了这些数据也是没有用的,鬼知道后面策划会有什么需求,可能你现在私有的数据,就要变成共有。我接触的项目就遇到了,后面开发的人没办法,只能将这个变量暴露出去,然后,你就会发现一个很恶心的写法,xxx逻辑类,里面有yyy逻辑对象的实例,然后用到了这个实例的一个变量。 何必呢,你整理一个(多个)数据类,把数据管理起来,哪里用到了,哪里去访问啊,何必恶心自己呢。所以,我建议逻辑类里面也个数据也不要保存,都用数据类保存。

3.说说消息类。

将消息的收发,统一交给它处理,比直接通过逻辑类的函数调用消息的收发,然后监听消息更好。用消息类,去收发和监听服务器的消息,而逻辑类,只监听游戏的事件,而不用管消息,不用和网络打交道,更安全,方便。我接触过的一个项目,对消息对象也封装了类型。我在用TS 开发的时候,很少会这样,我会在消息类的接口上声明参数类型,在里面直接用字典对象。我并没有说那样不对,但是,我很懒。

4.推荐的代码结构。

因为我也没坐过大型的项目,就对一些中小型项目说说的的看法。我推荐的代码结构因该是有,前面说到的

UI类,主要是页面布局,渲染相关的一些控制。

逻辑类,主要控制一些页面的切换,事件的监听,派发,消息的发送。

数据类,主要是处理数据,和保存数据,保证其他模块用的数据是已经初步处理过的。

消息类,主要是做消息的收发,给逻辑类调用,将请求数据处理成消息格式,然后发送出去。监听消息回调,接收数据后,可以发送给逻辑类使用,或者数据类保存处理过后再发送给逻辑类使用。

5.有时候可以用用位图字体。

游戏里面用到的系统字体,感觉很丑,而且有时候玩家的设备可能还没有你这种很丑的字体,达不到和你一样丑的效果,这就很尴尬。游戏玩家还修改默认字体,在找不到你要的字体后,会用玩家默认的字体,你会发现你的项目在不同的机器上跑,有不同的感觉。所以,让美术去做个字体的模版,然后用ps生成单个字体文件(不会的找我),合成图集,其实也不是很费资源。

6.事件的绑定与取消。

我以前做一些项目,页面关闭后就会销毁,更别提事件了。但是,最近修改一个小棋牌项目时发现好多页面都不销毁,游戏本身不大,都留着也没什么问题,但是事件不取消不太好吧??一些通用的事件,在你关闭了页面还要监听,处理逻辑?没有必要,再你再次打开的时候,刷新一下,这样会避免很多不必要的麻烦。要不然,你会发现,玩着玩着,突然蹦出一个什么弹窗,真的很难受。

7.消息先让消息类简单处理一下,再发出去。

之前说消息类不处理数据的,但是吧,有些还是可以处理一下的,比如返回了一个错误消息,你可以把弹出提框的代码,放在这里处理呀,没有必要等收到消息后,在判断消息正确怎么处理,消息错误然后发弹窗。通过错误ID和消息ID对应起来,处理起来更方便

8.消息区分种类。

某些消息在发送后,要等返回后再继续,某些消息却不需要等待。做好区分,可以让需要等的消息 “转圈圈” 不需要等的,就不要转了。

9.对于文字。

文字不要些在代码里面,这是基本常识。了解了这个基本常识之后,其实还有另一个问题,这么多文字,要取名字是件很累的事。 我建议,与其你想个半天想出一个不太好的英文名,这个名还有可能重复,不如,直接不用名称,直接用数字ID 然后把数字ID区分好区间,其实用起来也不错,就不要为难自己那点英文了。

10.适配和定位能用皮肤做的,就不用代码了呗。

很多引擎都是有可视化编辑器,适配布局组件,和一些定位的属性都很不错,很多时候没有必要用数学计算出结果,然后在设置这些属性。

11.多主题可以用继承的方式实现,不要复制代码。

之前的项目,逻辑是差不多的,皮肤略有差别,看到同学直接复制了一份代码放在两个命名空间内,不同的主题调用不同的代码,除非你以后不在修改这项目了,这样做最简单,但是你如果后面还要开发,还要同时维护两份代码,时间长了,代码多了,你都不知道差异在哪里。所以,建议用继承的方式实现,将原来的代码做为基类,将差异的代码函数,写在派生类中。这样,很多时候你只需要修改一份代码。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值