Прыгающая механика в 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 начальная скорость.

Другие вопросы по тегам