java用接口回调回合制游戏_类DOTA游戏如何设计多样化的技能系统?

这个嘛,我觉得我还是能答的,因为我曾经设计了DOTA2的一款RPG,虽然未完(逃

有道云笔记

有道云笔记

有道云笔记

有道云笔记

当然没翻译完,因为弃坑了233

以上是数据驱动类型的技能,还有脚本驱动类型的技能。

===========================================================

上面很多答主讲的其实都是数据驱动类型的技能,也就是data-driven,简单的来说,就是把通用的技能肢解成若干方面。

一个数据驱动的技能是一串键值的集合。键值是单一的、基于树的结构,用于储存包含了键/值对的嵌套部分。一个典型的数据驱动类型技能框架是这样定义的,当然指的是dota2:

"datadriven_skeleton"

{

// General

// ----------------------------------------------------------------------------------------

"BaseClass" "ability_datadriven"

"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"

"AbilityTextureName" "spellicon"

"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"

"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"

"AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"

"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"

"AbilityType" "DOTA_ABILITY_TYPE_BASIC"

"MaxLevel" "7"

"RequiredLevel" "-4"

"LevelsBetweenUpgrades" "7"

"AbilityCastPoint" "0.0"

"AbilityCastAnimation" "ACT_DOTA_ATTACK"

"AnimationPlaybackRate" "1"

"AnimationIgnoresModelScale" "1"

// Stats

//----------------------------------------------------------------------------------------

"AbilityDamage" "0 0 0 0"

"AbilityManaCost" "0 0 0 0"

"AbilityCooldown" "0.0 0.0 0.0 0.0"

"AbilityCastRange" "0"

"AbilityCastRangeBuffer" "250"

"AbilityChannelTime" "0.0 0.0 0.0 0.0"

"AbilityChannelledManaCostPerSecond" "30 35 40 45"

"AbilityDuration" "0.0 0.0 0.0 0.0"

"AoERadius" "250"

// ...

}可以看到,一个技能被拆分成了很多很多各自独立,相辅相成的部分,目标选取限定、图标资源、技能类型、最高等级、升级等级要求、升级等级间隔要求、施法点、施法动画、目标阵营限定、目标类型限定、粒子效果、伤害、CD、耗蓝、施法时间、施法前摇、施法后摇、持续时间、AOE范围……

这些部分又各自有各自的关键字,将他们依据自己的创意组合在一起,可以快速地组合出非常非常多的技能,就是数据驱动类型技能存在的最大意义。

第二个意义在于,数据驱动类型技能是一个框架,它的存在是最通用的一个模板。就拿非常有特点的,冰魂的大招来说。冰魂大招的具体实现压根不是在数据驱动类型所能实现的,但是如果你解包了文件之后你会看到,冰魂大招确确实实存在于数据驱动类型技能表里头。为什么?就是因为数据驱动类型给了你一个框架,你先把数据给我填上去,再去谈脚本实现。

脚本驱动的技能确实给力,它相对于前者更底层,控制更多的东西,甚至可以一定意义上改变游戏的规则(在冰魂大招里体现为禁止生命回复),但是如果所有的东西都拿脚本来写,整个代码会变得混乱不堪,充斥着这样那样的变量和语句,无法提炼出技能的核心数据。

因此,数据驱动往往和脚本驱动统一在一起,有纯数据驱动的技能,也有数据驱动里包含脚本驱动的技能,还有少数纯脚本驱动的技能,不过前两者占大多数。数据驱动提供技能最基本的类型和框架设定,同时为脚本提供了接口,怎么实现,由脚本提供者去考虑。

==============================================

因此,你说一个普适的技能系统是不存在的,即时战斗的和回合制的能一样吗?宝石迷宫和暗黑破坏神能一样吗?这跟2D\2.5D\3D没关系,画面跟系统不是一回事(大多数情况下,你说fez我也没辙)

你先要选定一个游戏类型,仔细思考其职业、系统上会涉及到的东西,然后用一个尽可能大而全的框架把你的构思框住,细细肢解,最后非常特殊的再单独使用脚本实现。因此不要急着去做这个通用的框架,把能想到的都想了,把框不住的东西问了程序看能不能单独实现,再去肢解。肢解也不要一次就弄完,反复想想,能不能分得更细,更科学,更有结构性,你在架构上多花一个小时,或许后期实现能省十个小时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值