tfboys00 2019-06-26
本文主要针对游戏的网络设计,在文章中目前主流的网络游戏实现方案都有讲解。从Peer-to-Peer 帧同步,客户端/服务器(c/s架构),客户端预测(Client-Side Prediction)方面进行了介绍。
本文首发自inspoy的杂七杂八 | 菜鸡inspoy的学习记录 前言 之前一直在用cocos2d-x用c++写代码嘛,所以为了开发方便自己设计了一套事件系统,现在转到unity用c#了,就很自然地把之前那套东西搬过来用了XDC#自带的event其实就完全可以用,不过功能略显简…
在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的。而服务器端应用程序,也就是我们常见的Web应用程序往往是多线程的,故用户A访问势必不会影响用户B的访问…
游戏服务器特征
短连接游戏服务器架构
长链接游戏服务器架构
分区分服服务器架构
MMOARPG服务器架构
房间服务器架构
看似是个不错的方案,但实际上还是没解决本质问题。虽然将日志,监控放到了Common中,但每个方法还是要写这一大堆和业务无关的代码,这压根什么也没解决,这个方法的层次结构如下图所示: 实现方式->AOP的实现方式被分为『静态织入』和『动态织入』。采用『静态织入』方式通过扩展编译器…
本文首发自inspoy的杂七杂八 | 菜鸡inspoy的学习记录 之前那篇cocos转unity的系列算是坑了(撒花 前言 自己是在用unity去尝试做游戏的,中间也遇到了很多很多各种各样的问题,也都在努力去解决。到目前为止也取得了很明显的成果:主流程都是通的,现在允许多个玩家…
在我们设计和开发应用程序时,经常要用到控件。比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件。属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的『按钮点击』,谁也不能确定点击之后将发生…
生命游戏是元胞自动机 (Cellular Automaton) 中最著名的一组规则。它由一个二维细胞阵列组成,每个细胞有‘生’或‘死’两种状态。同时对于任意一个细胞,它有 8 个邻居细胞。本文运用 Spring mvc,JQuery,Bootstrap 编写了一个界面友好的可视化生命游戏。
对于一个View而言,本质上是一个MonoBehaviour。它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等。这些是非常好的方法,可以让开发者在各个阶段去执行自定义的代码。但唯一遗憾的事,这些方法是有引擎调用,并且颗粒度不够细。本…
本文首发自inspoy的杂七杂八 | 菜鸡inspoy的学习记录 前言 UI在任何游戏里都是个重要的东西,作为一个程序员我们暂时先不考虑如何设计UI才好看,优先还是考虑怎么高效地实现功能。在很多重度UI的游戏中,UI占的比重经常超过核心玩法,UI变多的时候我们需要用编辑器来设计…
谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化。Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化数据的行为。开发者只要对接口进行特定的实现就可以满足对不同存储介质的访问,比如…
借助王者荣耀,我们来聊一聊王者荣耀的技术实现以及同步方式,更多的从MOBA(多人在线战术竞争游戏)方向来解析推理王者的实现方案。
在这个手机游戏盛行已久的年代,一款产品想要博得更多用户的喜爱就要在细节上做得更加到位。而游戏优化在这里面起到了非常关键的作用。
『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率。 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则。 组件化设计的思路 不管是开发客户端应用程序还是开发服务器端应用程序,『组件』这个词我…
DeepMind 发表 DQN 算法在 Atari 游戏上超过人类之后,游戏 AI 研究迅速成为了研究热点。游戏 AI 研究火热的一个侧面是游戏 AI 环境推陈出新,层出不穷。OpenAI Gym/Universe、ELF 和 SC2LE 等高水准的游戏 AI 环境相继问世。 …
DeepMind 发表 DQN 算法在 Atari 游戏上超过人类之后,游戏 AI 研究迅速成为了研究热点。游戏 AI 研究火热的一个侧面是游戏 AI 环境推陈出新,层出不穷。OpenAI Gym/Universe、ELF 和 SC2LE 等高水准的游戏 AI 环境相继问世。
Android FrameWork Box2D 入门精要
游戏服务器架构完整版,包含多种游戏类型
Android FrameWork 基于 libGDX 实现高性能动画特效(Box2D / 物理碰撞 篇)
本文首发自inspoy的杂七杂八 | 菜鸡inspoy的学习记录 前言 本来是想接着写UI相关的东西的,不过上一篇提到了SFUtils这个类,干脆就先介绍下有关于日志方面的封装 目的 这个游戏目前的目标平台是PC和Mac,移动平台有网络同步效果方面的顾虑,之后再考虑。当然这不是…
现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到很好的实现。MVVM 设计模式顾名思义,通过分离关注点,各司其职。通过 Data…
其实代码也一直在写,游戏的主流程也基本上通了,就是一直懒得写博客。 OK我们今天来介绍下游戏的服务端是怎么实现的。 BounceArena的服务端使用node.js开发,这次用了三个进程,分别处理日志(main.js也是程序入口),socket通信(SFSocketHandle…
理解Unity的自动内存管理
首先介绍市场的大背景,现在很多工程师,无论男女,可能都在玩手游,刚刚过来的路上也发现很多人坐在位置上在玩一些小的手游,腾讯好像已经成为最赚钱的游戏公司,所以我分享手游的内容可能对大家还是有一定帮助的。
[翻译]Unity中的AssetBundle详解(三)
这个项目差不多5月份就已经没有再更新了,6月初正式从公司离职开始专心做独立游戏了。差不多到现在已经一个月了,工作也慢慢进入了正轨,这两天手头暂时闲下来了,也差不多该把这个系列完结掉了,了却我一桩心愿233 上次说到主要逻辑是由各个具体的Controller来实现的,这个游戏分为…
我们项目中基本只用到Image和Text两种,Image是比较好处理的,直接将Texture贴到一个曲面的mesh上就可以了,但是Text相对比较麻烦。我们无法简单的取到某一段文字的Texture,必须自己从字体文件里面裁剪每个文字的Texture,然后拼接到一个Texture…
Android FrameWork 基于 libGDX 实现高性能动画特效
本文首发自 inspoy 的杂七杂八 | 菜鸡 inspoy 的学习记录 前言 距离上一篇又差不多一周多了,果然写代码要比写博客轻松多了 orz 经过了漫长的无聊的准备,这次终于开始正式写游戏逻辑相关的内容了,当然,到目前为止的代码可以直接拿来做任意一个游戏,这也算是个好处吧 233 断断续续…
什么是 『动态数据集合』 ?简而言之,就是当集合添加、删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面。有经验的程序员脑海里迸出的第一个词就是 ObservableCollection。没错,它在WPF中盛行其道,通过它开发者可以很方便的达到动态更新界面。要在Uni…
入门教程,我可不会讲什么概念,我只会讲一个入门例子,通过这个例子,你就知道phaser有多么强大,而照着这个例子做,你就能知道怎么使用phaser了。
需要说明的是,这个就是phaser官方的一个入门的案例!
做这个游戏需要多长时间,我可以告诉你,用phaser,只需要十分钟,…
对于客户端应用程序,免不了和远程服务打交道。设计一个良好的『服务层』能帮我们规范和分离业务代码,提高生产效率。服务层最核心的模块一定是怎样发送请求,虽然Mono提供了很多C#网络请求类,诸如WebClient,HttpWebRequest,但考虑到跨平台,这些类不一定适用。不过…
第一种是笔者小时候在掌上游戏机最先体验到的(不小心暴露了年龄),具体玩法是蛇吃完一定数量的食物后就通关,通关后速度会加快;第二种是诺基亚在1997年在其自家手机上安装的游戏,它的玩法是吃到没食物为止。笔者要实现的就是第二种玩法。
基于贪吃蛇的经典,笔者在实现它时也使用一种经典的…
对象的 『注入』 是企业级软件开发经常听到的术语。如果你是一个 Java 程序员,一定对注入有着深刻的映像。不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯。通过依赖注入,可以有效的解耦应用程序。在uMVVM框架中,我提供了另外一种对象注入的方式,称为Se…
Unity中的AssetBundle详解
libGDX 入门精要
Unity中的AssetBundle详解
在上一回合谈到,客户端应用程序的所有操作都在主线程上进行,所以一些比较耗时的操作可以在异步线程上去进行,充分利用CPU的性能来达到程序的最佳性能。对于Unity而言,又提供了另外一种『异步』的概念,就是协程(Coroutine),通过反编译,它本质上还是在主线程上的优化手段,并…
一谈到 『IoC』,有经验的程序员马上会联想到控制反转,将创建对象的责任反转给工厂。IoC是依赖注入 『DI』 的核心,大名鼎鼎的Spring框架就是一个非常卓越的的控制反转、依赖注入框架。遗憾的是,我们显然不能在Unity 3D中去使用Spring框架,但思想是相通的——Io…
MVVM 回顾 经过上一篇文章的介绍,相信你对MVVM的设计思想有所了解。MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在。View只关心怎样渲染,而ViewModel只关心怎么处理逻辑,整个架构由数据进行驱动。不仅View与ViewModel彼此解…
游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求。
本文首发自inspoy的杂七杂八 | 菜鸡inspoy的学习记录 前言 项目这个东西果然还是做起来才会发现坑,尽量早填上好了 View Prefab 上一篇的vwTest这个UI预设体的根节点vwTest是一个Panel控件,内容是个背景框,这个想了下不太妥,应该改一下,包含具…
Android 自定义控件实现一个简单的拼图游戏.
本文首发自 inspoy 的杂七杂八 | 菜鸡 inspoy 的学习记录 前言 UI 的框架大致搭好了,虽说还有许多控件还没支持,不过其实都大同小异,以后需要用到新的控件的时候再考虑支持新控件好了。然而现在有个问题,UGUI 原生的控件虽然已经很好用了,不过我们有时候还是会想有更多的功能,…
看似普通的路径在程序实现起来就需要一定的寻路算法来解决,如何在最短时间内找到一条路径最短的路线,这是寻路算法首先要考虑的问题。
简述 实现unity3d导出到android studio工程并封装为library,供其他工程导入module直接使用。最终效果: 点击ZoomIn、ZoomOut的按钮,通过android端调用unity中方法,进行放大放小; 触摸unity中的3D立方体,调用androi…
当你开发一个客户端应用程序的时候,往往一个单页会包含很多子模块,在不同的平台下,这些子模块又被叫成子View(视图),或者子Component(组件)。越是复杂的页面,被切割出来的子模块就越多,子模块越多,彼此之间需要同步的数据和状态就越频繁,即易产生耦合。那么如何保证在复杂业…
Unity插件之Unity调用C#编译的DLL
从零开始自制游戏引擎的故事。
本文首发自 inspoy 的杂七杂八 | 菜鸡 inspoy 的学习记录 前言 这真的是最后一篇有关基础框架的文章了!写到这里已经第七篇了 orz 之前的其实还是挺枯燥的,都是些基础方面的东西,并看不到什么有趣的内容可能是我把事情想的太复杂了吧,所有东西都想做到能力范围内的最好,尤其是这些…
对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式。有经验的开发人员往往会把一个View分解多个SubView。那么,如何在多个SubView之间 『共享数据』 是一个很棘手的事情。又因为ViewModel才是真正为View…
简单易懂、粗暴上手