Crazy Learning for Day 12
来源:互联网 发布:富士通热敏打印软件 编辑:程序博客网 时间:2024/05/18 18:21
游戏中的网络同步机制——Lockstep——首推
http://blog.csdn.net/andyhebear/article/details/51604404
——————————
1、极限开发挑战
http://www.jianshu.com/p/470882232ff0
2、游戏中的战斗回放的实现原理和机制是什么?包括即时战斗和离线战斗
游戏进程其实就受两个东西影响。
- 一是用户输入
- 二是随机数种子。
只要把这两个记录下来就可以回访整个游戏进程了。当然,用户输入会被抽象成具体操作,比如在几分几秒造了哪个兵。
把游戏的逻辑模块和展示模块完全隔离开。
如果是网络游戏,那么逻辑模块存在于服务器端,展示模块存在于游戏客户端中;否则,两个模块都位于客户端程序中。逻辑模块处理一切的用户输入,然后根据用户输入判断游戏中的每个实体应该播放何种动画,再将计算的结果传入展示模块。
例如,玩家向前移动靠近怪物,并释放火球术攻击怪物。那么逻辑模块将依次传输如下命令至展示模块:
- 时间0s,创建主角,向前移动,速度为1m/s
- 时间0s,创建怪物,播放idle动画
- 时间1s,主角停止移动
- 时间1s,主角播放释放法术动画
- 时间1.5s,创建一个火球,速度为10m/s,运动方向为主角到怪物的方向
- 时间1.8s,火球停止运动
- 时间1.8s,火球逐渐消失
- 时间1.8s,怪物转向主角,朝主角方向移动,速度0.5m/s……(自行脑补)
从上可知,展示模块相当于是一个播放器,由逻辑模块输出的命令驱动。为了实现回放的功能,只需要将上述的命令记录下来,再输入到展示模块即可。只不过此时的输入并不来自于逻辑模块,而是来自于回放文件。
3、何为离线战斗?
即当玩家和玩家PK时,并不需要对方在线,只需拉取对方的数据进行计算。
联网战斗才是真正对网络同步有了一定的要求。
联网战斗,即时操作,
帧同步
4、网络同步方案
- 状态同步
- 帧同步
5、C# GET 和 SET作用
c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值。这样就可以控制外界对私有属性name的访问权限了,这种写法是C#的一个特性。
http://www.cnblogs.com/yinxiangpei/articles/2357091.html
6、C#属性和成员变量的区别?
面向对象的编程方法是要抽象、封装。
- 在类中,定义的变量是正对类本身而言,我们把它们叫做域。它可以为public ,private等
前面我们讲到了域可以为public,但这样把域申明为public将不利于类的封装,因为外部使用者可以对类进行直接修改。所以我们就可以用到属性,我们只是公开它们的属性,至于如何对其进行赋值(set)如何进行取值 (get)都已经进行了封装,对于类外部是不可见的。对于外部使用者来说只能够使用它,不能控制它,如何控制操作是由类自身决定的。
http://www.cnblogs.com/yeminglong/archive/2012/04/11/2442478.html
http://blog.csdn.net/zsk1196468672/article/details/52074373
7、C# 属性访问器
习惯上,称具有private访问权限的成员变量为属性,把与之对应的公共方法称为访问器。访问器根据功能区分为读访问器(getter)和写访问器(setter)。
属性的访问器包含与获取或设置属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。声明采用下列形式之一:get {}、set {}
private string name; // the name fieldpublic string Name // the Name property{ get { return name; }}
http://www.cnblogs.com/gsk99/p/4978310.html
8、[Serializefield] Unity
Unity中HideInInspector和SerializeField以及Serializable
首先,Unity会自动为Public变量做序列化,序列化的意思是说再次读取Unity时序列化的变量是有值的,不需要你再次去赋值,因为它已经被保存下来。
然后是,什么样的值会被显示在面板上?
已经被序列化,但是没有用HideInInspector标记的值。
[SerializeField]表示将原本不会被序列化的私有变量和保护变量可以序列化,这么他们在下次读取时,就是你上次赋值的值。
http://www.cnblogs.com/nsky/p/4476279.html
http://blog.sina.com.cn/s/blog_80cc3d870101ldnn.html
9、定点数FScalar
定点数就是把一个整数乘上一个缩放因子
10、协议是什么?
计算机领域经常讲的协议,比如TCP/IP 协议到底是什么,是怎样工作的,有什么作用?
在Internet没有形成之前,各个地方已经建立了很多小型的网络,称为局域网,Internet的中文意义是”网际网”,它实际上就是将全球各地的局域网连接起来而形成的一个”网之间的网(即网际网)”。然而,在连接之前的各式各样的局域网却存在不同的网络结构和数据传输规则,将这些小网连接起来后各网之间要通过什么样的规则来传输数据呢?这就象世界上有很多个国家,各个国家的人说各自的语言,世界上任意两个人要怎样才能互相沟通呢?如果全世界的人都能够说同一种语言(即世界语),这个问题不就解决了吗?TCP/IP协议正是Internet上的”世界语”。TCP/IP协议的开发工作始于70年代,是用于互联网的第一套协议。
TCP/IP是Internet使用的一组协议(Protocol).在Internet上传输控制协议和网际协议是配合进行工作的。网际协议(IP)负责将消息从一个主机传送到另一个主机。为了安全消息在传送的过程中被分割成一个个的小包。 传输控制协议(TCP)负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确地还原。传输协议保证了数据包在传送中准确无误。
基于C#的Socket同步和异步通信(TCP/UDP)【入门推荐】
http://blog.csdn.net/as2712101/article/details/19078669
互联网协议入门
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket)。有了它,就可以进行网络应用程序开发了。
UDP协议
现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据包,也是由”标头”和”数据”两部分组成。
TCP协议
UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
11、冗余模式
数据冗余:在一个数据集合中重复的数据称为数据冗余。
UDP如何实现可靠性传输
http://blog.csdn.net/pangyemeng/article/details/50387078
12、到底什么是hash
其实hash就是一个函数,将原数据映射为一个索引值。原数据可以为任何类型的数据,索引值可以看作数据存储的逻辑位置(主要用于字典),可以看作是指纹(用于保护原数据)。
哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作着,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。
13、Json文件
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
14、游戏中的网络同步机制——Lockstep
PEER-TO-PEER,原为网络通信技术名词,意为“对等网络”,又称工作组。
为什么要有同步机制?
比如fps游戏(First-person shooting game) 第一人称射击游戏,大家的延迟都很高,A、B两个玩家同时发现了对方,并向对方射击,如果没有很好的同步机制,那么A的屏幕上显示B还没有开枪就被击杀,而B的屏幕上显示A还没有开枪就被击杀,这就出现了不一致的问题,那么这个游戏还怎么愉快的进行下去?
游戏中的网络同步机制——Lockstep
http://blog.csdn.net/andyhebear/article/details/51604404
http://bindog.github.io/blog/2015/03/10/synchronization-in-multiplayer-networked-game-lockstep/
15、有限状态机
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。
- Crazy Learning for Day 12
- Crazy Learning for Day 4
- Crazy Learning for Day 5
- Crazy Learning for Day 6
- Crazy Learning for Day 7
- Crazy Learning for Day 10
- Crazy Learning for Day 13
- Crazy Learning for Day 14
- Crazy Learning for Day 15
- Crazy Learning for Day 16
- Crazy Learning for Day 17
- Crazy Learning for Day 18
- Crazy Learning for Day 19
- Crazy Learning for Day 20
- Unity Learning for Day 12
- Unity Learning for Day 2
- Unity Learning for Day 3
- Unity Learning for Day 5
- linux基本介绍——嵌入式学习
- 各种api 的坑
- 欢迎使用CSDN-markdown编辑器
- Android通用框架设计与完整电商APP开发系列文章
- C++多线程分析
- Crazy Learning for Day 12
- 每日工作日报
- [复习][HDU1251]字典树(trie树)统计难题
- 2017.07.12
- Can you solve the equation?(二分求方程解)
- REST,RESTful到底是个什么?
- java多线程
- Linux进程全解6——进程的诞生和消亡
- DecorView padding导致Dialog不能满屏的问题