Tutorial FLASH AS: arrastrar y girar el mouse MC
Vi un juego en Internet que requiere arrastrar y rotar MC. El arrastre se implementa mediante eventos del mouse, mientras que la rotación requiere el uso de eventos de cambio y clic del mouse. Siempre siento que es demasiado problema. Así que espero poder encontrar una manera de lograr funciones de arrastrar y rotar usando solo el mouse.
Resulta que MOUSE_DOWN+MOUSE_UP es equivalente a un evento CLICK. Es decir, cada vez que suelta el botón izquierdo del mouse y deja de arrastrar, el mc girará una vez y, obviamente, este no es el efecto esperado.
Entonces comencé a comprender por qué el programador agregó la escucha con la tecla Mayús.
Pero, ¿no se puede lograr esta función sin usar la tecla Mayús? Empecé a pensar en cómo distinguir MOUSE_DOWN+MOUSE_UP de CLICK.
Método 1: Establecer el intervalo de tiempo. No es fácil controlar el tiempo, así que pásalo.
Método 2: Utilizar la posición relativa del ratón. Si mc no se ha movido, se considera un evento de clic.
¡Respuesta correcta!
paquete{
importar flash.display .*;
importar flash.geom .Point;
importar flash.events.* ;
la clase pública principal extiende Sprite{
var privada mc:MC;
var privada clickOffset:Point;
var privada mouseLoc :Punto;
función pública principal(){
mc=new MC();
addChild(mc);
mc .x=200;
mc.y=200;
mc.addEventListener(MouseEvent.CLICK ,rot);
mc.addEventListener(MouseEvent.MOUSE_DOWN ,startdrag);
mc.addEventListener(Event.ENTER_FRAME. ,drag);
stage.addEventListener(MouseEvent.MOUSE_UP,stopdrag);
}
función privada startdrag(e:MouseEvent){
mouseLoc=nuevo Punto(e.stageX,e.stageY);
clickOffset=nuevo Punto(e. stageX-mc.x,e.stageY-mc.y);
}
función privada arrastrar(e:Evento){
if(clickOffset= =nulo) retorno;
mc.x=mouseX-clickOffset.x;
mc.y=mouseY-clickOffset.y;
}
función privada stopdrag(e:MouseEvent){
clickOffset=null;
}
función privada rot(e:MouseEvent){ p>
if(!mouseLoc.equals(new Point(e.stageX,e.stageY)))return;
mc.rotation+=30;
} p>
}
}