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

ActionScript 3 Discussion :

Collision entre 2 children


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Par défaut Collision entre 2 children
    Bonjour à tous,

    Je fais actuellement un Survivor où le joueur peut tirer des missiles pour intercepter des autres missiles ennemis qui l'attaquent.

    Mes missiles éclatent là ou le joueur avait cliqué et lors de l'explosion, un movieclip de forme circulaire apparait. Il me sert en fait a gérer les dégâts de zone et sera invisible dans la version finale. Il reste visible 5 frames après l'explosion du missile allié, et est sensé détruire tous les missiles ennemis qui le touchent.

    les missiles alliés tirés par le joueur son dans un fichier nommé MissileSimple.as et les ennemis MissileEnnemis.as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		  var ExplosionRadius = MovieClip(parent).ExplosionRadius;
    		  if (this.hitTestObject(ExplosionRadius))
    		  {
    			 trace("Hit");
    			 this.removeEventListener(Event.ENTER_FRAME, ChildPosition);
    			 this.parent.removeChild(this);  
                      }
    En tracant l'ExplosionRadius (qui est le cercle de 5 frames), je m'appercois qu'il le reconnait, il existe. Il me dit "Object Radius" (il s’appelle Radius dans la biblio et ExplosionRadius pour le script)

    Dans ce code (fichier des missiles ennemis), la commande de remove marche car elle est utilisée plus haut (quand le missile touche le shield ou le sol). en revanche, la commande hitestObject ne marche pas. Il a pas l'air de comprendre ce que je veux lui dire. A noter que ce If/then est contenu dans un Listener qui check chaque frame, donc ça ne vient pas de ça.

    Quelqu'un sait comment je peux faire pour que les collisions marchent entre les children ? De plus, je sais pas si c'est important mais le joueur peut tirer plusieurs missiles simultanément et il y a plusieurs missiles ennemis à l'écran.


    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Par défaut
    Salut,
    ton code de collision est parfaitement écrit par contre la suppression de la classe ne peut pas être réalisé comme ceci.

    En fait une classe ne peut pas s'autodétruire, même en trichant avec this.parent .

    A toi de te débrouiller , par exemple moi j'ai une fonction qui liste toutes mes classes à la fin d'une execution, si une classe doit être détruire c'est à ce moment quelle est détruite.

    2ième remarque "hitTestObject" est une fonction magique pas si magique que sa. Je te conseil d'aller voir la classe sur l'aide en ligne, le deuxième argument (le boolean) est très intéressent.
    Par contre c'est une très mauvaise idée d'utiliser cette fonction pour ton jeu t'elle que tu la expliqué, je te conseil d'écrire un petit moteur de collision sur une grille qui te permettra de multiplier par 20 le nombre d'objet à l'écran.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Par défaut
    Citation Envoyé par carton99 Voir le message
    Salut,
    ton code de collision est parfaitement écrit par contre la suppression de la classe ne peut pas être réalisé comme ceci.

    En fait une classe ne peut pas s'autodétruire, même en trichant avec this.parent .
    Pourtant j'ai 2 autres conditions de suppression fonctionnelles qui utilisent le même code et pour le même missile, pourquoi ca ne marcherait pas avec une collision ?

    Citation Envoyé par carton99 Voir le message
    A toi de te débrouiller , par exemple moi j'ai une fonction qui liste toutes mes classes à la fin d'une execution, si une classe doit être détruire c'est à ce moment quelle est détruite.

    2ième remarque "hitTestObject" est une fonction magique pas si magique que sa. Je te conseil d'aller voir la classe sur l'aide en ligne, le deuxième argument (le boolean) est très intéressent.
    Par contre c'est une très mauvaise idée d'utiliser cette fonction pour ton jeu t'elle que tu la expliqué, je te conseil d'écrire un petit moteur de collision sur une grille qui te permettra de multiplier par 20 le nombre d'objet à l'écran.
    Pourrais-tu m'aider ? J'ai un peu du mal à savoir comment faire. J'ai vu pas mal de gens utiliser des arrays mais j'en ai pas, on peut faire sans ou c'est obligatoire ? De plus mes missiles sont des collisions indirectes car c'est pas l'anti missile qui touche l'autre mais le ExplosionRadius qui spawn lors de son explosion. Ainsi le Movieclip ExplosionRadius est un child d'un child.

    Merci encore.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Par défaut
    Salut,
    pour la premiere remarque je répète que tu ne peut pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.parent.removeChildren(this)
    Même en trichant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.parent.destroyMe(this)
    avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    destroyMe(this){
    removechild(this);
    }
    Tu doit donc te forcer à réfléchir autrement ton code, mais comme je l'ai expliqué au dessus c'est très simple.(Pour info en AS2 une classe pouvais s'autodétruire mais plus en AS3)
    Par contre je ne comprend pas tu dit que tu arrive quand même à le faire , je suis très curieux pourrais tu me montrer le code.A vrai dire c'est PEUT ETRE possible sur des fonctions très spécifique comme les MouseEvent, mais c'est spécial et compliqué.


    Pour le second point, un admin à du effacer une partie de mon post car je t'avais mi un lien sur un autre site de programmation qui explique comment gérer les collisions.
    Je te propose donc de taper sur Google :
    Théorie des collisions programmation

    Les différents sites apparaisent devrais beacoup t'aider à comprendre comment gérer les colisions avec une grille(grille, tableau, matrice c'est la meme chose).
    Petite explication rapide quand même:
    -Tu divise ta surface de jeu en grille comme sur un échiquier.
    -Chaque fois que un ennemis se déplace il doit indiquer sur quel case il se situe.
    - quand un missile explose il regarde sur quel case il est et inflige des dégâts sur les ennemis sur de cet case.
    - tu peux augmenter la surface d'explosion en infligent des dégâts sur plusieurs cases.
    La difficulté consiste à choisir la bonne taille de cases car comme tu l'aura compris ce système n'est pas tres précis. Mais généralement le joueur ne vois pas la différence.
    Plus les cases sont grosse moins de ressource processeur sont nécéssaire tu peux donc mettre plus d'objet sur le jeu.
    C'est donc à toit de faire un compromis entre précision et nombre d'objet sur l'écran.

Discussions similaires

  1. Collision entre 2 polygones en 2d
    Par franco01 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/07/2006, 17h08
  2. Détection de collisions entre rectangles
    Par davcha dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 13/04/2006, 18h26
  3. Détection de collision entre un cube et un carré
    Par Mat 74 dans le forum Physique
    Réponses: 15
    Dernier message: 17/03/2006, 14h01
  4. GLScene et les collisions entre les objets
    Par HopeLeaves dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/06/2005, 19h45
  5. Réponses: 4
    Dernier message: 25/09/2004, 09h58

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