坑爹快速游戏开发系列-1
今天是双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相关推荐
- Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》
2019独角兽企业重金招聘Python工程师标准>>> 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 首先,如果你新加了CPP和H文件,记得修改项目目录 ...
- Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》(VS2013快捷键)
懒骨头(http://blog.csdn.net/iamlazybone QQ124774397 青岛 ) 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 源码下载 ht ...
- Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上
2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...
- 炸弹人游戏开发系列(6):实现碰撞检测,设置移动步长
前言 上文中我们实现了"玩家控制炸弹人"的功能,本文将实现碰撞检测,让炸弹人不能穿过墙.在实现的过程中会发现炸弹人移动的问题,然后会通过设置移动步长来解决. 说明 名词解释 具体状 ...
- HTML5游戏开发系列教程5(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...
- Cocos2dx游戏开发系列笔记3:牛刀小试-忍者飞镖射幽灵的Demo
2019独角兽企业重金招聘Python工程师标准>>> 就是这个例子,应该很简单,主要用到的有:精灵的移动,触摸,碰撞检测. 赶紧搞定,待会还要陪哲哲来几局爱消除. 首先在Scene ...
- Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的
2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...
- Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
懒骨头(http://blog.csdn.net/iamlazybone QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...
- Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...
2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...
最新文章
- BZOJ4034 树上操作(树剖 线段树大模板)
- 活动目录.NET编程Tips
- 元类--用不上的先了解
- 开放式的Video Captioning,中科院自动化所提出基于“检索-复制-生成”的网络
- hdu 2586 How far away? (LCA模板)
- 剑指offer(21)栈的压入、弹出序列
- Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
- HttpUtils发送delete方法
- 同步(双向)BUCK电路设计
- 美通社企业新闻汇总 | 2019.1.3
- bios 刷 灵耀14_华硕灵耀Deluxe14笔记本装win10及bios设置教程(uefi+gpt)
- victoriaMetrics无法获取抓取target的问题
- 第二季《中国好声音》
- EE308 Lab2-2
- 【EPICS】在Ubuntu下安装epics及Asyn、Streamdevice工具包
- Day53 Linux setitimer函数 信号集操作函数 信号捕捉 SIGCHLD信号
- mac无线网连上没网络连接网络连接服务器,无线网络连接上但上不了网
- Python基础78 - 类和对象魔法方法
- 应广单片机入门之_按键点灯
- [转] 罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
热门文章
- AutoIT3 vs AutoHotkey
- Java多线程通信-CyclicBarrier(栅栏)
- ubuntu18.04系列2—桌面美化(gnome)
- 【C语言期末/实践/大作业】成绩管理系统日程表管理系统
- 如何做流程图?这几个实用的制作流程图方法分享给你
- 流程图不会画?不用担心,使用在线网站绘制流程图简单方法介绍
- springboot高校学生健康档案管理系统java ssm
- 电脑上怎么清空我的android手机,格式化也不靠谱?教你如何彻底删除手机上的数据...
- 多元统计分析--聚类分析(系统性聚类、K均值聚类)
- PageHelper 分页插件使用总结