【问题标题】:Jumping mechanics in NetwireNetwire 中的跳跃机制
【发布时间】:2013-04-02 13:03:46
【问题描述】:

我认为我需要一些激励来了解如何制作这个,我在一般平台游戏机制方面并没有真正的经验......

反正我的玩家图到现在都有这个:

movePlayer = proc p -> do
    let gravity = 100
    sx <- keySpeed GLFW.LEFT GLFW.RIGHT 500 -< ()
    dy <- integralLim_ collision 0 -< (gravity, p)
    dx <- integralLim_ collision 0 -< (sx, p)
    returnA -< (sx, sy)
    where
        keySpeed k1 k2 s = onKey k1 (-s) <|> onKey k2 s <|> pure 0
        collision = undefined -- collision with the world

使用gravity,玩家对象会慢慢下落,直到有东西可以站立。当然,下一步是添加跳跃,在sin 曲线中......使用netwire 添加它的简单方法是什么?还可以添加进一步的碰撞检测吗?

我只是不知道从哪里开始。

【问题讨论】:

    标签: haskell reactive-programming frp arrows netwire


    【解决方案1】:

    首先请注意,积分适用于元组:

    (x, y) <- integralLim_ f (x0, y0) -< ((dx, dy), w)
    

    现在考虑重力是一个加速度值。您可以轻松地将其添加到其他加速度值:

    gravity = pure (0, -9.8)
    jump    = pure (0, 1000) . holdFor 0.1 (keyPressed space) <|> pure (0, 0)
    
    pos = integralLim_ collision p0 . integral_ v0 . (gravity ^+^ jump)
    

    其中p0 是初始位置,v0 是初始速度。

    【讨论】:

    • 无法真正让pos 工作......正确的箭头符号是什么?
    • @LambdaDusk:对不起,我的失败。我忘记了初始位置/速度。答案已编辑。
    • 如果我按住空格键,这将有效。如果我只是点击它,什么都不会发生,按住它会使精灵飞起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多