Jetpack Hero V : Ajouter des plateformes
Notre personnage doit pouvoir évoluer sur plusieurs plateformes. Sinon quelle serait l’utilité d’avoir un jetpack ?
On regroupe toutes nos plateformes dans un tableau de sprites :
def defaults(args)
args.state.platforms ||= [
{ x: 0, y: 550, w: 200, h: 12, path: 'sprites/tile.png' },
{ x: 400, y: 550, w: 700, h: 12, path: 'sprites/tile.png' },
]
end
Et on l’affiche de la manière qu’on connait déjà. sprites
accepte aussi bien
un hash qu’un array :
def render(args)
args.outputs.sprites << args.state.platforms
end
Et on calculera les collisions pour chaque plateforme :
def calc(args)
args.state.platforms.each do |p|
if args.state.hero.intersect_rect?(p)
if (x_before + args.state.hero.w) < p.x
args.state.hero.x = x_before
elsif x_before >= (p.x + p.w)
args.state.hero.x = x_before
elsif ascending
args.state.hero.y = p.y - args.state.hero.h - 2
else
args.state.hero.path = 'sprites/hero-standing.png'
args.state.hero.y = p.y + p.h
end
end
end
end
Mais si on doit gérer beaucoup de plateformes ça peut-être mauvais pour les
performances. On utilisera plutôt find
pour s’arrêter dès qu’on a repéré
une collision, puisqu’en toute logique le perso ne peut entrer en collision qu’avec
une seule plateforme à la fois. Mais il y a une manière plus DragonRuby de faire.
La méthode find_intersect_rect
est optimisée pour ce travail :
def calc(args)
if p = Geometry.find_intersect_rect(args.state.hero, args.state.platforms)
if (x_before + args.state.hero.w) < p.x
args.state.hero.x = x_before
elsif x_before >= (p.x + p.w)
args.state.hero.x = x_before
elsif ascending
args.state.hero.y = p.y - args.state.hero.h - 2
else
args.state.hero.path = 'sprites/hero-standing.png'
args.state.hero.y = p.y + p.h
end
end
end
Je sais bien que l’idiome suivant :
if variable
# Faire un truc
end
fera mal aux yeux de beaucoup, mais il faut accepter qu’on est en train de faire du DragonRuby, et pas du Rails ;)
Références
- Vous trouverez le code de Jetpack Hero sur github
- Documentation de DragonRuby
Cet article fait partie d’une série :
- Jetpack Hero
- Partie II
- Une platforme, des collisions
- Première animation du personnage
- Ajouter des platformes
- Du carburant pour le jetpack
- Collecte de minerai
- Effets sonores
- Du rangement avec la classe Game
- Apparition des aliens
- Tir du personnage
- On dégomme de l’alien
- GAME OVER
- Les aliens bougent enfin
Commentaires
Pas encore trouvé de solution simple et non-invasive pour avoir des commentaires sur le blog. En attendant vous pouvez laisser votre Commentaire sur mastodon@lkdjiin