2013-04-10 3 views
2

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

Я просто не знаю, с чего начать с этого.

ответ

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 начальная скорость.

+0

Не может заставить 'pos' работать ... что это в правильной обозначении стрелки? – Lanbo

+0

@LambdaDusk: Извините, моя неудача. Я забыл начальную позицию/скорость. Ответ отредактирован. – ertes

+0

Это работает, если я удерживаю клавишу пробела нажатой. Если я просто коснусь его, ничего не произойдет, и удерживание его будет заставлять спрайт летать. – Lanbo

Смежные вопросы