分类归档:实践总结

游戏开发中的全环境配置文件管理

面临问题

游戏开发中我们常常会遇到一个问题就是测试环境下配置文件与生产环境配置文件不一致,当然最常用的就是在maven中指定不同的profiles然后分别打包,但是在游戏上线后这种方式就不太灵活,例如游戏上线后需要在特殊节日增加了一些新活动,但这种游戏逻辑已经内嵌至代码中,不必修改,往往只需要改几个配置就够了,同时本地开发是windows,osx,生产环境又是linux,加载路径也是千奇百怪,那么对于这种需求我们应当如何解决呢?

功能设计

  1. 区分开发,测试,生产环境
    这一点很容易理解,即划分好各环境沙箱,使其相互之间没有干扰,最简单易行就是使用spring中PropertyPlaceholderConfigurer来解决各配置的差异,同样你可以使用当然你也可以使用Spring Bean definition profiles,但这个功能支持需要使用spring 3.1以上版本.
  2. 提供统一的文件访问接口
    文件的使用者不应该把重点放在如何加载配置文件上,而是直接将文件封装成他需要的对象,这样我们就需要一个能解析各种文件的工具类
  3. 基于事件机制的加载触发
    配置文件加载不应该是显示的调用,而应该是基于事件机制,当在消息总线中抛出一个事件,那么各模块的配置文件加载器需要知道此时是否需要加载配置,而不用关心当前游戏服务器的状态.

阅读全文…

游戏开发中的定时器

面临问题

在游戏中我们经常会遇到定时器,例如从大方面来每日的零点,节假日双倍经验,boss刷新,从小方面来说回合制中该回合在多长时间内结束,战斗中buff/debuff状态时间,技能的cd时间等等都涉及到定时器,前一种我们实现方式比较多,例如最常用的crontab,quartz都可以实现,而后者更像一种闹钟,到时候就去唤醒一个事件.我们今天就先讨论了下后面这种”闹钟”如何实现.

设计实现

要使用闹钟我们首先想到的就是Timer,但在java 1.5后全新推出了ScheduledThreadPoolExecutor,我们用它来对Timer进行替代,其次我们需要定义一个间隔周期,让这个定时器每隔多长时间去跑一下,看看有没有什么任务可以执行,这个间隔不能太长,太长会导致某些任务触发不及时,但也不能太短,太短容易加重系统开销,我们暂定50毫秒走一次定时器,伪代码看起来像这样

阅读全文…

游戏开发中的锁工具

面临问题

最近一直在忙于新游戏的逻辑开发,在开发过程中发现很多地方都需要用到锁,比如操作背包,用户钱币,用户状态修改等,在以往的实现上大部开发人员都是奖这些操作归结到各个独立的模块中,然后在相应的功能上做一个synchronized或者lock,当然这种做法不是不可以,但从全局上考虑,这种做法似乎有些不太合理,这就如同直接将事务加在dao的curd上,而实际开发中这种事务基本上起不到任何作用,毕竟脱离了业务逻辑的事务没有任何意义.所以我们也需要将锁定的操作扩展到对应的业务功能上.我们先梳理下我们目前的需求,即需要支持对特定的一个或者多个对象的锁定与解锁,你会如何设计这种锁呢?

设计实现

首先定义一下需要实现的方法,根据不同的需要锁定的对象返回List,我们暂时用ChainLock来封装List,代码如下

有了ChainLock后,我们自然需要定义相应的lock与unlock方法

阅读全文…

游戏概率算法实现

问题描述

最近一直在着手一个新游戏的开发,其中很多地方都会涉及概率问题,由于当时只是为了完成功能,并没有在这一块考虑过多,现在回过来再看这个问题,感觉有必要深入一下,如果是你,你会如果实现一套概率呢?

解决方案

首先我们要知道什么是概率算法,概率算法就是在算法的过程中引入随机数,使得算法在执行的过程中随机选择下一个计算步骤,而它最后可能导致结果是不确定的.
由比,我们可以假设一个概率问题,例如杀boss过程中有10%的概率出物品A,20%的概率出物品B,30%的概率出物品C,40%的概率出物品D,我们应该如何下手呢?此时我脑子里最先想到的就是划分区间,然后丢色子.

  • 方案一
  • 我们首先划分出4个区间代表A,B,C,D四个物品的概率,即A[1,10],B[11,31],C[31,60],D[61,100],然后取一个[1,100]的随机数,该随即数落到哪个区间就是哪个物品.
    阅读全文…

BTrace详细介绍

最近排查线上OOM的异常时用到一个强大的动态跟踪分析工具BTrace,于是花了点时间研究了下用法,这里的内容基本是对官方说明进行的翻译,顺便加了点心得.

BTrace介绍

BTrace是一个Java的动态跟踪工具,BTrace的工作的基本原理是把跟踪的代码动态替换到被跟踪的Java程序内,其实现机制是Sun Attach API + BTrace脚本解析引擎 + Objectweb ASM + JDK6 Instumentation,项目主页是在这里,用户指南点击这里.

安装BTrace

BTrace的安装非常简单,首先你需要下载BTrace,最新的版本是1.2.2,然后解压至任意目录,设置好BTRACE_HOME后将bin目录加入至环境变量PATH中即可.
阅读全文…

第 3 页,共 9 页12345...最旧 »