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). )!