[RM03] Chara à plus de 32 pixels de hauteur

Démarré par Memo, 04 Août 2007 à 18:32

0 Membres et 1 Invité sur ce sujet

Bonjour, il est rare que je pose des questions mais là celle-là elle me tourmente vraiment. J'aimerais faire une chara qui a plus de 32 pixels de haut (24x48 ou plutôt 24x64). Jusque là ça a l'air facile mais attention, ce chara doit être le héro! Et donc l'évènement qui constitu sa tête doit se déplacer en même temps que le chara de base en 24x32 et doit s'arrêter lorsqu'il y a un obstacle et que le joueur rentre dedans, ainsi que passer sous les choses qui sont par dessus tout en étant un évènement sur le héro! Il y a les images mais je ne veux pas trop alourdir. J'utilise RPG Maker 2003 de Yume Team. Merci d'avance de bien vouloir essayer de m'aider.

Oh ho, là tu vas dans la grosse gération!  :P
Je te prpose 2 solucions.  ^_^

La 1re
Tu fais une tête en picture qui suit le héro.  ;) Mais attention au lag, ça demande beaucop d'expérience pour ça.

La 2e (Je te la recommande)
Tu fais un evenement qui se déplace en processus // avec les fameuses variables X et Y.

Donc Y tête doit être Toujours à - 1 de Y corp du héro.
Et tu y va comme ça avec la logique du tableau cartésien.  ;)

Si tu veux de l'animation à la tête, rien de plus facile; tu crées un 2e event en processus // avec une boucle qui change les sprite de la tête pour les animations qui vont avec le corp.

T'as tout compris?  :D
Bon alors bonne chance!  :super:

Ça j'avais compris, mais j'ai de la difficulté à le mettre en code... J'ai essayé l'évènement en // process mais là j'ai du mal à gérer les variables afin qu'elles fassent quelque chose... J'ai mit les valeur des variables X et Y du héros [11,4] et donc les variables X et Y de la tête sont [11,3]. Seulement, comment je fais pour que lorsque la variable monte de 1, l'autre aussi et que l'évènement bouge!

Montres nous une screen de ton/tes events. ;)
Sinon, ben tu fais un autre event:
Si touche = 1(haut) dépalcer event: tête héro vers haut.
Ou un truc du genre.  :P
mais montre nous se que t'as fais avant. ;)

05 Août 2007 à 09:30 #4 Dernière édition: 05 Août 2007 à 09:41 par JohnT
Fais-le par évènement et non par image. :)

J'avais écrit un tutoriel une fois à ce sujet, tu peux l'adapter pour ce que tu veux : http://forums.zelda-solarus.com/index.php/topic,17415.0.html

Maintenant si c'est le héros, il te faudra un bon code, c'est vrai. ;)
N'hésite pas à me contacter par MP, je pourrais t'aider peut-être. :)

JohnT, ça c'est un tutorial d'animations, pas un tutorial programmation. ;)
En tout cas, il me semble... Malgré que ça pourrait peut-être l'aider à animer son personnage puisque c'est un peut le même principe. :paf:
Bref, n'hésites pas à poster aussi ici, je crois que tout le monde a envie de t'aider. Et par MP, si un autre veut t'aider, ça sera pas pratique puisque JohnT t'aura donner des trucs déjà, donc on ne saura plus où tu en es. ;) Non?

05 Août 2007 à 20:07 #6 Dernière édition: 05 Août 2007 à 20:31 par Memo
Citation de: Ganondark le 05 Août 2007 à 00:08
Montres nous une screen de ton/tes events. ;)
Sinon, ben tu fais un autre event:
Si touche = 1(haut) dépalcer event: tête héro vers haut.
Ou un truc du genre.  :P
mais montre nous se que t'as fais avant. ;)

Oui, ça ça fonctionne très bien, mais quand tu avance vers un objet qui est solide, tu appui sur la touche haut, et bien la base du perso de bouge pas mais la tête oui!

Sinon là j'essaie quelque chose... Je vais faire un évènement commun qui mettra les variables de la tête en X2=X1,Y2=Y1-1 (X1 = base du corps, X2 = Tête, Y1 = Base du corps, Y2 = Tête) et mettre un autre évènement qui déplace la tête selon ces coordonnées, seulement je ne sais pas si la tête et la base du corps vont se déplacer ensemble...

EDIT : Ouais! Ça fonctionne! Hurray! En fais non... Oui ça fonctionne mais la tête ne fais que se téléporter à l'endroit où la base se met (elle se déplace par carreaux de 16x16 comme si elle se téléportait sur chacun d'eux...). Je sais pourquoi mais ça ne m'avance pas plus. C'est parce que j'ai utilisé la fonction "positionner un évènement"... J'essaie de trouver autre chose...

Oui c'est un bon plan. :)
Mais essaie de faire toutes tes animations graphique en Battle. ;) Comme ça, sa va t'éviter de la gérance à mort.  :blink:

J'ai réussis à obtenir un résultat qui me convient simplement en mettant, comme Ganondark me l'a proposé, une animation de combat en processus parallele. En plusle jeu ne lag pas et j'ai un vieux ordi avec 192 Mo de RAM alors c'est pas mal! Et l'évènement de la tête se déplace aussi avec le héros alors lorsque j'aurai besoin d'une animation de combat, je n'aurai qu'à activer l'évènement et donc la tête restera là (comme on ne peut pas utiliser plus d,une animation de combat à la fois). Merci de votre, c'était vraiment sympa! Si jamais je rencontre encore des problème je post un nouveau petit message!

L'animation de combat, c'est l'horreur.

Ton personnage se retrouvera décapité dès que tu enclencheras une animation de combat. Ensuite ça te dit de voir une petite tête dépasser du menu? De voir une tête apparaître au dessus des arbres par exemples, ou des tunnels souterrains ou des trucs qui cachent le héros en partie? :mellow:

Sans compter que si le ton de l'écran diminue ou augmente, que si tu flashes l'écran, que si tu mets un brouillard ou tout autre effet, la tête de ton perso va ressortir, à la manière de "Jack O Lantern".

Et puis il y a vraiment moyen de programmer ça en évènement très facilement. -_-

Enfin je dis ça moi, mais si ça te convient, tu peux toujours garder ta solution. :P

Memo j,ai pas dis te faire un animation de combat en // pour la tête!  :blink:

QUand je disais Animations graphique, je disais apr example un coup d'épée, ou un saut, une roulade, ouvrir une porte etc...
Sinon tu fais un event que tu positionne et qui suit le héro toujours.
C'est très simple comme dit JohnT. ;)
Mais bon, ton jeu tes choix.  :P
Bonne chance!!  :)

Selon moi la bonne voie est celle des charsets, avec x et y :).

     Il faut qu'un évènement en processus parallèle mémorise les coordonnées x et y du héros. Ces coordonnées sont ensuite copiées dans d'autres variables, avec la seule différence qu'on soustraira 1 pour le Y.

     On pourrait alors penser qu'il suffit de faire un autre évènement en processus parallèle avec "placer évènement: haut de tête par variables x2 et y2 (ou y2 = y1-1)"
     Mais là, l'animation sera saccadée.
Alors il est possible de rajouter un évènement (toujours en processus parallèle...) qui détermine les appuis sur les touches, et fasse quelque chose ressemblant à cela:
     si l'appui sur touche est sur la gauche
          -->déplacer l'évènement haut de tête sur la gauche (ignorer les blocages)

     ...et ainsi pour toutes les directions.
     Cependant, il faut savoir si le haut de tête de ton personnage peut lui aussi être bloqué ou pas. Personellement, je conseillerai de mettre le haut de tête en passe-muraille, mais pas le bas du corps. Ca donne un rendu plus réaliste, autrement, il peut arriver que ton personnage soit bloqué par une table à cause de sa tête :D...   (alors que ses pieds passeraient très bien).

     Bref, dans le cas où le haut du corps est en passe-muraille, alors la solution précédemment citée n'est plus bonne, puisque si le héros est bloqué par un mur mais continue de maintenir la touche fléchée, alors la tête partira vers d'autres horizons alors que le corps restera en place (^^').
     Dans ce cas, plutôt que de détecter si le joueur appuie ou non sur une touche fléchée, il faut détecter si le héros avance ou non. Pour cela il faut mémoriser les variables x-y du héros, attendre 0.2 secondes (temps moyen d'un déplacement d'une case), remémoriser les variables x-y mais dans d'autres variables, et ensuite comparer les premières variables mémorisées avec les secondes. Si elles sont identiques, le héros n'a pas bougé, sinon, il a bougé, et donc il faudra déplacer la tête dans la direction correspondante au héros :).
     Ce système est cependant plus complexe, mais donnera un rendu plus réaliste, je pense. Il doit marcher sur le principe (je ne l'ai pas testé) par contre, j'ai peur qu'une légère saccade apparaisse quand même, à cause du temps d'attente de 0.2 secondes.


     Bref, le système est simple sur le principe mais il certains détails peuvent compliquer le tout. Il faudrait surtout savoir si tu désires que le heut du corps soit bloqué par les évènements ou pas. Et tout cela demandera deux fois plus de charsets :D.

     Quoiqu'il en soit, les charsets sont de loin la meilleure solution, je suis sur ce point d'accord avec JohnT. Les pictures peuvent éventuellement aller mais sont beaucoup moins pratiques. L'animation de combat est à déconseiller. Elle ne tourne jamais vraiment en boucle (il y a un temps durant lequel elle disparaît, puis répparaît si on essaie de la faire tourner en boucle), ne va pas avec les changements de couleur de l'écran, et surtout, passe au-dessus de tout (je ne suis pas sûr qu'elles passent au-dessus des pictures, mais au-dessus du chipset, c'est sûr. La preuve par les coups d'épe dans Mystery of Solarus qui font passer le héros au-dessus des arbres :D (léger défaut que l'on pardonne à ce jeu^^).

06 Août 2007 à 01:36 #12 Dernière édition: 06 Août 2007 à 01:56 par Memo
Bon, alors la solution de l'animation de combat ça va à la poubelle, vous avez raison. Et dire que je croyais que ça marcherai *dumb*. Alors l'idée c'est que la tête doit être en "sur le héro" et comme tu l'as dit Cham, lorsque le héro tiendra quand même la touche lorsqu'il y a un blocage, la tête partira mais pas le corps! Alors je vais essayé de trouver une solution, sachant que le délais de 0.2 secondes posera sûrement de problème de fluidité à l'animation. Seulement, si je mets la tête en "niveau du héro", lorsque la tête aura un obstacle et pas la base, alors la tête s'arrêtera et pas le héro!

ex :
[ ' ] <-- Tête  [...] <-- Obstacle
[""] <-- Base

[ ' ] > [...] |     [ ' ][...]  |  [ ' ][...]
[""] >        |     [""] >    |        [""] >

Et là je ne suis pas plus avancé...

Je crois avoir une solucion! :)
Tu auras besoin des switchs Déplacements corp et déplacements tête..
Là tu devines que quand la tête bouge, elle est ON, et OFF quand elle s'arrête. Donc par example Si switch mouvements tête OFF
alors wtich déplacement corp OFF.

Idem pour le corp. ;)
Tu comprends?  :P
Si oui, bonne chance, sinon, on trouvera une autre solucion.  :mrgreen:

J'ai réussi à trouver quelque chose qui fonctionne, seulement l'animation est très mauvaise... Cause : La base et la tête ne se déplacent pas à la même vitesse! J'ai essayé de bidouiller ce que j'ai pu mais rien à faire! La tête est toujours en retard de deux pixels sur le corps! Donc j'ai essayé de créé un event sur le perso (et oui j'ai réussi) et de les déplacer. Je tiens à mentionner que ces deux évènements ont les même propriétés. Et devinnez quoi? Ils ne bougent pas non plus en harmonie! Je ne comprend pas pourquoi! Je continu de chercher et je vous revient si j'ai du nouveau...

Ganondark : C'est bon merci mais j'ai réussi à trouver comment le corps peut se déplacer sans que la tête parte. Merci de t'être donné ce mal!

Merci de penser que je me suis donné du mal, mais en fait ça m'est venu tout de suite, car c'était une question de logique. ;)
Sinon, t'as pensé que de reculer le sprite de la tête de 2 pixels?  :rolleyes:

Comme si je n'y avais pas pensé <_< . Joke. Oui, j'y ai pensé sauf que ça lague quand même (moins par contre). Je ne sais vraiment plus où donné de la tête -__-" . Bon, je pense qu'il va faloir que je me résigne à soit prendre l'animation de combat, en la désactivant lorsque le perso est arrêté et lorsqu'il passe sous quelque chose qui est sensé être sur lui, ou j'oublie simplement cette idée et j'opte pour un perso traditionnel. Seulement, le sprite que j'ai fait a vraiment trop l'air enfantin lorsqu'il est réduit pour qu'il entre en 24x32...

06 Août 2007 à 03:53 #17 Dernière édition: 06 Août 2007 à 03:55 par Asturias
C'est possible à faire sous rm2k3, comme d'autres l'ont dit. Seulement voila le problème, les lags et les problèmes de gestions  :P.
Tu pourrais également faire ton perssonage complètement en animation de combat ou en picture. Mais encore là, les mêmes problèmes se poseraient...

______________________________________________________________________________________________________

Tu as une raison de rester sur rm2k3? As-tu un projet très avancé sur celui-ci? (À moin que ce soit pour Wild Prophecy  :huh:)

Car si la taille des sprites te gêne, pourquoi ne pas passer à rmXp (qui offre sensiblement la même chose) mais qui permet une résolution d'écran plus grande et des sprites de la grandeur voulu?


J'ai essayé de programmer un truc du genre, et j'avoue que je n'ai pas réussi à diminuer le détail des 2 pixels de retard. :mellow:

A bien y réfléchir, il est probable et le programme ne considère un évènement/héros sur une autre case que lorsque celui-ci a avancé de deux pixels dans sa direction. A moins que ce ne soit simplement le programme qui soit lent...

Toutefois! :)

J'ai une idée qui marcherait bien, très bien même, seulement cela te coûtera beaucoup de travail au niveau du mapping. ;)

L'astuce serait d'utiliser deux pictures... L'une pour la tête, l'autre pour... le décor.

Je m'explique : tu mettrais l'image de la tête de ton héros en temps qu'image n°1.
Et pour tout ce qui est susceptible d'apparaître au-dessus du héros ( tunnel, arbre, ... ), plus exactement, toute la couche haute de tes maps, devra être "dessiné" comme une picture, que tu afficheras à un nombre supérieur à la cellule n°1 pour qu'elle garde la propriété de recouvrement. :)

Par contre dans ce car je te conseillerai d'éviter fortement de faire des cartes où le héros peut s'éloigner du centre de l'écran, sinon la tête elle restera au centre. ;)

Si tu ne saisis pas trop je te fais un exemple. :)

Je comprend mais par contre, j'aurais besoin que le perso se déplace. Donc mettre une picture pour le héro je sais pas trop... Ce qui m'énerve vraiment c'est que les animations de combat soient par-dessus les pictures! Sinon, effectivement ça serait plus simple de passer à RMXP sauf que le logiciel ne fonctionne pas sur mon présent ordi (par contre j'en aurai un autre bientôt). Et pour la question mapping, en fait ça ne serait pas vraiment un problème, je ne dit pas pourquoi mais ça pourrait fonctionner. Je veux bien essayé ton idée, je vais essayé de faire un code pour que la tête en picture se déplace avec le corps.

Ça alors, même JohnT, le grand maître de la programmation n'est pas capable de le faire! :paf:
L'idée des 2 picture est bien, la seule chose c'est que ses maps seront assé difficile à gérerèt à programmer car il devra savoir exactement quoi est où par rapport à la picture.
Les event de téléportation, les endroits où il ne devra pas bouger, bref, c'est trop de travaille.
Je te conseil de passer sous XP lorsque t'auras ton nouvel ordi.  ;)

Citation de: Ganondark le 06 Août 2007 à 18:24
Ça alors, même JohnT, le grand maître de la programmation n'est pas capable de le faire! :paf:
L'idée des 2 picture est bien, la seule chose c'est que ses maps seront assé difficile à gérerèt à programmer car il devra savoir exactement quoi est où par rapport à la picture.
Les event de téléportation, les endroits où il ne devra pas bouger, bref, c'est trop de travaille.
Je te conseil de passer sous XP lorsque t'auras ton nouvel ordi.  ;)

RMXP? Beurk non ça va trop ramer voyons... :D
En plus je te fais remarquer que ma solution est loin d'être complexe niveau programmation... :rolleyes:

Un évènement en processus// sur la carte en question avec :


Afficher une image n°1 : Tête Heros                  (l'image défile avec la carte : décoché)
Afficher une image n°2 : Décor Couche Haute          (l'image défile avec la carte : coché  )
Effacer cet évènement
<>


... et le tour est joué. ;) A bien y réfléchir c'est encore mieux que faire ça en évènement... :)

Le seul truc, c'est d'être sûr que la map soit finie d'être mappée, et afficher l'image n°2 aux bonnes coordonnées en fonction d'où on arrive. :P Mais ça rien à voir avec la programmation, il suffit juste d'essayer jusqu'à ce que ce soit correct. :)

Après si vraiment ma solution te convient pas... ben prends RMXP... :huh:

JohnT, tout events en processus // prend un attendre 0.0 sec. au début, c,est toi même qui me l,a dit!  :D

Mais tu peux aussi faire tes décors en panorama aussi!  :)
Ça va aussi bien et peut-être même mieux qui sait. ;)

Citation de: Ganondark le 06 Août 2007 à 18:41
JohnT, tout events en processus // prend un attendre 0.0 sec. au début, c,est toi même qui me l,a dit!  :D

Et le...

Effacer cet évènement


...tu en fais quoi? C'est une exeption figure-toi. <_< (tu as encore beaucoup à apprendre... :rolleyes:)

Citation de: Ganondark le 06 Août 2007 à 18:41
tu peux aussi faire tes décors en panorama aussi!  :)
Ça va aussi bien et peut-être même mieux qui sait. ;)

On parle de la couche haute là. :)

La couche basse, que ce soit par chipset, par panorama ou que sais-je encore, ça n'a rien d'important. (et arrête d'essayer de me contredire, ça devient exaspérant. :linkXD:)

06 Août 2007 à 20:31 #24 Dernière édition: 06 Août 2007 à 20:43 par Ynanome
     J'ai déjà essayé quelque chose de semblable avec les pictures, ça marche assez bien, mais il faut à chaque fois afficher des pictures "décor" à une position précise, et il me semble qu'il y a une limite dans le placement des pictures (il me semble par exemple qu'on ne peut pas la placer plus de 940 pixels vers la droite). Du coup, il faut faire attention à ce que la map ne soit pas trop grande. De plus, c'est fatigant de toujours chercher la position précise de la picture, néanmoins, ce système peut être pratique dans le sens où il ne fera pas de "retard" entre le haut et le bas du corps.

     Ensuite, il faut faire gaffe à ce que la palette de couleurs utilisée pour la picture soit la même que pour le chipset, sinon parfois les couleurs ne sont pas terribles ;).

     Ensuite, on peut essayer un évènement en processus //:
afficher image: tête_anim1
attendre 0.0s
attendre 0.0s
attendre 0.0s
afficher image: tête_anim2
attendre 0.0s
attendre 0.0s
attendre 0.0s
afficher image: tête_anim1
attendre 0.0s
attendre 0.0s
attendre 0.0s
afficher image: tête_anim3
attendre 0.0s
attendre 0.0s
attendre 0.0s


Pour l'animation de la tête du héros quand il marche (donc cet évènement ne s'activerait que lorsqu'on presse une touche). Bien entendu, il faudrait faire cela pour toutes les directions. Mais à mon avis ça risque fort de lagger (des pictures en //, pouah :o) et donc il vaut mieux garder un haut de corps qui soit fixe, même si l'animation risque de ne plus être aussi belle :mellow:. C'est le défaut de ce système je trouve...

Citation de: Ynanome le 06 Août 2007 à 20:31
     J'ai déjà essayé quelque chose de semblable avec les pictures, ça marche assez bien, mais il faut à chaque fois afficher des pictures "décor" à une position précise, et il me semble qu'il y a une limite dans le placement des pictures (il me semble par exemple qu'on ne peut pas la placer plus de 940 pixels vers la droite). Du coup, il faut faire attention à ce que la map ne soit pas trop grande. De plus, c'est fatigant de toujours chercher la position précise de la picture, néanmoins, ce système peut être pratique dans le sens où il ne fera pas de "retard" entre le haut et le bas du corps.

C'est se que je disais, mais JohnT me disais sur MSN que c'était très simple de faire ça. ^^ À moin qu'on ne parle pas de la même chose.  :mrgreen:


Mais avec si peut de attendre 0.0 sec, tu es certains que l'animation de la tête serait pas trop rapide par rapport à la vitesse de base de RPG maker?

Citation
Mais avec si peut de attendre 0.0 sec, tu es certains que l'animation de la tête serait pas trop rapide par rapport à la vitesse de base de RPG maker?

    Je pense que c'est ça. Sinon, il suffit d'en rajouter :D. Et puis je déconseille quand même ce script, ça risque de lagger ;).

Citationc'est se que je disais, mais JohnT me disais sur MSN que c'était très simple de faire ça
JohnT n'a pas tort, ce n'est pas compliqué, le fait est que c'est juste long et ...  embêtant. En fait, il faut mettre des chiffres qui correspondent à peu près à la position, tester, corriger selon ses estimations, retester, recorriger, jusqu'à ce que la picture se place où on veut..   sans compter qu'il faut faire ça pour toutes les entrées de la map (si la map possède trois entrées, il faut le faire trois fois...).

06 Août 2007 à 23:38 #27 Dernière édition: 06 Août 2007 à 23:43 par Ganondark
Oui en voulant dire compliqué je voulais surtout dire long... très long.   :blink:
Si tu fais un projet qui peut avoir plus de 500 maps ça fait du temps à mettre par map. Mais bon si Memo a trouvé une solucion et qu'il en est satisfait, c'est déjà bien.  :)
Puis le making est un passe-temps.  ^_^

Ça prouve que j'ai rien à faire de mes journée.  :ninja: Arf je déteste cap-à-l'aigle!  :rocket:

Vous êtes vraiment top les gars de vouloir m'aider à ce point! J'ai tout prit en considération et puis j'ai du me rendre à l'évidence : Possible à faire, mais ça lag trop! Alors voilà, je vais me résigner à un sprite en 24x32 comme tout le monde... Mais bon c'est pas la fin du monde! J'ai essayé le truc des pictures mais je n'était jamais capable d'obtenir un résultat satisfaisant (toujours un prob de lag, ou bien de vitesse, de déplacement... À chaque fois que je réglais un problème, un autre survenait). Bon, alors finalement j'ai décidé de garder mon bon ami RM03 parce que RMXP, je sais pas, je ne le sens pas... Et puis j'ai acquérit trop d'expérience avec RM03 pour changer. Alors je continu de construire le moteur sur lequel je travail, n'étant pas celui de Wild's Prophecy, ce projet étant un peu en pause vu mon manque d'inspiration qui part et revient dépendant des jours, mais ne vous inquiétez pas, il n'est pas mort. Même qui avance! Sinon le simili-projet que je fais en ce moment, c'est un peu pour tuer le temps et m'amuser un peu. Vous en saurez peut-être un peu plus un de ces jours sur celui-ci, le moteur étant en plein développement. Le seul indice que je peux vous donner, c'est : Singe. Je vous laisses là-dessus.