Yampa粒子场

时间:2012-07-21 14:21:39

标签: haskell particle-system yampa

我想在Yampa有一个粒子场。单个粒子应该只是直线移动,但取决于给定的角度。该角度和移动速度根据玩家的速度和角度而变化。我不知道如何更好地解释,我正在开发类似于this game的东西。

无论如何,我的代码现在看起来像这样:

star :: (Float, Float) -> SF (Float, Float) (Float, Float)
star p0 = proc (vel, a) -> do
    rec
        v <- integral -< vel *^ (cos a, sin a)
        p <- clampS ^<< (p0 ^+^) ^<< integral -< v ^+^ p
    returnA -< p

clampS s@(x, y) | x > 1 = (x-2, y)
                | x < (-1) = (x+2, y)
                | y > 1 = (x, y-2)
                | y < (-1) = (x, y+2)
                | otherwise = s

vel是当前速度,a是当前角度。但是粒子以奇怪的方式移动。 (完整代码here

不幸的是,我确信我的想法是错误的,但我还没有弄清楚如何做到这一点,尤其是如何正确使用integral

也许有人可以给我一些提示。

1 个答案:

答案 0 :(得分:1)

在@martingw的一点点暗示下,我能够做到这一点,这正是我所寻找的:

star :: (Float, Float) -> SF (Float, Float) (Float, Float)
star p0 = proc (a, vel) -> do
    let (vx,vy)  = vel *^ (cos a, sin a)
    p <- clampS ^<< (p0 ^+^) ^<< integral -< (-vx,vy)
    returnA -< p

clampS (x, y) = (x `fMod` 800, y `fMod` 600)