Maison > interface Web > Tutoriel H5 > Exemple de partage de code pour le jeu HTML5 'Tank Support Team'

Exemple de partage de code pour le jeu HTML5 'Tank Support Team'

黄舟
Libérer: 2017-03-24 15:50:08
original
1548 Les gens l'ont consulté

Description de la fonction :

Ce jeu est essentiellement bataille de chars + boîte à poussée . Le joueur contrôle le char et tout en combattant l'ennemi, il peut transporter avec succès les fournitures jusqu'à la destination pour réussir le niveau. Il y a trois niveaux au total.

Jeu Description : Les touches fléchées haut, bas, gauche et droite contrôlent le mouvement, la barre d'espace lance des boulets de canon, poussez toutes les boîtes de matériel () vers la destination (), vous pouvez réussir.

Exemple de partage de code pour le jeu HTML5 Tank Support Team

Analyse du code :

À cause de Ce jeu est divisé en plusieurs niveaux, voyons donc d'abord comment le gestionnaire de niveaux gère chaque niveau :

/*    关卡管理器    */
var LevelManager=(function(){
    var optionsObj={};//所有关卡参数对象
    return {
        add:function(levelObj,gameObj){
            var srcArr=[];
            for(name in levelObj.srcObj){
                if(levelObj.srcObj.hasOwnProperty(name)){
                    srcArr.push(levelObj.srcObj[name]);
                }
            }
            var opt=optionsObj[levelObj.level]={};
            opt.gameObj=gameObj;
            opt.srcArray=srcArr;
            opt.startOptions=levelObj.startOptions||{};
            opt.startOptions.mapMatrix=levelObj.mapMatrix;
            opt.startOptions.srcObj=levelObj.srcObj;
            opt.startOptions.level=levelObj.level;
        },
        startLevel:function(num){
            var op=optionsObj[num];
            cnGame.loader.start(op.gameObj,op);    
        }

    }

})();
Copier après la connexion

Dans la phase d'initialisation, nous créons d'abord nos propres niveaux pour chaque niveau Object , puis appelez la méthode add pour l'ajouter au gestionnaire de niveaux. Vous pouvez ensuite appeler startLevel pour démarrer le niveau . Cela facilitera nos sauts ultérieurs dans chaque niveau. De plus, les objets de jeu utilisés dans chaque niveau peuvent également être transmis ici. Dans ce jeu, puisque la logique de chaque jeu de niveau est fondamentalement la même, les mêmes objets de jeu sont utilisés. L'écran de démarrage du jeu utilise un autre objet de jeu. La forme d'organisation de chaque objet de jeu est la suivante

var gameObj={

    initialize:function(options){//初始化
    },
    update:function(){//更新
    },
    draw:function(){//绘制
    }

}
Copier après la connexion

Regardons la fonction d'initialisation spécifique de l'objet de jeu gameObj :

/*    初始化    */
        initialize:function(options){
            srcObj=options.srcObj;
            this.level=options.level;
            this.enemyBeginX=options.enemyBeginX;
            this.enemyBeginY=options.enemyBeginY;
            this.map=new cnGame.Map(options.mapMatrix,{cellSize:[40,40]});
            this.goods=[];
            
            cnGame.input.preventDefault(["left","right","up","down"]);
            for(var i=0,len=options.goodsArr.length;i<len;i++){
                this.goods.push(new goods({src:srcObj.goods,width:40,height:40,x:options.goodsArr[i].x,y:options.goodsArr[i].y}));
                cnGame.spriteList.add(this.goods[this.goods.length-1]);
            }
            
            this.player=new player({src:srcObj.player,width:40,height:40,x:40,y:cnGame.height-80});
            cnGame.spriteList.add(this.player);
            var newEnemy=new enemy({src:srcObj.enemy,width:40,height:40,x:this.enemyBeginX,y:this.enemyBeginY});
            newEnemy.getRandomDir(dirArr);
            cnGame.spriteList.add(newEnemy);
        }
Copier après la connexion

Dans l'initialisation fonction, nous avons besoin Les paramètres initialisés sont  : carte objet, matériel tableau , objet joueur et objet ennemi . Les objets cartographiques peuvent utiliser la carte de cnGameJS, tandis que les objets joueurs et ennemis héritent du sprite de cnGameJS.

Dans chaque mise à jour de gameObj, nous devons déterminer si tous les objets matériels sont en place. Si c'est le cas, nous pouvons passer au niveau suivant.

if(_map.isMatchCell(_goods)&&(_map.getPosValue(_goods)==3)){//判断所有物资是否已到达目的地
                    finishedNum+=1;
                    if(finishedNum==_goodsArr.length){
                        this.toNextLevel();
                    }
                }
Copier après la connexion

De plus, à chaque mise à jour, il faut également déterminer si la balle touche l'ennemi, le joueur, ou le matériel :

if(isGoods(list[j])||(isEnemy(list[j])&&list[i].from=="player")||(isPlayer(list[j])&&list[i].from=="enemy")){}
Copier après la connexion

Si elle touche l'ennemi ou le joueur , supprimez l'objet correspondant de spriteList, afin que l'objet ne soit pas mis à jour et dessiné la prochaine fois. De plus, chaque fois qu'une balle touche un objet, une explosion de spriteSheet animation  :

/*    击中后的爆炸动画效果    */
bullet.prototype.explode=function(){
    var self=this;
    this.isExploding=true;
    var spriteSheet=new cnGame.SpriteSheet("boom",srcObj.boom,{width:280,height:40,frameSize:[40,40],frameDuration:40,onFinish:function(){self.isDisappear=true}});
    this.setCurrentAnimation(spriteSheet);
    this.speedX=0;
    this.speedY=0;
}
Copier après la connexion

L'image spriteSheet de cette animation est comme suit :

L'animation générée par dessine en fait l'image sur la toile à partir d'une position différente à chaque fois, détails à propos de l'animation spriteSheet Veuillez consulter : "Record of Development of HTML5 Game Framework cnGameJS : Animation".

De plus, contrairement au dernier jeu Super Mario, ce jeu est basé sur des cartes. Par conséquent, la carte doit être conçue et dessinée au début du jeu. La carte est générée par une matrice bidimensionnelle. Par exemple, la matrice bidimensionnelle correspondant à la carte de jeu du premier niveau est la suivante :

/* 地图矩阵:0.空地 1.墙壁 2.石头 3.目的地 4.敌人基地*/
    mapMatrix:[
                    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
                    [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
                    [1,0,1,0,0,2,2,0,0,0,2,2,0,0,0,1],
                    [1,0,1,0,0,0,2,0,0,0,4,0,0,0,2,1],
                    [1,0,1,0,0,0,0,0,2,0,0,0,0,0,0,1],
                    [1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,1],
                    [1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1],
                    [1,1,1,1,1,1,1,0,0,0,1,1,1,2,2,1],
                    [1,0,0,0,0,2,0,0,0,0,1,3,0,0,0,1],
                    [1,0,0,0,0,2,0,2,0,0,1,0,0,0,0,1],
                    [1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
                    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
                   ]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal