2013-04-10 1 views
2

Je pense que je besoin d'incitation sur la façon de faire, je ne suis pas vraiment connu en général la mécanique de jeu de plateforme ...mécanique de saut d'obstacles dans Netwire

Quoi qu'il en soit, mon chiffre joueur a ce jusqu'à maintenant:

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 

Avec gravity, l'objet joueur tombe lentement jusqu'à ce qu'il y ait quelque chose sur quoi se tenir. Bien sûr, l'étape suivante consiste à ajouter un saut, dans une courbe sin ... quel est un moyen simple de l'ajouter en utilisant netwire? Un qui peut également avoir une détection de collision supplémentaire ajouté?

Je n'ai aucune idée par où commencer avec celui-ci.

Répondre

2

tout d'abord noter que le travail pour tuples intégrales:

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

Considérons maintenant que la gravité est une valeur d'accélération. Vous pouvez facilement ajouter à d'autres valeurs d'accélération:

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 est la position initiale et v0 la vitesse initiale.

+0

Impossible de vraiment faire fonctionner 'pos '... qu'est-ce que c'est dans la notation par flèches? – Lanbo

+0

@LambdaDusk: Désolé, mon échec. J'ai oublié la position/vitesse initiale. Réponse éditée – ertes

+0

Cela fonctionne si je garde la touche espace enfoncée. Si je tape juste, rien ne se passe, et le garder enfoncé fait voler le sprite. – Lanbo