Javascript, destruction de div - HTML/CSS - Programmation
Marsh Posté le 14-04-2014 à 23:04:32
Tiens un jsbin qui marche pas
Il manque des trucs dans le code que tu nous fournis, c'est pas une question de IE ou Chrome.
Tu cherches tes monstres, tours et projectiles avant d'en avoir créés.
Code :
|
On ne va pas aller loin là
Marsh Posté le 15-04-2014 à 23:08:46
Bonsoir, déjà merci de ta réponse , ensuite ces trois déclarations posent-ils vraiment un problème ? Car avant de mettre en place la destructions des "projectiles", il n'y avait aucun problème dans le code :x
Ensuite que dois-je faire donc ? Déclarer des tableaux vides en globale, pour ensuite faire un push dans ce tableau dans la fonction de création ?
Ps: Désolé pour mon niveau très faible en prog, mais je n'ai pas eu de cours à proprement parler, je dois me débrouiller moi même avec ce que je sais
Ps2: J'ai essayer une autre solution qui est de faire l'animation de chaque projectile puis de tout diriger avec une fonction centrale http://jsbin.com/xesixane/1/edit ici le problème est différent, pas tout le temps, mais des fois, les projectiles arretent subitement de bouger, et me disent que ensembleMob[mobProche] est undefined, je ne comprend pas pourquoi..
Merci bonne soirée
Marsh Posté le 15-04-2014 à 23:13:15
ce n'est pas la ligne de code qui pose problème, mais là où tu l'insères.
Au chargement de ton fichier, tu cherches dans le DOM des éléments qui ne seront ajoutés que lors du click sur start.
Donc forcément, ces 3 variables ont pour valeur des tableaux vides, et ton code derrière ne fonctionne pas.
Marsh Posté le 15-04-2014 à 23:21:38
Je comprends ce que tu veux dire, mais je comprend pas ou est ce que je peux donc les insérer :x Dans les fonctions elles même de créations ?
Marsh Posté le 15-04-2014 à 23:36:57
laisse la déclaration où elle est et oui, après la création.
Marsh Posté le 15-04-2014 à 23:56:21
http://jsbin.com/xesixane/1/edit
Voila je pense que la déclaration est bonne maintenant, mais le problème persiste
Marsh Posté le 16-04-2014 à 10:26:29
!
À mon humble avis, le problème se situe à ce niveau :
Code :
|
Que se passe-t-il si la vie de ton mob descend en dessous de 0 ? Cela peut se produire s'il est touché par plusieurs projectiles entre 2 périodes de timer.
Pour moi, il faudrait effectuer le test suivant :
Code :
|
Marsh Posté le 16-04-2014 à 12:41:04
Bonjour ! Merci beaucoup pour ta réponse, effectivement je me sens tellement bête mais je n'y aurais pas pensé ! Mais le problème persiste toujours.. Le message d'erreur est : "TypeError: ensembleMob[mobProche] is undefined". Je suppose donc que le mob le plus proche du projectile n'arrive pas à être trouver, mais je ne comprend pas pourquoi.. Je vais peut être ressayer avec la fonction que j'avais donné en premier avec l'animation de tout les projectiles en meme temps et pas avec l'animationGeneralisé et je vous dis quoi.
merci
Ps: Bon ça marche avec le javascript du premier post modifié Merci beaucoup ! Quelqu'un a une idée pour supprimer tout les projectiles allant vers un mob[x] quand celui ci est détruit ? J'avais pensé à repéter avec un undefined
Marsh Posté le 16-04-2014 à 18:23:00
Il faut que tu apprennes à débugger. Utilise Chrome et ouvre la dev console et que tu actives les points d'arrêt sur exception.
https://developers.google.com/chrom [...] exceptions
Marsh Posté le 16-04-2014 à 20:49:32
Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic.
Html:
Code :
|
Javascript:
Code :
|
J'ai commencé par ça, mais en fait je suis un peu perdu pour cette partie du code, je n'ai jamais utiliser cette méthode avant, et je ne comprend pas ce que l'argument "event" vient faire ici ? Si quelqu'un pouvait m'éclairer sur ceci ! Merci
Marsh Posté le 16-04-2014 à 22:56:37
Elradriel a écrit : Quelqu'un a une idée pour supprimer tout les projectiles allant vers un mob[x] quand celui ci est détruit ? J'avais pensé à repéter avec un undefined |
Pour cette question, je pense que ça se passe dans la fonction testEnVieMob( ) : quand le mob est détruit, tu dois pouvoir retrouver quel projectile allait vers ce mob et le détruire. Si j'ai bien suivi, tu peux le faire à partir de l'index du mob et du tableau lesMobProjectilePlusProche (je dois me plonger dans le code pour confirmer cela ).
Elradriel a écrit : Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic.
|
Pour Firefox, tu as aussi des outils intégrés dans les versions récentes du navigateur (Menu Développement Web->Débogueur) .
Pour l'argument event, c'est un objet qui est passé à la fonction appelée lors du clic.
Marsh Posté le 16-04-2014 à 23:00:56
Elradriel a écrit : Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic. Html:
Javascript:
J'ai commencé par ça, mais en fait je suis un peu perdu pour cette partie du code, je n'ai jamais utiliser cette méthode avant, et je ne comprend pas ce que l'argument "event" vient faire ici ? Si quelqu'un pouvait m'éclairer sur ceci ! Merci |
J'en profite aussi pour donner mon avis sur cette partie de code :
Edit : Bien sûr, il y a d'autres modifications à apporter pour que cela fonctionne bien
Marsh Posté le 17-04-2014 à 07:27:32
Bonjour, merci beaucoup pour vos réponses rapides, ce forum est très agréable ainsi que sa communauté Je vais essayer d'appliquer ce que tu m'as dit et je donnerai des nouvelles du projet Bonne journée à vous
Marsh Posté le 17-04-2014 à 21:25:31
Bonsoir ! bon la fonction marche parfaitement maintenant
Code :
|
Bon maintenant, je voudrais faire en sorte de vérifier que le bouton "tour" a été enfoncé, et en fonction de la réponse, créer la tour à l'endroit cliqué ensuite. Y a t-il une fonction déjà faite en javascript pour ceci ?
Marsh Posté le 21-04-2014 à 10:41:26
Il faut que tu ajoutes un booléen, "tourEnAttente" par exemple, qui est à false. Au click du bouton tour, tu le passe à true.
Tu ajoutes ensuite un eventListener au click sur le document. Au moment du click tu vérifies l'état "tourEnAttente". Si il est true, tu crées ta tour et tu le repasses à false, si il est false, tu ne fais rien.
Marsh Posté le 25-04-2014 à 18:26:56
Bonsoir, merci tout d'abord le projet avance très bien et touche à sa fin J'ai ajouté pleins de choses comme le fait d'améliorer les tours, de choisir un niveau de difficulté en début de partie, l'évolution du jeu au fil des niveaux, bref pleins de petites choses essentielles, mais je bloque toujours pour la suppression des projectiles quand ceux-ci étaient vers la direction de mob détruit :x j'ai essayé en passant par les index comme mentionné au dessus mais je ne comprends pas, j'aimerai donc si possible une petite aide pour démarrer
Je remets le code javascript si besoin:
Code :
|
Merci beaucoup et bonne soirée Désolé pour la réponse tardive mais je suis en vacance.
Marsh Posté le 14-04-2014 à 22:39:13
Bonsoir, encore moi pour le projet de tower Defense, je touche bientôt à la fin, en fait, il reste que la partie projectile pour pouvoir passer ensuite à l'optimisation et à des améliorations comme par exemple le placement des tours lors du clique de souris enfin bref ce n'est pas le soucis.
Tout d'abord, avant de vous montrez le code (j'ai essayé de faire un jsfiddle, mais pas moyen de faire apparaitre le javascript je comprends pas pourquoi..), voila une brève explication: Les div mobs sont générés et stocker dans ensembleMob[], les div tours sont générés et stocker dans ensembleTour[], et les projectile dans ensembleProjectile[]. J'ai deux fonctions principales qui tournent en continuent qui sont l'animation des mobs, l'animation des projectiles qui fonctionnent, sauf pour la fin de l'animation projectile, qui est la cause de mon poste et la fonction testEnVie, et une fonction projectileCreation, qui est appelée chaque demi-seconde. Comme vous le verrez, mon code n'est absolument pas optimisé, mais pour l'instant je travaille comme ça, le projet de fin d'année s'appuie plus sur des éléments concrets que sur l'optimisation apparemment selon les profs, donc "si ça fonctionne c'est bon". C'est pour cela qu'il y a beaucoup de fonction de calculer d'index.
Maintenant pour le problème, il faut se concentrer sur la fonction animationProjectile() et sur testEnVie, l'animation du projectile se passe très bien, ainsi que la destruction du div projectile qd la distance entre le projectile et le mob est égale à 1. Le problème arrive pour la destruction du monstre quand celui ci est touché par 2 projectiles. En effet, tout d'abord, pour les 2/3 premiers mobs, le programme fonctionne parfaitement, et les mobs sont détruit, mais ensuite, bien que les projectiles soient en collision avec le monstre, et soient détruit, le monstre ne semble pas être affecté par la perte de point de vie et donc n'est pas détruit par la fonction testEnVie. Je pense avoir une piste sur le problème, mais je n'en suis pas certain. Prenons un exemple avec le premier mob ou la fonction fonctionne bien. Lorsqu'une tour détecte un mob a 200px, celle ci crée des projectiles qui se dirigent sur ce mob (le plus proche), le problème est que 4 projectiles ont le temps d’être appelé avant que les 2 premiers projectiles entre en collision avec le monstre et le détruisent, les deux derniers projectiles sont donc redirigés vers l'autre mob le plus proche sur la carte. Si le problème vient bien de cela, je ne comprend pas comment faire pour régler le problème..
Voici les différents code (pour que vous puissiez test en copiant collant si besoin): et les deux fonctions qui posent problème sont à la fin du post (du moins je suppose que le problème vient d'ici)
HTML:
Javascript:
Css:
Et voila les deux fonctions concerné, le code complet est au dessus si besoin de + d'information.
Ps: Dans certains cas, le code fonctionne, c'est pourquoi je ne comprend vraiment pas le problème de cette fonction.. Et de plus, quelqu'un a une piste pour lorsqu'un ensembleMob[x] est détruit, tout les projectiles dirigés vers lui soit supprimés ?
Et si jamais vous avez des idées d'amélioration je suis preneur et désolé de la manière laborieuse dont le code est fait, mais le projet de fin d'année pour le bac touche à sa fin, et je n'ai pas eu le temps d'apprendre la programmation objet qui aurait été bien plus simple je pense.
Merci beaucoup et bonne soirée.
Message édité par Elradriel le 14-04-2014 à 22:45:28