Forums Développement Multimédia

Aller au contenu

Changement taille personnage (Tuto "jeu de plateformes")

as3 jeu plateformes personnage tuiles tiles grille tuto

4 réponses à ce sujet

#1 Kryptonien

    Ceinture Jaune

  • Members
  • PipPip
  • 16 messages

Posté 06 November 2016 - 21:47 PM

Bonjour à tous,

Je suis actuellement en train de suivre le tutoriel pour créer un jeu de plateformes, et je suis bloqué à la partie sur les grilles/tuiles.
Dans le code du déplacement, imaginons que mes tuiles ne soient que de 25*25, et que mon personnage soit de 12*16... Que dois-je modifier pour ré-adapter ce code en fonction de la nouvelle taille du personnage ?

J'ai déjà modifié la var T en 25, et l'apparence de la tuile que j'ai redimensionné en 25*25.
J'ai également changé la map en 30 tuiles de largeur et 17 de hauteur.

Image IPB


Pour ce code, ce que j'ai pu comprendre, c'est qu'il y a des "+16" qui correspondent au sprite du personnage de M.Spi par rapport à la colonne, et des "-16" qui correspondent à son sprite en hauteur (qui fait donc 1+1/2 tile).

Mais si mon personnage est un bloc de 16*12, n'y aurait-il pas un moyen de simplifier ce code ?

function deplacement(dx:int):void{

perso.x += vitesse*dx;  // déplace le perso sur X

var Y:Number = perso.y // raccourci de programmation pour perso.x
var X:Number = perso.x // raccourci de programmation pour perso.x
var L:int; // ligne (grille) du point bas du perso
var C:int = (X+16*dx)/T; // côté (grille) du perso concerné par la colission

// latéral
for (L=(Y-16)/T; L<Y/T+1; L++) { // vérifies toutes lignes (grille) sur lesquelles se tient le perso
if (map[L][C]==1) { // si le bord renconte un bloc solide en latéral (prévoir multiples tuiles)
X = perso.x = C*T+16-T*dx; // colle le perso au bord du bloc
}
}

Y = perso.y += gravite;  // déplace le perso sur Y

// tombe
for (C=(X-16)/T; C<(X+16)/T; C++) { // vérifies toutes colonnes (grille) sur lesquelles se tient le perso
if (map[L][C]==1 && perso.y>=(L-1)*T) { // blocs solides
perso.y = (L-1)*T // position du perso sur Y
gravite = -int(haut)*11 // annule et autorise le saut
return
}
}

// touche plafond
if (gravite<0) { // si le perso saute
L = (Y-16)/T; // case occupée par le haut du perso
for (C=(X-16)/T; C<(X+16)/T; C++) { // cases occupées par les limites X du perso
if (map[L][C]>0) { // si la case n'est pas vide
perso.y = (L+2)*T-16 // position du perso sur Y
gravite=1; // arrête le saut
}
}
}

// gravite
if (gravite++>T) gravite=T // limite la gravité max à la taille d'une tuile
}
 

-> Lien du chapitre correspondant dans le tutoriel <-

J'ai bien essayé de remplacer des 16 et des -16 par des 6 et des 8 (moitié de 12 et de 16), mais il y a à chaque fois un coté qui fait n'importe quoi...

Merci ! :smile:

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7012 messages

Posté 08 November 2016 - 13:42 PM

Bonjour,

Ce tuto est très vieux et pas forcément la meilleure méthode pour créer un jeu.
Il a cependant le mérite de poser les concepts de base, il n'est donc pas inutile de le lire.

Déjà dans ce que je lis je vois un problème :

Citation

25*25, et que mon personnage soit de 12*16

Si tu veux que ça fonctionne il faut utiliser des multiples qui autorisent des divisions entières, par exemple 8, 16, 32, 64....
25/2 = 12.5, ça ne va donc pas fonctionner.

Ensuite, je te recommande de lire le tuto pour comprendre les bases, puis de te diriger vers des méthodes plus "propres" pour créer ton jeu.

A lire pour comprendre les bases de la programmation de jeux :
http://forums.mediab.../fiche_rendus2d
http://forums.mediab.../gestion_touche
http://forums.mediab...iche_collisions

A faire (dans l'ordre) pour commencer et mettre en pratique ce que tu as appris :
http://forums.mediab...rcice_-_le_pong
http://forums.mediab...ice_-_le_taquin
http://forums.mediab...ercice_-_pacman

Et enfin pour terminer et valider tout ça :
http://forums.mediab...uelike_partie_1
http://forums.mediab...uelike_partie_2

Quand tu auras réussi à tout faire/comprendre, tu peux reprendre le tuto sur la conception de jeux de plateformes que tu es en train de faire, puis adapter les différentes techniques exposées (gestion des pentes, objets interractifs, etc...) aux méthodes plus propres que tu auras apprises dans les tutos ci-dessus.

Bon courage.

#3 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7012 messages

Posté 08 November 2016 - 18:46 PM

Petit complément pour t'aider.

Quand tu vois +16 ou -16 cela concerne le personnage.
La position du personnage (X) est déterminée par le centre de la tuile qui représente le personnage.
Cette tuile fait 32 pixels de large (comme toutes les autres tuiles du jeu).
Pour récupérer les "bords" du personnage il faut donc calculer sa position (X) à laquelle on retire la moitié d'une tuile (-16) pour trouver le bord gauche et on ajoute la moitié d'une tuile (+16) pour trouver le bord droit, et ainsi pouvoir gérer les collisions.

Pour la hauteur c'est le même principe, mais le personnage fait deux tuiles de haut, or je souhaite que mon personnage ne fasse qu'une tuile et demi de haut, je triche donc en retirant la moitié d'une tuile (-16) à la hauteur et ainsi pouvoir calculer la collision avec le plafond.

Si tu veux te simplifier les calculs alors il faut que tu utilise des valeurs simples et facilement divisibles pour trouver un nombre entier.

Comme je le disais plus haut, ce n'est pas la meilleure méthode pour faire un jeu, c'est un peu de la bidouille avec Flash, c'est pourquoi je te recommande plutôt de lire le tuto pour voir quelques techniques de base, puis de t'appliquer à lire les autres tutos proposés dans mon message précédent pour partir dans la bonne direction. Une fois les bonnes techniques maîtrisées il te sera facile d'adapter ce que tu as appris à ce tuto (jeu de plateforme) pour recréer le gameplay.

Bon courage.

#4 Kryptonien

    Ceinture Jaune

  • Members
  • PipPip
  • 16 messages

Posté 09 November 2016 - 03:04 AM

Bonjour Monsieur Spi,

Je prends note de tout cela et je reviendrai poster ici lorsque j'aurai réussi à faire ce que je veux.
Merci beaucoup pour ton aide si détaillée et le temps que tu prends à chercher les ressources qui me sont nécessaires, ce n'est pas la première fois que tu m'aides comme ça, c'est vraiment super gentil !

A bientôt !

#5 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7012 messages

Posté 26 November 2016 - 16:27 PM

Salut,

Bon, finalement je me suis relu le tuto et je me suis dit que je ne pouvais pas laisser les gens aller dans le mur avec ce que j'avais écrit à cette époque. Certes, c'est de la vulgarisation, donc c'est abordable, mais franchement c'est limité et ça rame dès qu'on essaye de faire des choses un peu poussées... En plus la techno est dépassée pour les navigateurs.

Bref, du coup je viens de passer deux jours à remonter un moteur "propre" en javascript, j'attends de l'avoir un peu fignolé avant de vous le livrer tout cru. Pour ceux qui veulent suivre mon tuto original, pas de problème, lisez juste pour comprendre les concepts, pour les débutants, faites un peu de POO avant pour comprendre de quoi on va parler, puis d'ici quelques jours je pense pouvoir vous filer un moteur à peu près clean pour monter vos jeux sur les mêmes concepts mais en JS.

A bientôt donc.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)