【发布时间】:2012-12-28 01:29:01
【问题描述】:
我有两个类,分别称为 Guest 和 Guest2。我想知道是否可以从 Guest2 类中删除 Guest 类中的事件监听器。下面是完整的代码。注意:两个类的代码完全相同
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.*;
public class Guest extends MovieClip
{
var walkSpeed:Number = 5;
var oldPosX;
var oldPosY;
var myGlow:GlowFilter = new GlowFilter();
public function Guest()
{
addEventListener(MouseEvent.MOUSE_OVER, addGlow);
}
function addGlow(event:MouseEvent):void
{
filters = [myGlow];
addEventListener(MouseEvent.MOUSE_OUT, removeGlow);
addEventListener(MouseEvent.CLICK, ready);
}
function removeGlow(event:MouseEvent):void
{
filters = [];
}
function ready(event:MouseEvent):void
{
filters = [myGlow];
stage.addEventListener(MouseEvent.MOUSE_DOWN, walk);
removeEventListener(MouseEvent.MOUSE_OUT, removeGlow);
**MovieClip(root).Guest02.addEventListener(MouseEvent.CLICK, walkTo);**
}
function walk(event:MouseEvent):void
{
oldPosX = parent.mouseX;
oldPosY = parent.mouseY;
rotation = Math.atan2(oldPosY - y,oldPosX - x) / Math.PI * 180;
filters = [];
stage.removeEventListener(MouseEvent.MOUSE_DOWN, walk);
stage.addEventListener(Event.ENTER_FRAME, loop);
}
function loop(event:Event):void
{
var dx:Number = oldPosX - x;
var dy:Number = oldPosY - y;
var distance:Number = Math.sqrt((dx*dx)+(dy*dy));
if (distance<walkSpeed)
{
// if you are near the target, snap to it
x = oldPosX;
y = oldPosY;
removeEventListener(Event.ENTER_FRAME, loop);
}
else
{
x = x+Math.cos(rotation/180*Math.PI)*walkSpeed;
y = y+Math.sin(rotation/180*Math.PI)*walkSpeed;
}
}
**function walkTo(event:MouseEvent):void
{
_Guest02.removeEventListener(MouseEvent.CLICK, ready);
}**
}
}
【问题讨论】:
-
"两个类的代码完全相同。"从你最后两个问题和那个陈述来看,我开始觉得你对类和实例的角色有点不清楚。为什么你有两个完全一样的代码?
-
@Jake King:我有 2 个具有相同代码的类的原因是因为我有 8 个来宾,它们的功能都相同,但出于原型原因使用了两个,而不是在数组中或创建一个单独的课程,所有人都可以访问我做了很长的路要走,所以我自己对我正在编码的内容有充分的了解。两位客人都可以互相交谈,所以我知道我需要一个布尔值,但现在我想知道现在是否可以从其他类中删除事件侦听器,然后我将处理数组和 for 循环以使其高效.
标签: actionscript-3