IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH 8] Gestion des collisions


Sujet :

Flash

  1. #1
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [FLASH 8] Gestion des collisions
    Bonjour à tous,
    Je vais probablement me faire taper sur les doigts, mais voici mon problème:
    Tout d'abord, sachez que je suis débutante en action Script.

    Je deplace une voiture grâce aux touches directionnelles, jusque là, pas de problème.
    Lorsqu'elle rentre en collision avec un obstacle, flash ne semble tenir compte que du centre du clip voiture (comme dans le tuto sur les collisions),
    ce qui me semble logique, étant donné que je la résume à un point pour déterminer sa position en fonction de sa vitesse.
    J'ai lu dans certains topics qu'il "suffisait" de placer des point stratégiques sur la voiture, abritant chacun un hitTest, pour éviter ce problème.
    Mais, curieusement, dans ce tutoriel, le rond rentre en collision sur toute sa surface, je me demandais donc, cela n'est -il pas faisable avec ma voiture?

    Comment puis je faire pour que ma voiture ne se résume pas à un point?

    Mon code: contenu dans la voiture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    onClipEvent(load)
    {
    	vitesse=0;
    	x=0;
    	y=0;
    }
    onClipEvent (enterFrame) // le code suivant est exécuté en boucle
    {
    	if (Key.isDown(Key.UP)) vitesse += 1; //acceleration en avant
    	if (Key.isDown(Key.DOWN)) vitesse -= 0.5; //acceleration en arrière
    	if (Key.isDown(Key.LEFT)) _rotation -= 8; //_rotation affecte directement la voiture
    	if (Key.isDown(Key.RIGHT)) _rotation += 8;
    	
    	if (Math.abs(vitesse)>1) vitesse *= 0.9; // limite l'acceleration
    	
    	x = Math.cos(_rotation*(Math.PI/180))*vitesse; // donne la position x future en fonction de la vitesse
    	y = Math.sin(_rotation*(Math.PI/180))*vitesse; // donne la position y future en fonction de la vitesse
    	if (_root.obstacle.hitTest(_x+x,_y+y,true)) // collision avec le rond
    	vitesse *= -1; // reaction apres collision, rebond de la voiture
    	else
    	{
    		_x += x; //_x est une coordonnée de la voiture
    		_y += y; //_y est une coordonnée de la voiture
    	}
    }
    Je ne sais pas si j'ai été très claire...
    Merci d'avance

  2. #2
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Salut,
    Pourquoi tu fais un hitTest entre ton clip obstacle et un point, tu peux tres bien faire un hitTest entre l'obstacle et le clip de ta voiture avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    obstacle.hitTest(voiture);
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

  3. #3
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je dois juste remplacer
    if (_root.obstacle.hitTest(_x+x,_y+y,true))
    par
    if (obstacle.hitTest(voiture))
    ?
    Malheureusement, je précise dans mon code le déplacement de la voiture, et c'est en fonction de ce déplacement que je calcule le hitTest...
    La voiture passe alors au travers de "obstacle"...

  4. #4
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Pour le code ca doit etre ca, faut bien mettre le nom des occurences de tes clips qui sont sur la scene. Par contre pour ce qui est de la detection en elle meme, suivant la methode il peut y avoir des soucis de detection. Ta methode a toi est dependante des images donc sur une sequence de deux images, sur la premiere la voiture est avant le mur et sur la suivante la voiture est apres le mur. Et avec ton calcul de detection il n'y a pas eu de collision sur les images ce qui fait que tu vois la voiture traverser le mur. Pour eviter ce desagrement, il te faut creer une fonction de detection de collision independante des images qui consiste en fait a calculer la distance entre ton vehicule et le mur, calculer le temps pour qu'il y est une collision et suivant ce temps agir en consequence et dans ce cas tu n'auras pas de problemes de voiture qui passe a travers le mur.
    Je t'aurais bien fourni un exemple de detection independante des images mais je suis au boulot et mes fichiers sont chez moi donc des que je peux et si ca t'interesse je te fournirais un exemple.
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

  5. #5
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Si je comprends bien, plus que de faire un htiTest, je devrais plutôt créer une variable calculant la distance entre la voiture et l'obstacle?
    Je suis débutante et je n'emploi peut être pas le bon vocabulaire . En tout cas, je comprends ( ) ce que tu me fais remarquer...
    Effectivement, je veux bien ton exemple .

  6. #6
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Oui c'est cela si tu veux eviter le probleme de non detection entre deux images il te faut creer une fonction qui te permettrait de savoir exactement a quel moment une collision peut avoir lieu et donc bien evidemment il faut connaitre la distance entre les deux objets Des que je peux je t'enverrais les exemples que j'ai.
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

  7. #7
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ok ! Merci beaucoup!

  8. #8
    Membre confirmé Avatar de Destiny
    Profil pro
    Inscrit en
    Février 2005
    Messages
    720
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 720
    Points : 617
    Points
    617
    Par défaut
    j'ai toujours utilisé hitTest() et ça a toujours marché..

    met ton hitTest sur ton obstacle.

    mais là fanchement tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(this._parent.MonClip.hitTest(this._x, this._y, true))

  9. #9
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Tout depend comment est utilise hitTest, petit element et grande vitesse, pas tip top par contre petite vitesse et grand element y'a pas de soucis Tout depend la gestion que l'on souhaite, mais c'est vrai que hitTest beaucoup plus simple a mettre en place
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

  10. #10
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Mais en plaçant le hitTest sur l'obstacle, comment puis jouer sur la vitesse de la voiture?
    Comme ça?
    code de l'obstacle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (if(this._parent.voiture.hitTest(this._x, this._y, true)) 
    	vitesse *= -1; // reaction apres collision, rebond de la voiture
     
    //ou
    	_parent.voiture.vitesse *= -1; 
     
    	else
    	{
    		_x += x; //_x est une coordonnée de la voiture
    		_y += y; //_y est une coordonnée de la voiture
    	}

  11. #11
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Desole je n'ai toujours pas envoye mes fichiers concernant la collision. Je viens de regarder ce que j'ai sur mon poste et je peux eventuellement te fournir un bout de code (en fait une classe qui permet de gerer un pseudo jeu de billard, il en est a ces debuts ) mais comme tu es debutante en actionscript je me demandais si ca t'interessais quand meme. Si c'est ok, je te les enverrais.
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

  12. #12
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bien que débutante en AS, j'accepte volontiers ton "pseudo-jeu de billard" .^^
    Car c'est en forgeant qu'on devient forgeron!!

  13. #13
    Membre actif Avatar de Gnomothir
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 234
    Points : 297
    Points
    297
    Par défaut
    Ok tres bien , le systeme a encore un petit probleme (dur de bien gerer ces saletes de collisions quand il y a plein de boules de billard ), mais bon ca donne quelques trucs sympa. Je te joins ca
    PS: ci joint: * 3 fichiers .as -> 1 pour les boules de billard.
    -> 1 pour les bords du billard (mur).
    -> 1 pour le jeu en lui meme.
    * 1 fichier .fla: fichier pour tester tout ca
    Développez c'est bon pour la santé !!!
    langages: AS2/3, php, c++, java, ruby.
    os: windows, débutant linux (debian).

Discussions similaires

  1. [FLASH 8] Gestion des polices
    Par dom_dev dans le forum Flash
    Réponses: 9
    Dernier message: 16/11/2006, 15h35
  2. [FLASH MX2004] Gestion de collisions pour plateformes
    Par sourivore dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 10/05/2006, 13h08
  3. Importer avec Ogre / Gestion des collisions
    Par alex6891 dans le forum Ogre
    Réponses: 9
    Dernier message: 19/02/2006, 17h43
  4. [FLASH MX2004] Gestion des clips
    Par laurent1 dans le forum Flash
    Réponses: 6
    Dernier message: 28/11/2004, 10h53
  5. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo