Maison > interface Web > js tutoriel > le corps du texte

Utilisez une syntaxe de type ActionScript pour écrire du HTML5 - Partie 3, événements de souris et mouvements des personnages du jeu

黄舟
Libérer: 2017-01-17 16:35:33
original
1349 Les gens l'ont consulté

Le troisième article, les événements de souris et le mouvement des personnages du jeu

1. Hypothèse
Supposons que tous les objets qui peuvent ajouter des événements de souris ont une méthode mouseEvent et que les événements de souris ajoutés passent par cet appel mouseEvent. .
Dans ce cas, pour ajouter un événement de souris, il vous suffit d'ajouter un événement de souris au canevas, puis de boucler la childList dans la classe LGlobal, c'est-à-dire de boucler tous les objets visuels si un événement de souris est ajouté. , puis appelez sa méthode correspondante.
Deuxièmement, implémentez
1, ajoutez la méthode mouseEvent à la classe LGlobal, puis modifiez le setCanvas de la classe LGlobal pour implémenter l'ajout et l'appel d'événements de souris Canvas

LGlobal.setCanvas = function (id,width,height){  
    LGlobal.canvasObj = document.getElementById(id);  
    if(width)LGlobal.canvasObj.width = width;  
    if(height)LGlobal.canvasObj.height = height;  
    LGlobal.width = LGlobal.canvasObj.width;  
    LGlobal.height = LGlobal.canvasObj.height;  
    LGlobal.canvas = LGlobal.canvasObj.getContext("2d");  
      
    LEvent.addEventListener(LGlobal.canvasObj,LMouseEvent.MOUSE_DOWN,function(event){  
        LGlobal.mouseEvent(event,LMouseEvent.MOUSE_DOWN);  
    });  
}   
LGlobal.mouseEvent = function(event,type){  
    var key;  
    for(key in LGlobal.childList){  
        if(LGlobal.childList[key].mouseEvent){  
            LGlobal.childList[key].mouseEvent(event,type);  
        }  
    }  
}
Copier après la connexion

2, ajoutez mouseList au tableau de classe LSprite, utilisé pour enregistrer les événements de souris ajoutés, puis ajoutez la méthode mouseEvent
Dans la méthode mouseEvent, nous devons effectuer 2 processus,
1) pour déterminer si nous avons ajouté la souris événement, et sinon, bouclez-le childList
2), si un événement de souris est ajouté, déterminez s'il est cliqué. Bien que LSprite soit une classe visible dans le sens, elle est actuellement invisible. Pour être plus précis, c'est le BitmapData dans cette classe Bitmap, plus précisément, c'est l'Image dans ce BitmapData, donc pour déterminer si vous avez été cliqué, vous devez déterminer si l'objet visuel dans childList dans le LSprite. a été cliqué. S'il est cliqué, alors appelez la méthode correspondante

mouseEvent:function (event,type,cood){  
        if(cood==null)cood={x:0,y:0};  
        var self = this;  
        if(self.mouseList.length == 0){  
            for(key in self.childList){  
                if(self.childList[key].mouseEvent){  
                    self.childList[key].mouseEvent(event,type,{x:self.x+cood.x,y:self.y+cood.y});  
                }  
            }  
            return;  
        }  
        if(self.childList.length == 0)return;  
        var key;  
        var isclick = false;  
        for(key in self.childList){  
            isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y});  
            if(isclick)break;  
        }  
        if(isclick){  
            for(key in self.mouseList){  
                var obj = self.mouseList[key];  
                if(obj.type == type){  
                    event.selfX = event.offsetX - (self.x+cood.x);  
                    event.selfY = event.offsetY - (self.y+cood.y);  
                    event.currentTarget = self;  
                    obj.listener(event);  
                }  
            }  
            return;  
        }  
          
    },  
    ismouseon:function(event,cood){  
        var self = this;  
        var key;  
        var isclick = false;  
        for(key in self.childList){  
            isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y});  
            if(isclick)break;  
        }  
        return isclick;  
    }
Copier après la connexion

méthode ismouseon pour déterminer si vous avez cliqué
La classe LBitmap doit également déterminer si vous avez cliqué, alors ajoutez ismouseon

ismouseon:function(event,cood){  
        var self = this;  
        if(event.offsetX >= self.x + cood.x && event.offsetX <= self.x + cood.x + self.width &&   
            event.offsetY >= self.y + cood.y && event.offsetY <= self.y + cood.y + self.height){  
            return true;  
        }else{  
            return false;  
        }  
    }
Copier après la connexion

Lorsque vous utilisez des événements de souris, imitez la syntaxe d'ActionScript

backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);
Copier après la connexion

Ensuite, préparez une carte et une carte de marche du personnage, et utilisez les événements de souris pour contrôler le mouvement du personnage.

init(80,"back",800,480,main);  
  
  
var list = new Array();  
var index = 0;  
var backLayer;  
//地图  
var mapimg;  
//人物  
var playerimg;  
var loader  
var imageArray;  
var animeIndex = 0;  
var dirindex = 0;  
var dirarr = new Array({x:0,y:1},{x:-1,y:0},{x:1,y:0},{x:0,y:-1},{x:-1,y:1},{x:1,y:1},{x:-1,y:-1},{x:1,y:-1});  
var dirmark = {"0,1":0,"-1,0":1,"1,0":2,"0,-1":3,"-1,1":4,"1,1":5,"-1,-1":6,"1,-1":7};  
  
  
//移动目标  
var toX = 0;  
var toY = 0;  
function main(){  
      
    loader = new LLoader();  
    loader.addEventListener(LEvent.COMPLETE,loadBitmapdata);  
    loader.load("back.jpg","bitmapData");  
}  
function loadBitmapdata(event){  
    var bitmapdata = new LBitmapData(loader.content);  
    mapimg = new LBitmap(bitmapdata);  
    loader = new LLoader();  
    loader.addEventListener(LEvent.COMPLETE,loadOver);  
    loader.load("1.png","bitmapData");  
}  
function loadOver(event){  
    var bitmapdata = new LBitmapData(loader.content,0,0,70,92);  
    imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
    document.getElementById("inittxt").innerHTML="";  
    playerimg = new LBitmap(bitmapdata);  
    playerimg.bitmapData.setCoordinate(0,0);  
    index = 0;  
    backLayer = new LSprite();  
    addChild(backLayer);  
    backLayer.addChild(mapimg);  
    backLayer.addChild(playerimg);  
    backLayer.addEventListener(LEvent.ENTER_FRAME, onframe)  
    backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);  
}  
  
  
function onframe(){  
    index++;  
    if(index >= imageArray[0].length){  
        index = 0;  
    }  
    var markx = 0,marky = 0;  
    var l = 3;  
    if(playerimg.x > toX){  
        playerimg.x -= l;  
        markx = -1;  
    }else if(playerimg.x < toX){  
        playerimg.x += l;  
        markx = 1;  
    }  
    if(playerimg.y > toY){  
        playerimg.y -= l;  
        marky = -1;  
    }else if(playerimg.y < toY){  
        playerimg.y += l;  
        marky = 1;  
    }  
    if(markx !=0 || marky != 0){  
        var mark = markx+","+marky;  
        dirindex = dirmark[mark];  
    }  
    playerimg.bitmapData.setCoordinate(imageArray[dirindex][index].x,imageArray[dirindex][index].y);  
}  
function onmousedown(event){  
    toX = parseInt(event.selfX/3)*3;  
    toY = parseInt(event.selfY/3)*3;  
}
Copier après la connexion

C'est tout. Utilisez une syntaxe de type ActionScript pour écrire du HTML5 - Partie 3, sur les événements de la souris et les mouvements des personnages du jeu. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (m.sbmmt.com). )!


É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