Maison >interface Web >js tutoriel >Utilisez une syntaxe de type ActionScript pour écrire du HTML5 - Partie 3, événements de souris et mouvements des personnages du jeu

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

黄舟
黄舟original
2017-01-17 16:35:331359parcourir

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);  
        }  
    }  
}

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;  
    }

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;  
        }  
    }

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

backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);

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;  
}

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 (www.php.cn). )!


Déclaration:
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
Article précédent:Module d'outils Node.jsArticle suivant:Module d'outils Node.js