Red de conocimiento informático - Aprendizaje de programación - Tutorial FLASH AS: arrastrar y girar el mouse MC

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){

if(!mouseLoc.equals(new Point(e.stageX,e.stageY)))return;

mc.rotation+=30;

}

}

}