[项目经验]动作游戏设计中极容易犯的设计错误

2023-11-20 19:20

本文主要是介绍[项目经验]动作游戏设计中极容易犯的设计错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


http://www.gameres.com/msg_232890.html

神仙道类游戏不行了,那之后怎么办呢?大家都有自己的一个新的走向,不少的朋友也开始做起了横板动作游戏的项目,希望在这片国产游戏的“孤岛”上开辟一条新路。最近玩了一些朋友团队的横板动作游戏后,发现很多项目中都多多少少的犯有一些动作游戏设计中极其容易产生的错误,于是拿来吐槽一下。但是在此之前,我认为你应该是已经了解了动作游戏和神仙道、大菠萝类型游戏开发的本质区别了,如果你心里还没谱,可以看下这个讨论(http://bbs.gameres.com/forum.php?mod=viewthread&tid=229181&page=1#pid1259600)。


1,太过切合图形的碰撞框。

  为了配合美术资源而拉框,这本身就违背了拉框的意义,拉框的目的是为了游戏平衡设计中策划需要更好地把握动作的平衡性,抛开这个原则不说,其实很多时候和策划欠缺经验也有一定的关系。很多年轻的策划在设计一些动作游戏的角色动作,进行攻击框、受击框、防御框设定的时候,经常会被肉眼欺骗。

[项目经验]动作游戏设计中极容易犯的设计错误 ...

  这个图片就是一个很好的例子(红色是攻击判定框,绿色是受击框),这是一个罗伯特踢腿的动作,从图片和真实世界的体验来看,我们不难看出,左边拉的框没问题,因为这个动作的确发力点在脚上,而身上这一大片被打也正常。但是事实上代入到游戏中之后,这就错了,这样的拉框会给人带来很大的不爽,这样的失误居然发生在侍魂3代的牙神幻十郎身上过,你如果玩一下那个游戏,你会发现牙神的重刀太接近了就砍不到人。而右图则是一个相对老道的拉框,在这个拉法里面即使敌人很接近一样会被踢伤,而罗伯特这个角色本身腿脚就比较长,因此下盘故意提高,让一些下盘动作没法命中。当然还要申明一点就是KOF系列中,已经不再是简单的一个攻击框和一个受击框最多外加一个防御框形成一帧动画了,这里只是为了说明这个问题。

  这样可怕的错误还会发生在一些很典型的动作里面,尤其受伤动作(大多国产游戏)和倒地动作,这些动作虽然看似每一帧都有受击框,可是如果你真的每一帧都给了受击框,那么角色被莫名其妙诡异的无限连连到死也不足为奇了。而同样的一些类似恶魔城系列后滑的快速闪避动作,也应该有短暂几帧没有受击框的判定。是的,没有受击框判定的时候角色是“无敌”的,但必要的时候你应该让角色“无敌”。

2,被遗忘的核心数值设计。

  大多数策划尤其是自称数值策划的,更倾向于算一套概率,然后显得很能做游戏,可是动作类游戏中,偏偏这样的需求非常低,相反,如果你有足够的游戏研发经验,你会发现每个项目中都有“隐藏的”数值设计,这些数值设计的结果在玩家肉眼看到的表和数据中没有,却能体会到,比如角色的体重在跑酷类游戏中的作用。而在动作游戏中,最典型的最容易被遗忘的一个属性就是——平衡值。

  什么是平衡值,就是一个角色距离被强制倒地还有多久,而对应的每一个动作都应该有一个破坏平衡值,使这个动作命中的目标在需要的情况下丢失一定的平衡值,而平衡值本身则会按照规则自动回复。如果你有丰富的游戏经验,尤其是横板动作游戏的经验,特别是那种可以连续殴打敌人的动作游戏,比如街机的吞食天地2(三国志,可以选关羽张飞赵云黄忠魏延的那个),虽然普通攻击是3连的,可是就算你只用第一下而故意不连,反复打击同一个角色多次,他一样会被击倒,这就是平衡值在发挥作用。而如果忽略了平衡值会发生什么?你可以看一下首页上的某个仿吞食天地2的Demo( http://www.gameres.com/msg_228521.html)——抽血抽到死、Bug一般的存在……而除此之外,横板动作游戏中还会有很多如吹飞力、稳定性等属性他们都应该存在,只是不显示给玩家看而已,这些数值千万不能忘了。

  当然忘了是一码事儿,我们还经常看到一些画蛇添足的设定——那就是动作游戏居然敢有Miss。是的,DNF成功了,他有Miss,但是复制他的游戏都失败了,因为连这种不该有的都复制进去了。作为一个动作游戏,本质上来说,是否命中取决于玩家的操作,而不是数值计算,因此本不该有这个。而从游戏设计的角度来说,我们很多策划也总是爱谈理论,什么玩家的成就感之类,那么成就感最简单粗暴有效地表现是什么—— 当一个玩家在合适的时候做了合适抉择,产生了合适的效果,这就会产生爽快感,这就是一种成就感。LoL会明显的提供这样的成就感,但起凡三国不会。因此你不该让玩家在合适的时候做了合适的动作却得到不合适的结果,假如敌人跳起来一个飞腿向我踢来,而我准确的使用遨游根(这你不知道还做啥动作游戏的策划了?)却得到了Miss,不仅如此我还挨了这一脚,这是一种糟糕透顶的体验!

3,菊花被插一样可以格挡。

  这是一个很容易发生的,也是非常滑稽的错误。在很多动作游戏中,我们的角色的确可以防御,但是这个做的糟糕的话,会产生我做出防御动作了,敌人在我背后用长矛插了我的菊花,可是因为长矛太长了,也插中了我的防御,结果我成功的格挡了这次攻击……

  这样的错误归根结底在于数值设计的问题,你的防御判定方式出了问题,假如你只判断攻击击中了我的防御框就优先防御有效,那一定会发生这样的问题,如图所示。

[项目经验]动作游戏设计中极容易犯的设计错误 ...

  在图中,我们隐约(好吧,有点模糊)看到这是圆桌骑士中兰斯洛特的防御动作,橙色的是角色的格挡区域,绿色的是受击框。有3种攻击:

1)红色的攻击,从肉眼看和游戏经验分析,很显然这是格挡成功的。

2)蓝色的是背后攻击,从肉眼看和游戏经验分析,这绝对是造成伤害(格挡不能)的。
你的感觉是对的,并且99.999%正常的游戏玩家也好用户也好,即使是外行,看了都能接受你的说法,因此这里你会产生一个错误的想法——只要命中了防御框,这个攻击就是被格挡的。

3)悲剧产生,紫色的框击中了你的菊花,可同时不巧的是他碰到了你的防御框,如果按照上面归纳的来看,这个动作应该是被格挡的,可事实上地球人都认为这个你是挨打了。


  说实话,这是个头疼的问题,没有经验的策划会提出,我们只要知道攻击的方向就知道该不该算了,但事实上每一帧都是静态的,就算你联系上下帧的位置,你也不能做出这个判断一定是从后插向前的,而不是从上劈到下的,同理,从上劈到下,这个也该命中。而从逻辑出发,我们关心的只是这一帧如何判定,说实话,我没有绝对好的经验,但是多个项目的经验告诉我,用攻击框RA,受击框HA,防御框GA这3个框比较:(如果RA与HA相交的宽度/HA的宽度+RA与HA相交的高度/HA的高度)>=(RA与GA相交的宽度/GA的宽度+RA与GA相交的高度/GA的宽度)就可以判断为格挡失败。这个公式并不好,他并不是总是工作正常的,只是一些可能你已经玩过的我做过的游戏中,他还算是工作正常的。

4,AI设计应当抛弃WOW思路。

  AI设计,这个是最要命的,很多策划还抱着WOW那种,“如果目标XXX我就XXX”的思路。对不起,横板动作游戏中没有这套,大多有趣的关卡设计中,怪物的AI并不会以玩家的行为或者某个捕捉的目标为依据,顶多只是拿来参考。举个简单的例子,一个最弱的小兵,他在来回巡逻,每5帧他进行一次检查,如果玩家的X与自己的X相差小于50就发动攻击,这是一个动作游戏的AI设计方式;而同样的事情,“WOW思路”的错误做法是一个小兵他在来回巡逻,当50范围内有目标就开始攻击目标,甚至追击。看起来的确很像,但本质上是有区别的,关键是思考问题的出发点。动作游戏的AI更典型的另外一个做法就是一套固定的规律,然后玩家掌握规律后会相对轻松点,这是Capcom的风格,不仅洛克人,还有怪物猎人都是这样的。

  在设计AI的时候,无论如何设计都有一个原则,请你一定遵守——不要企图让AI太聪明或者太不易被人理解,好的AI设计不是让玩家感觉AI本身难,而是让玩家可以捉摸出AI的规律,想出合理的对策。

5,Erlang毕竟还是CS协议的。

  这是我个人差点犯的一个非常滑稽的错误,有时候也要敲敲自己的警钟。虽说我们知道动作游戏必须做P2P,但还是有很多策划梦想着可以做出个大场面的动作游戏来。Erlang与Haxe在服务器上有些思路会非常接近于P2P的模式,以往我们设计一个副本,会把副本作为一个容器,而玩家被扔进这个容器,采用这样一个思路;而Erlang的构架思路则会是每一个玩家是一个容器,副本被扔进玩家里面,当玩家在同一个副本的时候,实际上是通过Erlang来传递数据在服务器端上采取类似P2P的做法复制了2分一样的副本给不同的玩家,产生他们在一个副本的效果。是的,你想得的确没错,这跟P2P很接近,而且Erlang著名的就是转发效率,只要你的Workers写的够好,整个游戏效率都是很高的,但是慢来,客户端到服务器的这个传输过程,他本身还是CS的,所以千万不要想多了……

  以上是一些看了朋友们的“动作游戏”后的吐槽,有时候你感觉一个游戏有那么点小小的怪怪的感觉,但是骨子里这游戏已经在设计和研发上犯下了巨大的错误了。

这篇关于[项目经验]动作游戏设计中极容易犯的设计错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396856

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin