1

Salut tout le monde,
Voilà, en ce moment, je suis en train d'implémenter les sauts dans mon ch'ti jeu.
J'ai 3 types de sauts:
- les sauts à petite hauteur quand le poussin marche: TILE_HEIGHT/2 pixels
- les sauts de falaise: TILE_HEIGHT/2 pixels suivit d'une chutte
- les sauts à grande hauteur quand le poussin est à l'arrêt (standby), possibilité de bouger dans la direction dans laquelle il se trouve (gauche ou droite) et d'une hauteur de TILE_HEIGHT+TILE_HEIGHT/4.

les sauts passent par 4 états:
- gap (s'accroupit pour préparer le saut)
- jump (le saut lui-même)
- fall (la chutte)
- land (l'attérissage)

Pour l'encodage des sauts, le passage dans les différents états se fait bien et ça semble correcte, mais pas très réaliste par rapport à la version originale sur gameboy color. Un algo de physique (que je ne connais pas) doit sûrement être utilisé. Pour le moment, le poussin lorsqu'il saute, il monte de 1 pixel à la fois (un peut lent), et tombe de 2 pixels. Je peux biensûr compter le nombre de pixels que le poussin saute dans les différents sauts, et ainsi faire la table et là ça sera vraiment identique à la gameboy, mais je ne pense pas que ça soit une solution réutilisable.

Quelqu'un a-t-il une suggestion ou un algorithme à me proposer?

D'avance merci.

Fred.

There is no spoon.

2

x = 1/2 t²

3

vitesse_verticale[t+1] = vitesse_verticale[t] - 1

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

Vi c'est plus simple exprimé comme ça quand on cherche à l'implémenter.

5

C'est clair que c'est mieux de le faire en incrémental (frame par frame, en rapport avec la position précédente) plutôt que d'utiliser une formule temporelle qui nécessite une position initiale, vitesse initiale, etc happy
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

6

surtout que de toute façon dès qu'il y a une interaction avec d'autres objets il n'y a que l'incrémental qui marche... (sauf si on s'amuse à recalculer la position/vitesse finale pour s'en servir en tant que position/vitesse initiale de la prochaine formule, mais ça revient à faire de l'incrémental happy)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

j'oubliais, le poussin ne saute pas plus qu'une largeur de tile...
.4/ tu penses que vaut mieux carrément que je regarde frame par frame sur la gb et que je fasse la table à la mimine?
There is no spoon.

8

euh, surtout pas, au contraire : il voulait dire utiliser une formule qui permet de passer du couple (position,vitesse) d'un frame au couple (position,vitesse) du frame suivant, plutôt que d'utiliser une équation qui donne la position en fonction du temps écoulé...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

9

ah, et ça donne quel genre de code en C sachant que ça tourne dans une boucle?
There is no spoon.

10

vitesse_y -= 10, position_y += vitesse_y>>6;

(ma bonté me perdra tsss)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

le 10 et le 6 tu le sors d'où???
There is no spoon.

12

lolpaf

13

./12 je sais, tu peux le dire :P
There is no spoon.

14

10 et 6 sont pris au hasard, c'est juste que ça va te donner une gravité de 10/2^6 (en pixels/frame^2)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

Une autre façon de le dire est que la vitesse est en virgule fixe (avec 6 bits après la virgule ici).
Soit dit en passant, t'aurais pu mettre la position en virgule fixe aussi #chieur#

16

oui d'ailleurs perso ça me semble plus logique de passer tout en virgule fixe (que toutes les frames aient une conséquence sur la position plutot que certaines oui certaines non, selon les calculs à effectuer par la suite, ça peut être mieux)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

17

ok, c'est bon pour les sauts.
j'ai compris ce qui n'allait pas dans l'algo:
lorsque j'arrive à la moitié du mouvement, je ne redescendais pas comme il fallait: le perso tombait comme une pierre. Maintenant le movement est bon smile
En fait le movement sur gb se fait comme suit:
- le poussin saute 8 pixels en largeur (1 tile)
- Les petits sauts font 4 pixels de haut (1/2 tile)
- les grands sauts font 8 pixels de haut (1 tile)

lors des petits sauts, le poussin monte de 1 pixel à la fois, et lors des grands sauts le poussin monte de 2 pixels à la fois.

Arrivé à la moitié du mouvement (quand le poussin a parcouru 4 pixels en largeur), il retombe.
Ce qui done l'algo suivant pour les petits sauts:

if (toki->jumping > 0)
{
	if (toki->jumping < (toki->jumpCount/2))
	{
		// after half of the way, toki falls
		toki->sprite.location.y+=toki->speed;
	}
	else
	{
		// before half of the way, toki jumps
		toki->sprite.location.y-=toki->speed;
	}
			
	if (toki->sprite.direction == DIRECTION_RIGHT)
	{
		toki->sprite.location.x+=2*toki->speed;

		if (toki->sprite.location.x-toki->startJump.x > TILE_WIDTH)
			toki->sprite.location.x-=2*toki->speed;
	}
	else
	{
		toki->sprite.location.x-=2*toki->speed;

		if (toki->startJump.x-toki->sprite.location.x > TILE_WIDTH)
			toki->sprite.location.x+=2*toki->speed;
	}

	toki->jumping-=toki->speed;
}
else
	// if toki not jumping, he falls
	toki->sprite.location.y+=2*toki->speed;



biensur, il reste encore les collisions à droite et à gauche, (en bas, c'est fait) et ajouter un test si c'est un petit ou un grand saut.

smile

fred.

There is no spoon.

18

avec ce type de code, tu vas avoir un saut en "triangle", tandis que si tu utilises une formule du type de celle proposée par Pollux (post #9), ton saut sera plus rond et donc plus réaliste (comme dans quasiment tous les jeux de plate-forme); à toi de voir ce qui correspond le plus à ce que tu recherches happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

19

après avoir observé le comportement du jeu original sur gb frame par frame, il semble que ça soit plutôt ce type d'algo. mais j'ai peut-être mal interprété les images...
There is no spoon.

20

ah ok, je sais pas quel jeu t'essaies de reproduire, je me base sur les classiques genre mario, sonic et cie ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

21

Je suis pas sûr que les sauts de Mario (du moins les premiers) respectent les lois de la physique en fait hum
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22

Dans les Mario Land en tout cas, de mémoire, c'est triangulaire.
Par contre je crois que les version NES sont paraboliques (de mémoire toujours).
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

23

je viens d'aller vérifier, les sauts dans mario land, même le 1er, sont paraboliques happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

24

Brunni :
Je suis pas sûr que les sauts de Mario (du moins les premiers) respectent les lois de la physique en fait hum

En tout cas, même dans le tout premier épisode, Mario a une sacrée inertie. C'est un peu la marque de fabrique de la série, aussi.
"Scrutant profondément ces ténèbres, je me tins longtemps plein d'étonnement, de crainte, de doute..."
Edgar Allan Poe

25

hum
Mouais, my bad hehe
'fin bon un saut parabolique c'est pas dur à gérer, y'a même pas besoin de faire de cas particulier pour faire redescendre le bonhomme happy
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

26

De toute façon les sauts ultimes c'est ceux de bombjack grin
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

27

Ximoon :
hum
Mouais, my bad hehe
'fin bon un saut parabolique c'est pas dur à gérer, y'a même pas besoin de faire de cas particulier pour faire redescendre le bonhomme happy

A noter qu'ils ne sont pas vraiment paraboliques parceque la hauteur dépend du temps d'appuie de la touche pour sauter</chieur>
En plus la vitesse de chute a une valeur maximum </chieur bis>

28

La partie descendente est elle au moins parabolique et la valeur max est là pour simuler les frottements de l'air langue (et arrête de faire ton Sally/Spectras/Moumou/Hippo/assimilé tongue)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

29

Ximoon :
et la valeur max est là pour simuler les frottements de l'air langue

mais dans ce cas-là il faudrait aussi que ça réduise la vitesse horizontale tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

30

Vu que dans la majorité des cas la vitesse y maximale est considérablement supérieure à la vitesse x (sauf si ton personnage s'appelle sonic), tu risques de toucher le bas du niveau ou bien de rencontrer un obstacle (donc fin du saut ou bien vitesse x devient 0) avant d'avoir modifié sensiblement ta vitesse x tongue
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes