Maison >interface Web >js tutoriel >Jeu de combat de chars simulé javascript (version html5) avec compétences en téléchargement de code source_javascript
Jeu de combat de chars simulé javascript (version html5) avec compétences en téléchargement de code source_javascript
WBOYoriginal
2016-05-16 16:52:561529parcourir
1. Résumez les points clés et les problèmes rencontrés
1. Pour l'héritage en JavaScript, il est préférable que la classe parent fournisse uniquement le partage de méthodes, et les attributs sont écrits dans les sous-classes respectives pour éviter de mélanger les constructeurs de. la classe parent et la sous-classe.
2. Le code pour l'héritage de simulation de prototype doit être écrit avant toutes les définitions de méthode, sinon l'objet prototype est modifié et la méthode devient indéfinie, comme :
Hero.prototype = new Tank (0, 0, 0 Hero.prototype.constructor) ; = Hero ; Hero.prototype.addLife = function(){ this.lifetimes document.querySelector("#life").innerHTML = hero.lifetimes; 🎜> 3. Lors du dessin de graphiques sur toile, en plus de dessiner des rectangles, ctx.beginPath(); et ctx.closePath();
4. La fonction concat peut fusionner des tableaux ou renvoyer des éléments dans un nouveau tableau
5. Une fois l'attribut src de l'image attribué, l'image sera chargée, mais si ce n'est pas le cas. chargée, l'image sera dessinée. Cela provoquera un échec, utilisez donc le traitement des événements onload
6. Étendez la fonction Array et supprimez l'élément spécifié
if (obj) { for (var i = 0; i < this.length; i ) { if (this[i] === obj) { this.splice (i, 1); } } } }
7. Réglage de la minuterie, le premier paramètre de la méthode setInterval("fun",1000) peut être un chaîne, telle que "hero.say()", similaire à eval pour exécuter cette chaîne de code, afin qu'elle puisse apporter des paramètres à la fonction et également spécifier le contexte d'exécution de cette fonction. Mais si la fonction est passée en tant que handle, elle ne peut pas prendre de paramètres et le contexte ne peut pas être spécifié. En plus de la première méthode, j'ai utilisé des fermetures pour résoudre ce problème
<. 🎜 >Copier le code
Le code est le suivant ://Timer, se déplace tout seulthis.timer = setInterval ((fonction (contexte) {
J'ai enregistré le environnement d'exécution actuel, et appelez la méthode d'appel pour l'exécuter manuellement.
8. En plus de la fonction, la conception fonctionnelle de la méthode doit inclure la détection des conditions pour exécuter cette fonction. Par exemple, move doit inclure les circonstances dans lesquelles elle peut être déplacée et dans lesquelles elle ne peut pas être déplacée. . Ce test ne doit pas être placé à l’extérieur.
9. Lorsque vous écrivez du code, vous ne devez pas penser aux problèmes de conception ou d'optimisation d'abord, puis parler d'optimisation, ou de conception, puis de l'implémenter. La réflexion doit être claire, sans confusion et se concentrer sur un point.
10. Il n'y a pas de fonction de veille en JavaScript. Vous pouvez créer une variable comme tampon pour atteindre l'objectif d'exécution par intervalles
2. le programme est divisé en Bomb.js,Bullet.js,Draw.js,Tank.js,index.html,img,music,
function draw(){ //Vérifiez la vie et la mort des balles et des chars checkDead( /); /Effacer le canevas ctx.clearRect(0,0,500,400); //Dessiner le joueur if(!hero.isdead){ drawTank(hero); }else{ hero.cutLife( ); } //Dessiner un char ennemi pour (var i = 0; i < ennemis.length; i ) { drawTank(enemys[i]) ; } //Dessinez les balles ennemies for(var j=0;jvar temp = ennemis[j].bulletsList for ( var i = 0; i < temp.length; i ) { drawBullet(temp[i]); } //Dessiner des balles de joueur var temp = hero. bulletsList; for (var i = 0; i < temp.length; i ) { drawBullet(temp[i]);
//Dessiner une bombe for(var i=0 ;idrawBown(Bombs[i]); }
}
function drawTank(tank) { var x = tank.x; var y = tank.y; ctx.fillStyle = tank.color
if(tank.direct == 0 || tank. direct ==2){ ctx.fillRect(x, y, 5,30); ctx.fillRect(x 15, y, 5,30);
function checkDead(){ //Détecter la vie et la mort des balles ennemies for(var j=0; jvar temp = ennemis[j].bulletsList for (var i = 0; i < temp.length; i ) { var o = temp[ i]; if(o.isdead ){ temp.deleteElement(o); } } } //Détecter la vie et la mort des balles des joueurs var temp = hero.bulletsList; for (var i = 0; i < temp.length; i ) { var o = temp[i]; if(o.isdead){ temp.deleteElement(o); } }
//Détecter la vie et la mort des chars ennemis pour (var i = 0; i < ennemis.length; i ) { var o = ennemis[i]; if( o.isdead){ enemys.deleteElement(o); } } }
/** * Créé par Alane le 14-3-7. */ /** * direct 0 en haut * 1 à droite * 2 en bas * 3 à gauche * @param x * @param y * @param direct * @constructeur */ //************************************************** ****************************************/ //坦克父类 fonction Réservoir (x, y, direct) { this.speed = 2;
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn