Прыгающая механика в Netwire
Я думаю, мне нужен какой-то стимул, как это сделать, я не очень разбираюсь в игровой механике...
Во всяком случае, моя фигура игрока имеет это до сих пор:
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
? К тому, что может быть дополнительно добавлено обнаружение столкновений?
Я просто понятия не имею, с чего начать.
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
начальная скорость.