


)
de sonic, surtout à l'époque où c'est sorti)
)
), quoi qu'en ait dit Pphd
. Il n'y a pas de limite pour la sortie de l'écran car la méthode compression permet d'accéder à tout le niveau compressé très rapidement, le seul problème est qu'il n'y aura peut-être pas d'objet géré si loin.

if (toki->jumping > 0)
{
if (toki->startJump.y-toki->sprite.location.y <= (toki->jumpHeight/2))
toki->sprite.location.y-=toki->speed;
else
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
{
toki->sprite.location.y+=2*toki->speed;
}
PERSO *p;
const float G = 0.5f; //Gravité
p->vy = 0; //vy => vitesse y, y => position y
while (1)
{
//1) Gestion du saut
if (keys->pressed.button1) //Début de saut
p->vy = -10; //Il va monter (vitesse de -10)
//2) Collisions
if (MoteurCollisions(p) & TC_BAS) //On touche en bas?
p->vy = 0; //Retour à une vitesse nulle sur le sol
//3) Physique
p->vy += G; //Ajoute la gravité
p->y += p->vy; //Ajoute la vitesse à la position
[...]
}
//Premier coup, au sol
if (keys->pressed.button1 && p->auSol)
p->vy = -10, debutSaut = 1;
//Si on laisse appuyé
if (keys->held.button1 && debutSaut == 1) {
//Le saut continue en de bonnes conditions
}
else if (debutSaut >= 0) {
//Atténuation => gravité suppl, et plus possible d'appuyer par la suite
p->vy += G;
debutSaut = 0;
}
//Dès qu'on a dépassé le sommet du saut, la touche n'a plus d'effet sur la descente
if (p->vy >= 0)
debutSaut = -1;
if (toki->jumping > 0)
{
if (toki->startJump.y-toki->sprite.location.y <= (toki->jumpHeight/2))
toki->sprite.location.y-=(toki->jumpHeight == LOW_JUMP ? 1 : 2)*toki->speed;
else
toki->sprite.location.y+=(toki->jumpHeight == LOW_JUMP ? 1 : 2)*toki->speed;
switch (toki->sprite.direction)
{
case 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;
break;
case DIRECTION_LEFT:
toki->sprite.location.x-=2*toki->speed;
if (toki->startJump.x-toki->sprite.location.x > TILE_WIDTH)
toki->sprite.location.x+=2*toki->speed;
break;
default:
break;
}
toki->jumping-=toki->speed;
}
else
{
toki->sprite.location.y+=2*toki->speed;
}
Et j'en sais quelque chose.
PpHd :
J'ai juste dit qu'il était totalement irréaliste ce moteurEt j'en sais quelque chose.

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;
Et je pense qu'il peut se réduire à quelques lignes.PpHd :
./48:Non, tu as raison pour les éléments statiques de la carte. Ca se gère facilement. Par contre, il faut aussi gérer les éléments dynamiques, et ca se complique pas mal.
)





PpHd
: Pourquoi Bob ?