Skip to content

mengtest/MOBAGame

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MOBAGame

仿moba类游戏demo,服务器使用PhotonServer。
基本上就是个1v1的小demo,从登陆,注册,好友上下线,匹配。到战斗,小兵,防御塔ai,英雄,技能,商店。

先上图 录制原因固定15帧 50M的gif。。 演示图片

相关知识点

服务器端用了nhibernate和一对多的数据库关系,服务器包含缓存层,保存了所有登陆过的数据库数据。
UI使用ugui,并封装了一套简单的ui框架,提供两种管理方式,一种放在栈中,一种随意使用。
AI控制使用一套状态机,区分移动,战斗等状态,在协程中使用while循环模拟update的效果,使每个状态有单独的逻辑区域。
技能写的比较繁琐,简而言之就是让不同的效果组合成一个技能,主要运用委托和反射。
其他一些可复用的代码如:ResourcesManager,PoolManager,TimerManager..

主要问题

应该说问题是非常大的。。为了能够少写服务器代码,小兵和防御塔的逻辑是写在客户端的,这就需要服务器听客户端的然后广播。 在1v1的情况下是可以的。但多人模式下,服务器听谁的就难以解决,这些逻辑自然应该写在服务器。
其次是位置同步问题,基本没做,只是广播下英雄的移动位置,so..  

简单的写一些日志:

-17/3/29

 这两天折腾服务器的缓存层,由于nhibernate中对数据对象的外键列表,即一对多的关系中,操作时会进行关联查询,单纯的当作对象使用,容易出现类似no session or session was closed的错误,每次都在session中处理又感频繁,这里我使用一个缓存层将用户的角色列表进行深拷贝保存起来。不知道这种处理好不好。

-17/3/31

 感慨一下,服务器端数据的逻辑真的好容易搞晕,缓存层,数据库层,表,外键,各种缓存的关系很容易乱,调试起来也很麻烦,不知道有没有更好维护的框架。

-17/5/4

 这几天摸索技能模块的写法,简单记一下,游戏中的技能十分灵活,有伤害类型的,有buff类型的,同时一个技能可能有多种效果,我希望能有一种方式来控制所有的技能,大体思路是技能是通过组合效果的方式来实现技能,一个技能就是实现几种效果函数,核心是利用委托来添加所有的效果函数,执行这个委托就是使用技能。

 思路感觉挺简单,但是写了好几天。。有一点比较麻烦的是前期的工作,原始数据是技能,而实际使用的时候需要将技能的数据拆分成效果,再将效果函数组合成技能委托,也许一开始将技能和效果写成两份数据比较好。目前来看这样写的好处是比较灵活,英雄,技能和效果可以自由搭配,增加复用性,所有的技能可以用一套方式处理,加上反射的运用,整体完成后我只需要写效果函数和技能数据,但是效果只能以函数为单位去表现也有一定的限制。

About

Moba类游戏Demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 96.7%
  • Smalltalk 3.2%
  • JavaScript 0.1%