猫史档案馆


【创作学园-第一期教程】格斗类游戏教程 |【进阶Kitten串讲】第五期

用户:爵士OIer爵士OIer查看:15 回复:20 评论:15 创建时间:2021-05-15T11:34:41


既然官方有邀我了,那么我在百忙之中抽出时间来写了这篇教程。

基础的内容大家都讲得差不多了,来点进阶的。

 

 

 

一、路径判定

 

 

原为我在JROI和慕斯谈论有关内容时的极其简单的成果(逃

考虑这一个问题,我们的角色需要高速俯冲,需要判定有没有碰到敌人。

我想大家都会想到这样的积木:

center_image

 

然而这会有一个显然的问题。

当我们的角色需要调整到大小比较小的时候,由于步长过长,有的时候角色会直接“穿过”敌人而无法判定。

 

这个时候我们就需要对角色“路径”而非“位置”进行判定

 

以上面的例子为例,我们从左到右横坐标增量为 800,那么我们判定路径是否经过目标时,只需要判断目标是否在可攻击到的区间内即可

具体来说,如果满足以下三个条件,即判定为攻击到了:

1. 角色x坐标 > 目标x坐标:表明冲过了目标

2. 角色x坐标 - 800 < 目标x坐标:表明从目标的左边开始向右冲

这两个条件满足了在横向上,攻击区间覆盖了目标

 

积木如下:

center_image

 

如果游戏是考虑高度的,那么假设两个角色能够相互碰到需要满足纵坐标之差小于等于 80,只需额外满足

3. | 角色x坐标 - 目标x坐标 | < 80:纵向上攻击区间覆盖了目标。

即可判定为攻击到了。

 

 

应用

冲锋,子弹,火球等。

 

 

 

二、血条的实现

 

 

血条的实现其实是很简单的。

 

我们知道,血条的每个单位长度都对应着一格的血量

因此我们设血量为x,总血量为s,总长度为 l,当前长度n,首先有个简单的比例式:

x : n = s : l

等式的左右两边都等于一个单位长度。

 

现在我们经过简单的变形,把 n 求出来。上等式变形为

n = l * (x / s)

也就是说,我们的血条长度等于总长度诚意当前血量与总血量的比值

 

因此我们有如下积木:

center_image

(由于我的血条一开始画长了,所以这里乘了个15。本来的宽度是100%的。)

 

 

应用

进度条、血条。

 

 

 

三、随机化行为

 

 

假如我们要飞在空中的敌人,我们该如何安排他们的飞行路径?

 

我不会用各种智能的方法去控制(而且大多数时候也不需要),因此我就省事一点(逃

前在进阶Kitten串讲第二期中我谈到了正弦波的路径,这次我们用随机化来执行。

 

首先我们需要做到飞行路径和速度的随机化

这是很容易实现的,我们有如下积木:

center_image

 

同时敌人不可能一直朝着一个方向

因此我们随机化他们的朝向

center_image

 

 

下面来几个技能的实现。

 

 

随机类技能

这里随便什么技能都可以,但前提是敌人随机释放

具体做法就是等待一个随机的时间然后给他放出去

 

 

随机分身

也是同上的,重复执行等待随机的时间,克隆自己。

 

给出示例积木作为参考:

center_image

 

关于随机化这里就讲这么多,其余由大家探索。

随机化算法更多是用来求解一类最优性问题或可行解,例如模拟退火算法,

还有些随机化算法是降低正确性以提高效率。

 

 

 

四、非线性前进速度

 

 

我在进阶Kitten串讲介绍了加速度的概念。

对于非线性的前进速度,这里随手举二次的速度为例。

 

比如一个物体的运动路程关于时间的函数为y=x²,那么这个物体在t=0.5和t=1间的平均速度可表示为下图:

center_image

 

现在我们就像要求t=0.5时的瞬时速度,怎么办?

我们想:如果我们选取的另一个时间点无限接近0.5,那么最终求得的平均速度也无限接近与瞬时速度。然后我们求个极限就可以。

 

我们设y=f(x),时间t的增加量为dx,于是增加的路程为f(x+dx)-f(x),增加的时间为dx,这样,两者相除求极限即可。

如下:

center_image

 

我们还有另一种求极限的方法:洛必达法则。

center_image

总结一下,我们求瞬时速度的方法:

center_image

 

由此我们得到一般的情况:

设速度为 v=at²+bt+c,对其求导之后得到加速度为2at+b

 

控制线性的加速度是容易办到的。接下来我们对加速度进行有限积分即可得到非线性速度。

 

 

应用

持续前进,气功等。

 

 

 

五、参考系变换

 

 

如果我们的角色要一直前进,不如让背景一直退后。

这是一个非常有用的方法。下面结合“四”的内容,给出一个示例程序。

相关积木如下:

center_image

 

center_image

 

 

 

 

附  教程相关作品取材

https://shequ.codemao.cn/work/53478829

https://shequ.codemao.cn/work/44836261

https://shequ.codemao.cn/work/6517598

 

 

 

总结

 

本期的教程大家或许已经强烈的感受到了数学的参与其中。

数学是算法和数据结构的基础,因此学好数学是编程的前提。


回复

上一页1 页 / 共 1下一页
AlcalaAlcala

沙发,dd

点赞0


评论


NaughtNaught

dd

 

点赞0


评论


Mellin_AmpMellin_Amp

好家伙,我这就去码教程了

点赞1


评论


屑蜗屑蜗

ZJOI!!!(不忍心

点赞0


评论


流熙墨晨流熙墨晨

所以最精确的近战攻击判定是……

点赞0


评论


JHS天启之岛_____一首页JHS天启之岛_____一首页

ZJOI!!!(不忍心

点赞0


评论


晨月霜星晨月霜星

你也来写这种教程。还是你的教程风格,公式为主

点赞0


评论


ssssSSSAssssSSSA

这也不咋样呀

根本不用那么复杂

 

点赞0


评论


小苏打_小苏打_

额。。。差点让我以为要讲微积分。。。

不过。。。我还是很好奇作者的学历。。。

极限的思维(lim),还有作者的表述:非线性的(线性代数?)。。。这是高中的知识吧。。。

点赞0


评论


小苏打_小苏打_

“控制线性的加速度是容易办到的。接下来我们对加速度进行有限积分即可得到非线性速度。”

 

微积分?

点赞0


评论


闪耀的曜闪耀的曜

az,我一个4年级的看得懂吗?emotion_编程猫_冷漠

点赞0


评论


33aaron33aaron

点赞0


评论


假编程猫258假编程猫258

好家伙

点赞0


评论


天曌之子Joker天曌之子Joker

给阿尔法上精贴的链接麻烦有没有好心人给一下?

点赞0


评论


ssssSSSAssssSSSA

这对于我们这种高手来说基本 没有用ya

点赞0


评论


AlcalaAlcala

dddd

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

ZJOIemotion_doge

点赞0


评论


爵士OIer爵士OIer

dd

点赞0


评论


f(hxr)f(hxr)

imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论


AokenAoken

挖(+收藏)

点赞0


评论