PDA

Voir la version complète : [PSP][Aide] collision


tictacbluw
02/11/2007, 13h48
bonjour je suis un ptit nouveau et j'ai un ptit probleme alors voila j'essai (depuis 3 jour ) de coder ma collision entre le perso_1 (le hero) et un PNJ fixe (chara1) mais je n'arrive pas il me manque quelque chose et en plus le lien avec la chouette explication en flash de Yodajr est mort :cry: donc merci de m'aider voila le ptit bout de code (j'utilise OSLib)

//collision perso
if ((perso_1->x + 25 > chara1->x)&&(perso_1->y < chara1->y))
{ perso_1->y = perso_1->y +2; }

if ((perso_1->y > chara1->y +49)&&(perso_1->x > chara1->x + 19))
{ perso_1->x = perso_1->x -2;}

if ((perso_1->y +48 > chara1->y)&&(perso_1->x + 25 < chara1->x +19))
{ perso_1->x = perso_1->x -2 ;}

if ((perso_1->y+48 > chara1->y +49)&&(perso_1->x > chara1->x +19))
{perso_1->y =perso_1->y -2;}

omg
02/11/2007, 14h28
bonjour je suis un ptit nouveau et j'ai un ptit probleme alors voila j'essai (depuis 3 jour ) de coder ma collision entre le perso_1 (le hero) et un PNJ fixe (chara1) mais je n'arrive pas il me manque quelque chose et en plus le lien avec la chouette explication en flash de Yodajr est mort :cry: donc merci de m'aider voila le ptit bout de code (j'utilise OSLib)

//collision perso
if ((perso_1->x + 25 > chara1->x)&&(perso_1->y < chara1->y))
{ perso_1->y = perso_1->y +2; }

if ((perso_1->y > chara1->y +49)&&(perso_1->x > chara1->x + 19))
{ perso_1->x = perso_1->x -2;}

if ((perso_1->y +48 > chara1->y)&&(perso_1->x + 25 < chara1->x +19))
{ perso_1->x = perso_1->x -2 ;}

if ((perso_1->y+48 > chara1->y +49)&&(perso_1->x > chara1->x +19))
{perso_1->y =perso_1->y -2;}


Essaye ça.
C'est pas optimisé mais bon... c'est tout ce que je peux te proposer dans l'immediat...
Essai d'abord de le déplacer que a droite.

A noter que c'est pas du tout optimisé... Nesgba soit indulgent :D

//collision perso aller a droite
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x ++;

}

//collision perso aller a gauche
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x --;
}


//collision perso aller en haut
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->y = perso_1->y --;
}

//collision perso aller en bas
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->y = perso_1->y ++;
}


PNJ fixe Y'a du rôliste dans l'air...? :rolleyes:

tictacbluw
02/11/2007, 15h34
Essaye ça.
C'est pas optimisé mais bon... c'est tout ce que je peux te proposer dans l'immediat...
Essai d'abord de le déplacer que a droite.

A noter que c'est pas du tout optimisé... Nesgba soit indulgent :D

//collision perso aller a droite
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x ++;

}

//collision perso aller a gauche
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x --;
}


//collision perso aller en haut
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x --;
}

//collision perso aller en bas
if (((perso_1->x + 25) < chara1->x) || (perso_1->x > (chara1->x + 19)) || ((perso_1->y + 48) < chara1->y) || (perso_1->y > (chara1->x + 49)))
{
perso_1->x = perso_1->x ++;
}


Y'a du rôliste dans l'air...? :rolleyes:

je vais essayer


EDIT: la decoups aucune collision ne marche je peux passer a traver

omg
02/11/2007, 15h36
Oki!
Par contre ça serai bien que tu postes la taille exacte de tes sprites.
C'est pour une vue de dessus ou de coté?

De plus me suis planté pour les déplacement haut et bas c'est perso_1->y = perso_1->y --; et non perso_1->x = perso_1->x --;

tictacbluw
02/11/2007, 17h11
Oki!
Par contre ça serai bien que tu postes la taille exacte de tes sprites.
C'est pour une vue de dessus ou de coté?

De plus me suis planté pour les déplacement haut et bas c'est perso_1->y = perso_1->y --; et non perso_1->x = perso_1->x --;

sprite perso_1 x=25 y=48
chara1 x=19 y= 49

et non sa ne marche tjr pas je passe au traver :snif2:

omg
02/11/2007, 17h12
Tu peux poster ton morceau de code avec les boutons?

tictacbluw
02/11/2007, 17h14
void Touches()
{
//Lit les touches
oslReadKeys();

if (osl_keys->held.down)
{
//deplace le sprite
perso_1->y += 2;

//affiche la bonne ligne dans le spriteset
perso_1_position = BAS;

//on anime le sprite
AnimMarche();
}
if (osl_keys->held.up)
{
perso_1->y -= 2;
perso_1_position = HAUT;
AnimMarche();
}
if (osl_keys->held.left)
{
perso_1->x -= 2;
perso_1_position = GAUCHE;
AnimMarche();
}
if (osl_keys->held.right)
{
perso_1->x += 2;
perso_1_position = DROITE;
AnimMarche();
}

//si aucune touche n'est appuyée
if (!osl_keys->held.value)
{
//reinitialisation des variables, pour la prochaine fois
anim_marche = 0;
temp_anim_marche = 0;

//affiche perso dans sa derniere position
oslSetImageTileSize(perso_1,0,perso_1_position,32, 48);
}
}


du fichier move.c (compilation separer )

omg
02/11/2007, 17h30
void Touches()
{
//Lit les touches
oslReadKeys();

if (osl_keys->held.down)
{
//deplace le sprite
perso_1->y += 1;

//affiche la bonne ligne dans le spriteset
perso_1_position = BAS;

//on anime le sprite
AnimMarche();
}
if (osl_keys->held.up)
{
perso_1->y -= 1;
perso_1_position = HAUT;
AnimMarche();
}
if (osl_keys->held.left)
{
perso_1->x -= 1;
perso_1_position = GAUCHE;
AnimMarche();
}
if (osl_keys->held.right)
{
if (((perso_1->x + 26) < chara1->x) || (perso_1->x > (chara1->x + 20)))
{
perso_1->x += 1;
}
perso_1_position = DROITE;
AnimMarche();
}

//si aucune touche n'est appuyée
if (!osl_keys->held.value)
{
//reinitialisation des variables, pour la prochaine fois
anim_marche = 0;
temp_anim_marche = 0;

//affiche perso dans sa derniere position
oslSetImageTileSize(perso_1,0,perso_1_position,32, 48);
}
}


Ceci devrait t'empêcher de "dépacer" le deuxieme sprite quand tu vas a droite.
Dis moi si ça marche.

tictacbluw
02/11/2007, 17h39
void Touches()
{
//Lit les touches
oslReadKeys();

if (osl_keys->held.down)
{
//deplace le sprite
perso_1->y += 1;

//affiche la bonne ligne dans le spriteset
perso_1_position = BAS;

//on anime le sprite
AnimMarche();
}
if (osl_keys->held.up)
{
perso_1->y -= 1;
perso_1_position = HAUT;
AnimMarche();
}
if (osl_keys->held.left)
{
perso_1->x -= 1;
perso_1_position = GAUCHE;
AnimMarche();
}
if (osl_keys->held.right)
{
if (((perso_1->x + 26) < chara1->x) || (perso_1->x > (chara1->x + 20)))
{
perso_1->x += 1;
}
perso_1_position = DROITE;
AnimMarche();
}

//si aucune touche n'est appuyée
if (!osl_keys->held.value)
{
//reinitialisation des variables, pour la prochaine fois
anim_marche = 0;
temp_anim_marche = 0;

//affiche perso dans sa derniere position
oslSetImageTileSize(perso_1,0,perso_1_position,32, 48);
}
}


Ceci devrait t'empêcher de "dépacer" le deuxieme sprite quand tu vas a droite.
Dis moi si ça marche.

nan alors la j'ai plein de collision partout j'peut presque pas me deplacer en plus il n'y a pas qu'un seul perso dans mon jeu donc c'est pas la bonne solution je pense :hmm:

omg
02/11/2007, 18h41
Oui mais avant d'essayer de faire des collisions avec 15 persos il faut quand même essayer juste avec 2...
Sinon pour la solution je suis d'accord que c'est pas la meilleure mais je suis pas un pro :p

tictacbluw
02/11/2007, 18h42
le truc c'est que sa marche puisque j'arrive pas a ma deplacer :snif2:

EDIT marche PAS je veut dire :D

tictacbluw
02/11/2007, 21h32
personne peut m'aider ???