CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Actionscript] Bug collision jeu 2D

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 11:50:19

( Si si y´en a qui font de la 3d avec flash)

Hum, hello tout le monde j´ai commencé hier un moteur de jeu de plateforme en flash et je suis victime d´un vilain bug:
Le heros ( Philippe de Kolimine) ne s´affiche pas correctement quand on le balade sur de petites plateformes ( il s´affiche trop haut).
Je poste mon . fla et mon . swf en esperant de l´aide : j´ai beau chercher je comprend pas...

Pour ceux qui ont flash et qui veulent m´aider ( le code est à peu près propre et commenté. 285 lignes commentaires inclus):
http://darkgimpy.free.fr/Phen/v1.fla

Pour ceux qui veulent voir le probleme par eux meme:
http://darkgimpy.free.fr/Phen/v1.swf
Il est possible que votre navigateur affiche ça un peu n´importe comment ( zoomé, bords qui depassent...) vu que j´ai pas encore publié le fichier ni fait de page web pour l´afficher correctment.

Merci d´avance à tous :)

Déplcement : touches directionnelles

tbop2
tbop2
Niveau 10
13 juillet 2005 à 12:01:28

Hum en effet certaines fois il retombe parfaitement dessus et d´autres fois il monte trop haut. Simple rectification car il faut dire quand même que des fois ça fonctionne.

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 12:05:57

Effectivement et je n´arrive pas à determiner dans quelles circonstances il tombe correctement ou pas donc pas moyen de trouver l´erreur. :(

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 12:08:04

Ah oui j´oubliais, inutile d´essayer d´emprunter le petit passage à droite il est trop etroit :)

C´est parce que je vais rajouter une touche pour glisser par terre ( du coup on pourra descendre mais pas remonter par la ^^)

Ptival
Ptival
Niveau 10
13 juillet 2005 à 12:09:47

Nyu je sais pas ouvrir les fichiers FLA xD

Tu veux pas waller la partie du code qui gère les collisions ? :)

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 12:17:56

Normal il faut flash pour les lire.
Le code qui gere les collisions verticales c´est ca ( je sais pas ou waller pour virer les espaces):

function colitestV() {
//une colibox par iteration
for ( numerodelacoliboxVtest=0; numerodelacoliboxVtest<_root.mapnbrcolibox; numerodelacoliboxVtest++) {
//attribue les coordonnées de la colibox grace au pointeur
colitestVXg = _root.mapcolibox[numerodelacoliboxVtest][0];
colitestVXd = _root.mapcolibox[numerodelacoliboxVtest][1];
colitestVYh = _root.mapcolibox[numerodelacoliboxVtest][2];
colitestVYb = _root.mapcolibox[numerodelacoliboxVtest][3];
colitestVepaisseur = colitestVYb-colitestVYh;
//si les X sont dans la colibox
if ( (_root.philmapX>colitestVXg and _root.philmapX<colitestVXd)) {
//si veut rentrer par le bas d´une plateforme epaisse
if ( ((_root.philmapY-33)>=colitestVYb) and ( (_root.philmapYtente-33)<colitestVYb) and ( colitestVepaisseur>_root.epaisseurpermeable)) {
_root.philVy / = 3;
_root.colitestVresultat = 1;
}
//Si veut rentrer par le haut d´une plateforme : touche le sol
if ( _root.philmapY<=colitestVYh and _root.philmapYtente>=colitestVYh) {
_root.colitestVresultat = 1;
_root.philmapY = colitestVYh;
_root.philVy = 0;
//si c´est larrivee dun saut
if ( _root.philaction == 10 or _root.philaction == 11) {
_root.philnouvelleaction = 8;
_root.phil.stepsound();

}
}
}
}
//si 0 collisions
if ( _root.colitestVresultat == 0) {
//si veut sortir de l´ecran par le haut
if ( _root.philmapYtente<0) {
_root.colitestVresultat = 1;
}
//si veut sortir de l´ecran par le bas
if ( _root.philmapYtente>=_root.mapsizeY) {
_root.colitestVresultat = 1;
_root.philVy = 0;
_root.philnouvelleaction = 8;
_root.philmapY = _root.mapsizeY;
}
}
}

Bon quelques initiales:
Xg = Xgauche
Xd = Xdroite
Yh = Yhaut
Yb = Ybas

Le reste me parait a peu pres clair, si vous avez une question ben je vous ecoute :)

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 13:00:15

Remarque je pense pas que l´erreur soit située ici...(par contre j´e sais pas ou elle peut etre).
J´i ou blié de preciser:
philmapY c´est la coordonnée du pied des personnages.
Et donc philmapY-33 c´est sa tete :)

fracart
fracart
Niveau 5
13 juillet 2005 à 13:01:22

a mon avis, le probleme vient plutot du scrolling vertical que de la gestion des collisions...

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 13:09:16

C´est ce que j´aurai dit aussi mais je l´ai relu ce matin sans trouver d´erreur :Je viens parcontre de trouver la preuve que ce n´est pas dans les colisions que y´a l´erreur :
j´ai ajouté un trace de la position Y du heros quand il detecte une colision et, meme quand l´affichage est mauvais la coordonnée est bonne.
Je vous poste le code du scrolling ( vertical + horizontal et avant plan + arriere plan tant qu´a faire):

/ /SCROLLING
function scrolling() {
// Standard
_root.mapX = _root.mapsizeX/2-_root.philmapX+200;
_root.mapY = _root.mapsizeY/2-_root.philmapY+150;
//_root.philX = _root.mapsizeX/2;
//_root.philY = _root.mapsizeY/2;
// si perso Bord gauche
if ( _root.philmapX<200) {
_root.philX = _root.philmapX;
_root.mapX = _root.mapsizeX/2;
} else {
// si perso Bord droit
if ( _root.philmapX>_root.mapsizeX-200) {
_root.philX = _root.philmapX+400-_root.mapsizeX;
_root.mapX = _root.mapsizeX/2-_root.mapsizeX+400;
}
}
// si perso Bord haut
if ( _root.philmapY<150) {
_root.philY = _root.philmapY;
_root.mapY = _root.mapsizeY/2;
} else {
// si perso Bord bas
if ( _root.philmapY>_root.mapsizeY-150) {
_root.philY = _root.philmapY+300-_root.mapsizeY;
_root.mapY = _root.mapsizeY/2-_root.mapsizeY+300;
}
}
// affiche l´arriere plan
if ( premieraffichage ! = 1) {
_root.mapbottomfichier = _root.mapnom+"-bottom";
_root.attachMovie(_root.mapbottomfichier, ´mapbottom´, 20);
_root.mapbottom._x = mapX;
_root.mapbottom._y = mapY;
_root.mapbottom._visible = true;
premieraffichage = 1;
} else {
_root.mapbottom._x -= ( _root.maptop._x-_root.mapX)/6;
_root.mapbottom._y += ( _root.mapY-_root.maptop._y)/6;
}
// affiche la map
_root.maptopfichier = _root.mapnom+"-top";
_root.attachMovie(_root.maptopfichier, ´maptop´, 25);
_root.maptop._x = _root.mapX;
_root.maptop._y = _root.mapY;
_root.maptop._visible = true;
}

En esperant que c´est comprehensible, je vais dejeuner :rire2:

fracart
fracart
Niveau 5
13 juillet 2005 à 13:16:37

c´est probablement ici :
/ / si perso Bord haut
if ( _root.philmapY<150) {
_root.philY = _root.philmapY;
_root.mapY = _root.mapsizeY/2;
} else {
/ / si perso Bord bas
if ( _root.philmapY>_root.mapsizeY-150) {
_root.philY = _root.philmapY+300-_root.mapsizeY;
_root.mapY = _root.mapsizeY/2-_root.mapsizeY+300;
}
}

tu peux nous expliquer en détail ? :-)
[g l´impression que dans les commentaires, t´as inversé haut et bas]
bah oué, je connais pas l´actionscript meme si c´est compréhensible, je sais pas a quoi correspondent la classe " _root" et les différentes variables

Ptival
Ptival
Niveau 10
13 juillet 2005 à 13:19:01

Bon j´ai du mal avec ton code alors parlons algorithmique :)

Quand le mec arrive en tombant par le dessus d´une plate-forme, qu´est-ce que tu fais ?

1) Testes-tu la collision avant ou après avoir bougé le personnage ?
2) Que fais-tu quand collision il y aura/a ( selon la question 1) ?

fracart
fracart
Niveau 5
13 juillet 2005 à 13:20:38

et l´origine des axes elle se trouve en haut a gauche?

[vais déjeuner :D ]

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 13:26:38

1) Testes-tu la collision avant ou après avoir bougé le personnage ?
Avant :)
2) Que fais-tu quand collision il y aura/a ( selon la question 1) ?
( aura) :
-on ne fait pas le déplacement demandé
-selon la nature de la colision on fait des details en plus ( bruit du mec qui retombe par terre, diminution de la vitesse quand il se prend un plafond...)

" et l´origine des axes elle se trouve en haut a gauche? "
Oui

tu peux nous expliquer en détail ?
C´est une formule de Ptival :-p
[g l´impression que dans les commentaires, t´as inversé haut et bas]
C´est possible
bah oué, je connais pas l´actionscript meme si c´est compréhensible, je sais pas a quoi correspondent la classe " _root" et les différentes variables
_root faites comme si c´etait pas là ( c´est pour pas paumer mes variables)
Les noms des variables me paraissent explicites > _<, lesquelles tu comprends pas?

Ptival
Ptival
Niveau 10
13 juillet 2005 à 13:32:29

Tu affiches bien la carte SELON la position du personnage APRES avoir déplacé complètement le personnage ?

Sinon, tu es sûr que tes rectangles de collisions sont bien définis ?

Hihi, j´ai du mal à trouver l´erreur quand c´est pas moi qui ait codé l´truc :)

fracart
fracart
Niveau 5
13 juillet 2005 à 13:54:52

la différence entre phil et philmap ? :)

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 15:05:26

phil c´est la coordonée du sprite par rapport au coin haut gauche de l´ecran et philmap c´est par rapport au coin haut gauche de la map.

fracart
fracart
Niveau 5
13 juillet 2005 à 15:15:05

rohlala... j´arrive vraiment pas a saisir la maniere selon laquelle tu procède :-(
( ca doit etre moi)

j´espere que tu trouveras la réponse quand meme ; )

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 15:19:35

Ben c´est Ptival qui m´avait donné la formule :snif:

fil_razorback
fil_razorback
Niveau 10
13 juillet 2005 à 16:12:03

Youhou c´est reglé !
La formule etait bonne, j´ai trouvé la solution cette nuit mais je l´ai mal écrite ce matin et elle est restée en commentaire :

/ /_root.philX = _root.mapsizeX/2;
/ /_root.philY = _root.mapsizeY/2;
d :)
_root.philX = 200;
_root.philY = 150;

Fallait remettre le heros au milieu de l´ecran quand on est pas dans un des bords :)

Prochain ajout, des items à collecter ^^

Extra-terrestre
Extra-terrestre
Niveau 10
13 juillet 2005 à 16:12:47

lol

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment