Bonjour,
J'ai décider de créer un jeu seulement mon domaine de prédilection étant la programmation, j'ai de gros problèmes pour faire les graphismes.
Je cherche donc un peu d'aide :
- Je souhaite que mon jeu soit une sorte de zelda graphiquement ( pas au niveau du gameplay mais ce n'est pas le problème).
- Je voudrais tout d'abord savoir comment faire mes dessins (en particulier les perso.), pixel art, dessins a la main puis scannés...
- J'ai des gros problèmes de tailles : comment faire pour que mes perso soient à la bonne taille par rapport au décors et est-ce que c'est un problème que je dois régler graphiquement ou est-ce que je m'en occuperais avec le code.
- Ensuite, lors de la création d'un jeu, c'est le erso qui bouge ou le décors autour de lui ???
Voila, je vous remercie par avance pour vos réponses ![]()
C'est un peu les deux pour la question des décors par rapport au personnage, tu fais bouger le héros si y a pas de collision, puis tu recentres au niveau du scrolling.
Pour le scrolling cela consiste à une variable de coordonnée qui va soustraire les coordonnées des autres éléments.
(si le personnage va vers la droite(autrement dit que sa abscisse s'incrémente), on ressers l'écran vers la même direction(on augmente l'abscisse de la coordonnée de Scrolling))
Elle est souvent calculé de sorte à ce que le centre du personnage central soit au milieu de l'écran.
Exemple venant du code de mon jeu :
(ici on a une variable Scrolling de type SDL_Rect et un objet ayant une position et un image)
SDL_Rect calcul_scroll;// va accueillir le calcul du scrolling
calcul_scroll.x = Mapping::centre_scrolling->position.x + Mapping::centre_scrolling->TramePrincipale.w/2;// TramePrincipale represente la taille de l'objet
calcul_scroll.y = Mapping::centre_scrolling->position.y + Mapping::centre_scrolling->TramePrincipale.h/2;
calcul_scroll.x -= ecran->w/2;
calcul_scroll.y -= ecran->h/2;
Scrolling = calcul_scroll;
ensuite lors de l'affichage on prend un variable SDL_Rect temporaire que l'on va mettre à égale avec la position, on enlève le scrolling dessus puis on affiche l'image (si elle apparait à l'écran)
Il faut faire en sorte de gérer l'affichage et le comportement de manière distincte (un coup comportement des objets puis affichage).
PS : Juste au cas où, je précise : on affiche l'image à partir de la coordonnée(SDL_Rect) temporaire
ok donc si j'ai bien compris, lors de l'appuie sur une touche c'est le perso. qui bouge et en fonction des coordonnées du perso., tu recentre l'écran. La question, c'est que tu as donc un moment où ton perso. n'est plus centré, ce moment, il se voit à l'écran où cela va trop vite ? Et si il se voit, ce n'est pas génant ?
C'est justement pour ne pas avoir de moment où c'est décentré que l'on fait en sorte de gérer l'événementie avant l'affichage.
En gros tu fais d'abord la phase d'événementie pour tous les objets puis la phase d'affichage pour chacun d'entre eux.
Autrement dit :
Evenementie de tous les éléments d'abord
Ensuite affichage de tous les éléments.
OK, merci beaucoup pour ters explications sur ce point donc en récapitulatif :
- pression sur une touche
- calcul de la nouvele position du perso.
- calcul de la nouvelle position de l'écran (centré sur le perso.)
- affichage du tout !
encore sur ce sujet, il n'y a pas la possibilité que ce soit que le perso qui bouge dans une zone et quand il arruve au bord, la zone change ??? et dans ce cas la, c'est le perso qui bouge non ?
Dans ce cas là il s'agit souvent de deux maps distinctes qui sont reliées par une transition.
Si ces maps ne sont jamais plus grandes que l'écran c'est le perso qui bouge, autrement c'est les deux ^^(notion de bord, jusqu'à arriver à un bord c'est le scrolling qu'est ajusté ensuite c'est la position du personnage)
ok, je pense que je vais partir pour ca etant donné que ce sera une vue du haut. Au fait, ce sera un jeu PC...
Et, pour avoir une mp plus grande que l'ecran, tu fais juste une map classique mais au moment de coder tu dit d'en afficher qu'une partie non ? (je suis vraiment nul sur la partie qui relie les graphismes au code...)
Bref vu que t'as pas compris voici les lignes à ajouter au code donné plus tôt pour arrêter le Scrolling lorsque l'on est à un bord de la map :
(il faut avoir une variable qui contient la largeur et une autre qui contient la hauteur de la map)
if(Scrolling.x + ecran->w/2 > largeur_map)
Scrolling.x = largeur_map - ecran->w/2;
if(Scrolling.x < 0)
Scrolling.x = 0;
if(Scrolling.y + ecran->h/2 > hauteur_map)
Scrolling.y = hauteur_map - ecran->h/2;
if(Scrolling.y < 0)
Scrolling.y = 0;
Ensuite, pour faire la transition c'est un peu plus compliqué.
Il faut blitter la partie de la map sur laquelle on va apparaître sur une image à part, ensuite sur cette même image on ajoute le personnage.
Avant cela, on prend la partie de l'ancienne map où l'on était mais sans le personnage dessus.
Ensuite l'étape suivante dépend d'où la transition se fait, il s'agit d'une boucle d'affichage comme suivi :
direction représente la direction normalisée du perso lors de la transition.
if (direction == DROITE)
{
int x = ecran->w;
while(x >= 0)
{
affichage de l'ancienne image
affichage de la nouvelle image en utilisant le x de la boucle
x-=10;// à changer selon le temps de transition voulu
SDL_Delay(1);// pareil pour celui-ci
}
}
else
if (direction == GAUCHE)
{
int x = -ecran->w;
while(x <= 0)
{
affichage de l'ancienne image
affichage de la nouvelle image en utilisant le x de la boucle
x+=10;// à changer selon le temps de transition voulu
SDL_Delay(1);// pareil pour celui-ci
}
}
else
if (direction == HAUT)
{
int y = -ecran->h;
while(y >= 0)
{
affichage de l'ancienne image
affichage de la nouvelle image en utilisant le y de la boucle
y+=10;// à changer selon le temps de transition voulu
SDL_Delay(1);// pareil pour celui-ci
}
}
else
if (direction == BAS)
{
int y = ecran->h;
while(y >= 0)
{
affichage de l'ancienne image
affichage de la nouvelle image en utilisant le y de la boucle
y-=10;// à changer selon le temps de transition voulu
SDL_Delay(1);// pareil pour celui-ci
}
}
Donc si j'ai bien compris :
- Pour un jeu où la zone change quand on arrive sur un bord, on charge la nouvelle map si les coordonnées du perso sont egales aux coordonnées du bord.
- Pour un jeu "plus fluide" où le perso est toujours au centre et que la map change en fonction, on rajoutes les transition. C'est ca ???
PS : j'aimerais avoir des reponses pour mes autres questions (pas forcement de toi)
Salut!
Alors pour répondre deja a une de tes première question : je pense que le perso et le decor bouge. En effet il me semble mieux d'avoir ton perso qui bouge a l'écran, et quand il arrive près d'un bord, la tu scroll à droite, ou a gauche.
Pour scroller le fond, ca dépend déja de comment tu crée l'arrière plan : ca peut etre une image (ca doit marcher sur le matos de nos jours, meme pour de grande "map"), toutefois le mieux est de faire une mosaique (un peu plus complexe qu'une simple image, mais le principe est le meme), une méthode de compression basique mais qui a fait ses preuves
Donc globalement, tu as une image de fond (soit une image que tu as dessiné entièrement dans un logiciel de dessin, soit une mosaique re-construite). Quand tu connais la position de "l'écran" sur cette image, et bien il suffit de recopier la partie à afficher.
http://www.gamedev.net/reference/list.asp?categoryid=44
ici tu trouvera un grand nombre d'article sur le sujet.
Tu peux nous en dire plus sur ce que tu veux faire? scolling vertical/horizontal (les deux)? API utilisé (SDL)? etc etc comme ca on pourra te donner des liens plus précis ;)
Pour le scrolling, je compte faire un vertical et un horizontale, en fait ma question c'etais soit je fais un truc du genre le perso arrive au cadre, je charge une nouvelle map, ou alors une transition entre les différentes map mais je pense que je vais partir sur la première option cela me semble plus simple.
Pour ce qui est du développement, je vais le faire sur XNA en C# (c'est la premiere fois que je vais faire un projet la dessus, je voudrais tester...)
oki
j'ai deja ce lien :
http://www.awestyproductions.com/tutorials/c-sharp/xna-sidescroller-part-1/
ca a l'air pas mal pour un début.
Pour les transistions, c'est plus simple en effet de faire que lorsque le perso arrive à un bord, tu charge une autre map. Et rien ne t'empeche par la suite de faire du scrolling ;)
ok merci bien donc la dessus c'est réglé (pas de scrolling dans un premier temps et une fois le jeu finit, je verrais pour faire une "version améliorée"), maintenant je ne sais toujours pas pour les deux premieres questions...
Alors pour les dessins, y'aura plus calé que moi, mais je dirais si sais bien dessiné scan puis ensuite retouche avec un logiciel? ou directement pixel art? enfin quoiqu'il arrive, il faudra que ca correspondent à certaine norme (la taille en pixel notament).
Ce qui permet d'enchainer sur la 2eme question
Alors ben oui il faudrait mieux que l'echelle soit respecté directement sur les dessins. En gros ton perso sera comme "copier/coller" sur le decor. Tu peux biensur imaginer faire un scale, mais bon.. ca risque de pas etre super chouette, plus lourd a gérer...
ok, etant (très ?) mauvais en dessin, je pense que je vais passer par un pixel art, a moins qu'il existe d'autre technique de dessin.
En plus, il y avait un problème avec le dessin scanné c'est que si je veux que mon perso. soit en mouvement il faut que je dessine un dessin ou il a le pied droit en avant et un ou il y a le pied gauche d'où comment faire deux fois le même dessin (exactement identique) avec juste un detail de différent ?
Pour l'echelle, effectivement ayant photoshop, je vais faire mes perso d'un coté, mon décor de l'autre, puis superposer les deux pour voir si ca colle niveau echelle pour ensuite tout coder et faire des mini ajustements au codage...
Merci pour vos reponses, si je peux avoir d'autres avis sur ces deux questions ce serait pas mal.
Je relance car pour l'instant mon jeu est au point mort. Sans graphisme ce n'est pas facile. Aidez-moi ![]()