
游戏开发
文章平均质量分 63
ybn6775
精益求精、勿怕麻烦。
展开
-
服务器集群中代理服的选取与迁移
服务器集群中代理服的选取与迁移 在服务集群中,处于减小系统开销或者访问受限的情况, 某项功能可能需要在服务端集群中选择出一个代理来完成任务,那么就牵扯到代理服务器的选择,故障迁移, 数据传播等问题, 以下为游戏中直播数据请求功能的代理服务的样例。数据广播通过两级关播的方式, 代理服的初始选取通过统一的准则,代理服的迁移则通过当前代理服宣布代理失败或被代理服务器长期说不到数据进行代理权...原创 2018-06-30 12:29:33 · 288 阅读 · 0 评论 -
动态加载滑动列表实现
动态加载滑动列表 采用了类似分片加载的策略,仅加载出当前可以看到的图片以及一定的预加载部分,随着滑动逐渐的加载出下边的内容,但大量的UI节点会造成内存的紧张,直播平台500个直播间的图片量不能导入所有贴图,大量的贴图残留在内存中会造成不必要的问题, 因此加载策略为仅显示当前看到的ITEM以及上下的预加载部分, 向上滑动删除下边多余的UI节点, 向下滑动删除上边多余的UI节点, 总...原创 2018-06-30 12:44:19 · 1305 阅读 · 0 评论 -
缓存算法之FIFO、LRU、LFU的Python实现
缓存算法之FIFO、LRU、LFU的Python实现 早期计算机内存有限,程序的运行与加载依赖页面置换算法, 其目的是将部分数据缓存在内存中, 在使用的时候就不必去磁盘上加载,这样可以提高运行的效率,虽然现在计算机的内存控件已经得到了很大的提升, 但是这种缓存策略一直被沿用, 尤其对于需要访问IO以及数据库等...原创 2018-07-17 13:21:36 · 2617 阅读 · 0 评论 -
空间索引之网格与四叉树
在介绍空间索引之前,先谈谈什么叫“索引“。对一个数据集做”索引“,是为了提高对这个数据集检索的效率。书的”目录“就是这本书内容的”索引“,当我们拿到一本新书,想查看感兴趣内容的时候,我们会先查看目录,确定感兴趣的内容会在哪些页里,直接翻到那些页,就OK了,而不是从第一章节开始翻,一个字一个字地找我们感兴趣的内容,直到找到为止,这种检索内容的效率也太低了,如果一本书没有目录,可以想象有多么不方便…可...转载 2018-08-14 17:52:38 · 1338 阅读 · 0 评论 -
Python 使用objgraph 定位内存泄露
内存泄露 既然Python中通过引用计数和垃圾回收来管理内存,那么什么情况下还会产生内存泄露呢?有两种情况: 第一是对象被另一个生命周期特别长的对象所引用,比如网络服务器,可能存在一个全局的单例ConnectionManager,管理所有的连接Connection,如果当Connection理论上不再被使用的时候,没有从ConnectionManager中删除,那么就造成了内存泄露。...转载 2018-08-14 23:49:21 · 16123 阅读 · 1 评论 -
游戏中AOI视野算法
AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。游戏的AOI算法应该算作游戏的基础核心了,许多逻辑都是因为AOI进出事件驱动的,许多网络同步数据也是因为AOI进出事件产生的。因此,良好的AOI算法和基于AOI算法的优化,是提高游戏性能的关键。我在实践中所熟知的游戏AOI算法大致有4种,...转载 2018-08-15 12:14:31 · 7825 阅读 · 0 评论 -
python操作redis用法详解
使用python来操作redis用法详解1、redis连接redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。redis连接实例是...转载 2018-09-05 09:52:20 · 342 阅读 · 0 评论 -
Protocol Buffer的python实践
Protocol Buffer 实践(一) 简介以及安装与使用由于最近对grpc产生了浓厚的兴趣,但是那是一整套东西,看了一下用到的东西不少,所以抽丝剥茧先写写这几天调研的protocol buffer -python的收获。 简介:以下引用自官方首页文档:Protocol buffers are Google's language-neutral, platform-ne...转载 2018-09-05 11:01:38 · 300 阅读 · 0 评论 -
Python并行编程——多线程
1. Python 多线程多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源...原创 2018-11-12 17:35:28 · 967 阅读 · 0 评论 -
Python并行编程——多进程
阅读目录1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool序. multiprocessingpython中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个...转载 2018-11-29 16:04:22 · 401 阅读 · 0 评论 -
数据缓存类设计
数据库数据缓存类设计 对于需要从数据库中获取的数据,如果频繁的进行数据库操作,在高并发的情况下会对数据库造成较大的压力, 此时可以对每次数据的查询结果进行缓存,并进行定期的更新,可以有效的解决这个问题。 在游戏中,关于服务端对于非玩家本身数据的加载获取与更新, 多设计到数据库的操作, 其中关于好友和战队成员等信息往往需要从数据库中获取,但如果每次都从数据库获取,那...原创 2018-06-30 12:04:48 · 815 阅读 · 0 评论 -
视频弹幕的Python实现
视频弹幕管理器的实现方法 直播接口提供的弹幕是通过消息的形式发送过来的, 在我们播放器进行展示的时候, 需要实现弹幕的移动与排布。实现的过程中将弹幕进行抽象,最终抽象出了的三个对象,其层次关系如图:图1 弹幕管理抽象出的对象层次结构文本对象: 负责文本的显示、隐藏与移动, 提供是否进入弹道和是否离开弹道的接口, 提供文本移动的TICK接口。弹道对象:包含多个文本对象, 并对这些文本对...原创 2018-06-02 14:54:12 · 3755 阅读 · 1 评论 -
游戏中的红点提示
1. UI界面红点提示结构设计需求描述:游戏中经常会出现层级较深的红点提示,这些UI层级形成树状结构,如图8所示,具体的需求就是叶节点上出现红点时,根节点到达叶节点的路径上经过的所有节点都需要出现红点提示,同理节点的红点消失时,该节点向上的路径上,直到遇到变化的红点之前,所有节点都需要更新。实现方式:树形结构的问题最好的实现方式是递归,而每个节点的UI通常对应一个UI类,因此只需要建立父节点与...原创 2018-02-28 20:08:53 · 4693 阅读 · 1 评论 -
游戏中自定义滑动列表(分片加载、自动吸附)
自定义滑动列表需求描述: 游戏中物品展示会存在自由滑动与吸附的需求, 并且在点击时需要吸附到固定位置,此外列表中的item可能需要绑定各种复杂的事件,吸附的流程非常影响体验,而内置的列表控件不支持吸附操作,不方便添加停滞后的事件触发, 难以在滑动的过程中改变每个item的外观表现。 实现方式: 实现自定义列表控件, 之前实现过相关的自定义列表控件, 具有基本吸附功能, 但是不支持item点击事件,...原创 2018-03-01 11:10:24 · 598 阅读 · 0 评论 -
游戏中时间限制活动的结构搭建
时间限制活动的结构搭建需求描述: 游戏中存在很多与时间相关的活动与变量,例如每周战斗积分上限、每天胜场数积分奖励、每天奖励投放、每天获取过多物品报警监测。这些都是与时间相关的活动,简单来这些活动中隐藏了需要时间刷新的变量,可能是每天、每周、每月、每年等。实现方式: 将与时间相关的,需要时间进行刷新的变量进行抽离,建立公共时间刷新变量的修改与存储结构。将同一天、同一周、同一月的判定函数抽离, 作为参...原创 2018-03-01 11:21:30 · 460 阅读 · 0 评论 -
游戏中 不停服更新
物品投放的热更新机制需求描述: 游戏在上线后会不断的推出更新,其中更新的内容主要包括UI资源与新的道具物品,UI资源通过patch更新,在进行更新时仅牵扯单个客户端的表现,因此不存在版本问题,可直接进行更新。游戏中新的道具与物品的更新,因为需要客户端与服务端功能的支持,如果采用热更新就存在客户端版本与服务端版本不一致以及组队时不同客户端版本不一致的情况,尽管可以在玩家登陆时对客户端版本进行强制升级...原创 2018-03-01 12:36:19 · 3672 阅读 · 0 评论 -
游戏中热更新机制
--------------------------------------------------------------------- 对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制。它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能。可谓必备机制。-------------------------------------------...转载 2018-03-19 10:49:24 · 5524 阅读 · 0 评论 -
游戏中的场景切换
游戏中的场景切换 游戏中存在多个简单场景的,在进入游戏前可能在场景之间来回的切换,场景返回依据的是场景打开的顺序,而场景的打开是UI点击事件驱动的。 从这个角度看,打开UI时记录其打开的场景,关闭UI时关闭其打开的场景,建立UI栈通过控制UI栈的进出,可以控制场景的顺序打开与退出。 不同的UI可以打开相同的场景,可以通过UI保存一份场景数据, 在不同UI打开相同场景时,使得同一个场景...原创 2018-03-31 15:38:18 · 8010 阅读 · 1 评论 -
数据缓冲池
数据缓存池类 游戏中AI必不可少,为了营造更加真实的AI需要赋予AI更加真实的数据, 其中最为瞩目的就是名字和匹配时的头像, 解决的办法有随机和名称库。显然这些数据不如采用真实的玩家数据。 使用真实的玩家数据可以从数据库进行随机筛选也可以采用缓冲的方式, 在匹配进程上对前来匹配的玩家的数据进行缓存。由于数据库操作会带来一定的风险, 因此采用玩家信息缓存的方式。对于数据的...原创 2018-04-28 11:40:50 · 1104 阅读 · 0 评论 -
摇一摇加好友功能实现
面对面加好友 游戏中的好友系统通常会就有面对面添加好友的功能, 功能具体内容就是输入相同数字串进行搜索,就能搜索到一定时间内输入相同数字串的玩家。从理解上看功能描述较为简单,但具体的实现过程还是有很多需要注意的地方。 首先就是功能的整体结构, 可以采用中心化的方法, 对于发送了请求的玩家进行信息的存储, 全服所有玩家都把数据发送过来, 然后在中心节点上进行处理,最后处理结...原创 2018-04-28 11:55:51 · 1935 阅读 · 0 评论 -
Python并发编程——线程池
线程池 在IBM文档库中这样的一段描写:“在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这...原创 2018-06-02 14:43:08 · 8391 阅读 · 2 评论 -
正则表达式
为什么使用正则表达式?典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。通过使用正则表达式,可以:测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 替换文本。...转载 2018-11-29 16:11:04 · 374 阅读 · 0 评论