zoukankan      html  css  js  c++  java
  • 游戏开发中自定义脚本与配置

    在游戏开发中,根据策划的需求,去实现各种各样的功能。很多时候,程序实现策划的需求,并不是什么难事,只需要按照要求把需求翻译过来就可以了。然而,这种翻译的方式,不过是在代码中写死了各种各样的条件和参数,直接导致策划在调整部分参数,或者条件的时候,就要程序重新调整代码。由于开发经验的不足,导致了这种事情直接发生在我的身上,导致个人的身心相当疲惫,而且效率相当的低。虽然在开发的初期,就意识到会发生这些情况,也做了部分的用于可配置的文件,但是这些仅仅局限于一些类似于数值的东西,如人物的基础属性,然后根据策划的要求,抽了以下的数值表:

    人物属性表
    等级 血量 防御力 攻击力
    1 100 99 100
    2 150 199 299
    3 200 299 399
    ...      

    这样倒也解决了部分需要调试的数值,策划如果觉得数值不对,直接修改这份配置表就够了。

    然而,问题却不是出现在这里,而是在一些功能逻辑上。

    例如,策划定义了一个技能 “万剑诀”,根据策划的描述,首先万剑诀在击中了目标的时候,目标身上会出现一个破甲的损益效果,同时技能播放结束后,技能的释放者会增加一个反弹盾的增益的效果。

    以上的需求倒也不是什么难事,然后我噼里啪啦的一同猛敲,搞定了。但是接下来出现一个情况,团队经过讨论,“万剑诀”不应该有“反弹盾”的效果,还能怎么办,就在代码了改一下就可以了。但是问题就来了,每次的修改,都要改代码,累死球,又要听老大的一通说,老大的出发点是,尽量把东西做成可配置的,策划调整一下配置,就可以了开测。不需要程序调来调去的,其实也不无道理,但是对于我这种没有太多经验的程序来说,一开就设计这些东西还是有点问题,所有一开始就没有这么做,目的是先出效果,再重构,看来,现在是该重构的时候了。

    像“万剑诀”技能触发效果的由“触发目标破甲效果” 和“触发者反弹盾效果”改为仅仅触发“触发者的反弹盾效果”做成动态的配置的话,绞尽脑汁,想了一个比较临时的办法。由于目前我其他数值之类的配置文件都是csv格式,因此就在csv上做文章吧。

    大体的思路是csv表格的第一行,代表的是触发条件,触发条件对应的值,就定义一些自定义的语法,这些语法较为简单,策划或者其他测试人员只要看一下我代码中支持的规范,就可以修改,如果当前的代码不支持,那没得办法,还得修改一下代码,但是到了游戏开发的后期,基本上新的改动不会很大,都是在原有的基础上修改,这样的话就有利于快速的调整。

    因此,我将技能相关的策划信息,调整为两张表,一张为技能的数值表,一张为技能的功能表

    技能基础信息表
    技能名称 攻击力 暴击概率 技能描述 最高等级
    万剑诀 1000 0.5 很多的剑掉下来,砸死你 99
    技能功能表
    技能名称 技能触发  技能击中怪物 技能结束 技能暴击
    skillName start hitTarget end crit
    万剑诀   target.extra_effect(name_effect=pojia) owner.extra_effect(name_effect=fantandun)  

    解析一下:target.extra_effect(name_effect=pojia) 就是我们定义的一些简单的语法表达式,具体含义如下:

    target:表示的是目标角色,属于对象,就是给技能击中的目标角色。

    extra_effect: 表示一个动作,是对象需要触发的动作,添加一个额外的特效在对象身上。动作名称可以为“stand”、“move”、”die“ 之类的,只要你将含义定义好。

    (key=vale): 表示的是一些参数,对象触发动作的时候,有时候需要添加一些参数,如上面的(name_effct=pojia)也就是说添加指定的 ”pojia"这个特效。

    连起来的含义就是被技能集中的目标角色,需要添加一个破甲的损益的效果。

    这样的话,策划就可以按照我们定义的一些规范,来调整相关的功能。因为我觉得这些策划来策划去的东西,一个是基础的属性还有就是相关在特定环境中的动作了。目前我遇到的需求,以上的配置暂时可以处理。至于有没有其他更好的方法,目前还想不到啊,想不到啊,烦躁中……

    编程之美。
  • 相关阅读:
    Spring之Redis访问(Spring-data-redis)
    SpringCloud之Hystrix容错保护原理及配置
    SpringCloud之Feign声明式调用原理及配置
    SpringCloud之Ribbon负载均衡配置
    基于Zookeeper实现分布式锁
    SpringCloud之Eureka注册中心原理及其搭建
    SpringBoot定时任务(schedule、quartz)
    Java和操作系统交互(Java 代码是怎么执行)(转)
    深入SpringBoot注解原理及使用
    Spring事务的配置、参数详情及其原理介绍(Transactional)
  • 原文地址:https://www.cnblogs.com/LuQingshang/p/4582211.html
Copyright © 2011-2022 走看看