我认为我需要一些激励才能做到这一点,我在一般的平台游戏机制方面并不是很有经验......
无论如何,到目前为止,我的球员形象还有这个:
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
添加它的简单方法是什么?还可以加入其他碰撞检测吗?
我根本不知道从哪里开始。
答案 0 :(得分:2)
首先请注意,积分适用于元组:
(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
是初始速度。