今天是双11,这个想不吐槽都不行,商家不会卖错。只有买家会买错。

来说说正题,自从前年年底加入游戏公司后,也算半个游戏开发者了,为何说半个,个人只负责后端开发没有前段效果,所以算半个。这里呢,只是忽然觉得许久没有整理思绪了。借CSDN整理下,(PS:其实是起太早没事干,本系列爱写则写,也许这辈子没有所谓的-2,也就是这名字坑爹游戏开发系列的来头。也许。。这篇都懒得写完,谁知道呢。。)

公司是个Flash页游开发,不算什么正儿八经的大公司,没有太多的条条框框,所以所有的玩意都可以随心所欲的开发,只要你能说服上级领导。比如想用什么新技术,什么新想法,只要你敢出方案,并且准备好一套演示。接着你就可以努力说服上级。接着就是你的showtime,不过,当没有人可以监督你时,并且你对项目的控制力度不够的话,多半要把项目进度坑掉。

前面这段估计看着比较无聊,写着也比较扯蛋,来切入正题吧。

先介绍下这边自主开发的服务端引擎特性:

1.C#开发,支持TCP/HTTP协议(自主应用层协议)

2.OOP思想,(所有对象都得跟着这个走)

3.自主同步协议

4.延迟保存

5.异步数据同步

结构类似:

SC<->SM->->M->C->V

|                                              |

--------------------<------------------

服务器控制器-》控制模型=》同步到=》客户端模型

客户端控制器-》监听模型变化-》控制UI显示

那么前段命令如何操作?

V《-》SC

客户端界面-》发送命令到服务端控制器(直接发送?)

对的,类似一个单向通道的异步模型。

SC的返回,仅限于当前命令的状态。(比如UI loading,等待之类的控制)

简单的描述,就是服务端 建立一个根对象,比如一个东西叫场景,然后下面有个List<玩家> 代码类似这样:( 现敲伪代码,仅为示例)

public class GameWorld
{public List<Player> Players{get;set;}
}

服务端初始化后执行:

var gw = new GameWorld();//新建一个游戏世界
MyEngine.SetMaster(gw);//设置当前对象可同步
Host.OpenChannel(Channel.Tcp);//开启同步通道

客户端,建立一个相同的类,(目前客户端用Flash实现,我们通过一个同步工具,自动生成Flash类),不会写flash,这边也拿C# 伪代码示例:

var gw=new GameWorld();//new一个根对象
var channel= Remote.OpenChannel(Channel.Tcp);//设置同步通道
channel.SetCopy(gw);//同步当前数据

( 这尼玛有个蛋用,楼下砸鸡蛋了。。。淡定淡定。。咱继续)

首先我们有了一个场景,然后我们有了一个玩家列表,然后我们就简单设计个小场景:

服务端,每10秒钟,增加一个Player对象,Player 会定义一个Name,并且会说一句话。

public class Player
{public string Name{get;set;}public string Message{get;set;}
}

然后在服务端建立一个Timer,里面Loop写着

int _index = 0;
public void Loop()
{_index++;var player=new Player(){Name="玩家" + _index,Messange="说了话"+ _index};gw.Players.Add(player);
   player.Message+="New";
}

客户端则发现玩家增加时,打印一行:玩家xxx加入了游戏,消息xxxx!;

发现玩家修改了消息时,打印一行:玩家xxx修改了消息xxxx;

//List自定义继承过,会发出 ADD,REMOVE事件 (sender = 增加的子对象)
gw.Player.PropertyChaged+=(sender,e){if(e=='ADD'){Console.WriteLine("玩家{0}进入了游戏,消息{1}",(sender as Player).Name,(sender as Player).Message);(sender as Plalyer).PropertyChaged+=(senderx,ex){if(ex.Name=="Message"){Console.WriteLine("玩家{0}修改了消息{0}",(senderx as Player).Message);}}}elseConsole.WriteLine("玩家{0}离开了游戏,消息{1}",(sender as Player).Name,(sender as Player).Message);};

有点类似MVVM的味道么?

优点:

1.没有了一圈xx命令的定义和xxx消息的定义,没有所谓的send和rev。

2.完整的抽取了应用业务层

3.非常简单的框架,无侵入,没有太多的限制。

4.理论上可以拿单机开发,再改成C/S模式非常简单。

5.开发迅速

缺点:

1.采用通用协议,可能流量较大

2.必须提前约定对象结构,不然修改起来很蛋疼

3.刚开始可能不是很习惯

最后:

居然写完了,不知道有没人看。欢迎拍砖。

也许。。会将我们的线上游戏作为一个例子进行设计讲解。比较简单的消息。

也许。。就没有下文了。。

坑爹快速游戏开发系列-1相关推荐

  1. Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》

    2019独角兽企业重金招聘Python工程师标准>>> 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 首先,如果你新加了CPP和H文件,记得修改项目目录 ...

  2. Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》(VS2013快捷键)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 源码下载 ht ...

  3. Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

    2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...

  4. 炸弹人游戏开发系列(6):实现碰撞检测,设置移动步长

    前言 上文中我们实现了"玩家控制炸弹人"的功能,本文将实现碰撞检测,让炸弹人不能穿过墙.在实现的过程中会发现炸弹人移动的问题,然后会通过设置移动步长来解决. 说明 名词解释 具体状 ...

  5. HTML5游戏开发系列教程5(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...

  6. Cocos2dx游戏开发系列笔记3:牛刀小试-忍者飞镖射幽灵的Demo

    2019独角兽企业重金招聘Python工程师标准>>> 就是这个例子,应该很简单,主要用到的有:精灵的移动,触摸,碰撞检测. 赶紧搞定,待会还要陪哲哲来几局爱消除. 首先在Scene ...

  7. Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...

  8. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...

  9. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...

    2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...

最新文章

  1. BZOJ4034 树上操作(树剖 线段树大模板)
  2. 活动目录.NET编程Tips
  3. 元类--用不上的先了解
  4. 开放式的Video Captioning,中科院自动化所提出基于“检索-复制-生成”的网络
  5. hdu 2586 How far away? (LCA模板)
  6. 剑指offer(21)栈的压入、弹出序列
  7. Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
  8. HttpUtils发送delete方法
  9. 同步(双向)BUCK电路设计
  10. 美通社企业新闻汇总 | 2019.1.3
  11. bios 刷 灵耀14_华硕灵耀Deluxe14笔记本装win10及bios设置教程(uefi+gpt)
  12. victoriaMetrics无法获取抓取target的问题
  13. 第二季《中国好声音》
  14. EE308 Lab2-2
  15. 【EPICS】在Ubuntu下安装epics及Asyn、Streamdevice工具包
  16. Day53 Linux setitimer函数 信号集操作函数 信号捕捉 SIGCHLD信号
  17. mac无线网连上没网络连接网络连接服务器,无线网络连接上但上不了网
  18. Python基础78 - 类和对象魔法方法
  19. 应广单片机入门之_按键点灯
  20. [转] 罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化

热门文章

  1. AutoIT3 vs AutoHotkey
  2. Java多线程通信-CyclicBarrier(栅栏)
  3. ubuntu18.04系列2—桌面美化(gnome)
  4. 【C语言期末/实践/大作业】成绩管理系统日程表管理系统
  5. 如何做流程图?这几个实用的制作流程图方法分享给你
  6. 流程图不会画?不用担心,使用在线网站绘制流程图简单方法介绍
  7. springboot高校学生健康档案管理系统java ssm
  8. 电脑上怎么清空我的android手机,格式化也不靠谱?教你如何彻底删除手机上的数据...
  9. 多元统计分析--聚类分析(系统性聚类、K均值聚类)
  10. PageHelper 分页插件使用总结