46Fermer48
boulifbLe 07/07/2006 à 23:09
salut,

Le cas des sauts est quasiment résolu. Il y a juste les grands sauts qui ne sont pas encore terribles. comme j'ai pu lire sur le post, il est question que la vitesse y augmente plus vite que les x. je comprends miantenant de quoi il s'agit.
Effectivement, dans le cas de tokitori, le x bouge moins vite que le y puisque le x maxi est d'une tile. Ou plutôt, x et y doivent être proportionnels, et c'est là que c'est dur.
N'arrivant pas à joindre l'éditeur pour avoir l'info, pour le cas de ce jeu, je pense qu'on a affaire à des sauts triangulaires car les déplacements sont réguliers, je veux dire par là que si on a affaire à un calcul parabolique, si mes souvenirs son bons, les y augmentent vite puis arrivé vers le points où le x s'annulle (je ne me souviens plus) les y ralentissent. Hors, dans le jeu, arrivé au point supérieur, le y va toujours à la même vitesse, en monté comme en déscente. Mais je dis peut-être des bêtises... Pour le moment, le code (un peut beaucoup merdique) donne ceci:
switch (toki->sprite.direction)
{
case DIRECTION_RIGHT:
	switch (toki->jumpHeight)
	{
	case LOW_JUMP:
		if (toki->sprite.location.x-toki->startJump.x < TILE_WIDTH/2)
			toki->sprite.location.y-=toki->speed;
		else
			toki->sprite.location.y+=toki->speed;
				
		toki->sprite.location.x+=2*toki->speed;
			
		if (toki->sprite.location.x-toki->startJump.x > TILE_WIDTH)
			toki->sprite.location.x-=2*toki->speed;
					
		toki->jumping-=toki->speed;
		break;

	case MEDIUM_JUMP:
		// toki do not move left or right during medium jump
		if (toki->startJump.y-toki->sprite.location.y < (toki->jumpHeight)/2)
			toki->sprite.location.y-=2*toki->speed;
		else
			toki->sprite.location.y+=2*toki->speed;
					
		toki->jumping-=4*toki->speed;
		break;

	case HIGH_JUMP:
		if (toki->startJump.y-toki->sprite.location.y < (toki->jumpHeight)/2)
			toki->sprite.location.y-=2*toki->speed;
		else
			toki->sprite.location.y+=2*toki->speed;
				
		toki->sprite.location.x+=2*toki->speed;
			
		if (toki->sprite.location.x-toki->startJump.x > TILE_WIDTH)
			toki->sprite.location.x-=2*toki->speed;
					
		toki->jumping-=4*toki->speed;
		break;
	}

break;

puis code similaire pour la gauche et les sauts frontaux/arrières.
le code est merdique, j'en conviens, mais il reproduit quasiment à l'identique ce qui se passe sur gb.