'Raiden 2'紫色激光背后的数学是什么?


15

激光的路径受用户输入和屏幕上出现的敌人的影响。这是一个视频,在5:00分钟时显示有问题的激光:Raiden II(PS)-1个循环清除-第2部分

更新

这是使用Inkscape进行的测试,飞船在底部,等离子攻击了前4个敌人。似乎有一种模式。我先移动了船,然后将船把从其移开,形成了45°角,然后在尝试拟合曲线时,我发现了平行船把的图案,并一直沿用直至到达最后一个敌人为止。 在此处输入图片说明

更新,2012年5月26日:我使用贝塞尔曲线启动了XNA项目,仍然需要进行一些工作,下周将更新问题。敬请关注 !

在此处输入图片说明

更新:5/30/2012:确实似乎他们使用的是贝塞尔曲线,我想我将能够复制/模仿这种等级的等离子体。自上次以来,我发现了两个新主题:弧长龙格现象,第一个应该帮助在Bézier曲线上进行线性运动,第二个应该帮助优化顶点数量。下次我会放一个视频,以便您看到进度8-)


2
好吧,这是某种样条。可能是贝塞尔曲线。我不确定这个问题是否可以由原始开发人员以外的任何人回答。如果您想重新创建此效果,则应向我们展示您所拥有的,并告诉我们该效果如何。
MichaelHouse

2
不知道,但是它有一些激进的意思。
Hackworth

1
玩过不健康的Raiden,我怀疑牙膏是任何一种闭合曲线。它似乎总是保留相当多的内存。我怀疑它正在使用强制转弯半径进行某种路径选择。

@ Byte56:Shmup开发人员/爱好者是热心的,如果现在还没有对此进行记录/反向工程,我会感到惊讶。

3
看起来它一次将一个段放置在一个从船上出来的位置,并且具有最大的弯曲度,并且每个段都朝着敌人(如果有)在附近或朝着船舶运动的方向转向。
凯文·里德

Answers:


6

我刚刚创建了一些可以帮助您的东西。这是为了帮助GLBasic论坛上的某人。

这是我建议的论坛链接: 随机纹理滚动山

这是用GLBasic编写的,但是我试图使其易于阅读,因此应将其轻松转换为任何语言。

要使用它满足您的需要,您需要生成样条曲线数据/点。用样条曲线点代替示例中的“ hill”点。您只需要以某种方式添加动画/闪烁效果。也许是随机的纹理偏移。

真正的“魔术”发生在我的“ AddPoint”函数中:

FUNCTION AddPoint: h AS THillPoint
    DIMPUSH self.points[], h

    // Is this the very first data point?
    IF LEN(self.points[]) = 1
        self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
        self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
        RETURN
    ENDIF

    ALIAS h0 AS self.points[-2]  // Reference to the 2nd last point
    ALIAS h1 AS self.points[-1]  // Reference to the last point
    LOCAL angle#
    LOCAL v1 AS TVector
    LOCAL v0 AS TVector

    // Calculate 'p2' of HillPoint - form rectangle with previous point
    angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x)  -90// Angle of the two points

    v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
    v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
    v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
    v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
    h0.pu = h0.pu.AverageWith(v0)
    h1.pu.Copy(v1)

    v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
    v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
    v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
    v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
    h0.pd = h0.pd.AverageWith(v0)
    h1.pd.Copy(v1)
ENDFUNCTION

在这里,我可以计算出最终的四边形/多边形,该四边形/多边形沿着该线绘制精灵。

这是最终结果: 在此处输入图片说明

并打开多边形的线框: 在此处输入图片说明


1
太好了,我会看的。顺便说一句,您提供的链接已断开。
艾比(Aybe)2012年

3
对于我来说,链接似乎没有断开……
doppelgreener 2012年

我现在刚刚检查了“随机纹理滚动山”链接,它给我带来404错误。
艾比(Aybe)2012年

1
奇怪的。它仍然对我有用。但这是基础链接:glbasic.com/forum/index.php?topic=8118
Doug.McFarlane 2012年

对我来说很破碎,我尝试了主页,它显示“有效!” 就是这样...很奇怪。
艾比(Aybe)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.