如何在 Flash AS3 中构建自定义滑块?
How to build a custom slider in Flash AS3?
我需要一些帮助来制作自定义滑块,有点像您将用于音量按钮的滑块。我有一个,但不能多用;一旦我在停止工作之前添加了多个,我认为我不能使用局部变量,因为我需要使用事件侦听器来让洗涤器滑动。
我想问的是,是否有人可以提供一个多用途滑块的代码,并解释它是如何工作的,以便我可以从中学习。我可以显示我现在正在使用的代码,但它可能没用。
public function createSlider(x:Number, y:Number, parent:DisplayObjectContainer) : void {
this.slider = new Sprite();
this.slider.graphics.beginFill(0xFFFFFF);
this.slider.graphics.drawCircle(x, y, 7);
this.slider.graphics.endFill();
this.bar = makeRoundedRect(x - 6, y - 6, 100, 11, 0xCCCCCC, 1, [10, 10, 10, 10]);
parent.addChild(bar);
parent.addChild(slider);
this.slider.addEventListener(MouseEvent.MOUSE_OVER, sliderHover);
}
private function sliderHover(e:MouseEvent) : void
{
this.slider.addEventListener(MouseEvent.MOUSE_DOWN, sliderDown);
}
private function sliderDown(e:MouseEvent) : void {
this.slider.addEventListener(MouseEvent.MOUSE_MOVE, sliderMove);
this.slider.addEventListener(MouseEvent.MOUSE_UP, sliderDone);
this.slider.addEventListener(MouseEvent.MOUSE_OUT, sliderDone);
}
private function sliderMove(e:MouseEvent) : void {
this.slider.addEventListener(MouseEvent.MOUSE_DOWN, sliderDown);
this.slider.removeEventListener(MouseEvent.MOUSE_MOVE, sliderMove);
this.slider.startDrag(false, new Rectangle(0, slider.y, 90, 0));
}
private function sliderDone(e:MouseEvent) : void {
this.temp_mouseCurX = Math.abs(this.slider.x + 10);
trace(this.temp_mouseCurX);
this.slider.stopDrag();
}
它使用了一个私有变量,我知道它不适合我正在尝试做的事情。
您应该尝试使用 e.currentTarget。而不是 this.slider.
我需要一些帮助来制作自定义滑块,有点像您将用于音量按钮的滑块。我有一个,但不能多用;一旦我在停止工作之前添加了多个,我认为我不能使用局部变量,因为我需要使用事件侦听器来让洗涤器滑动。
我想问的是,是否有人可以提供一个多用途滑块的代码,并解释它是如何工作的,以便我可以从中学习。我可以显示我现在正在使用的代码,但它可能没用。
public function createSlider(x:Number, y:Number, parent:DisplayObjectContainer) : void {
this.slider = new Sprite();
this.slider.graphics.beginFill(0xFFFFFF);
this.slider.graphics.drawCircle(x, y, 7);
this.slider.graphics.endFill();
this.bar = makeRoundedRect(x - 6, y - 6, 100, 11, 0xCCCCCC, 1, [10, 10, 10, 10]);
parent.addChild(bar);
parent.addChild(slider);
this.slider.addEventListener(MouseEvent.MOUSE_OVER, sliderHover);
}
private function sliderHover(e:MouseEvent) : void
{
this.slider.addEventListener(MouseEvent.MOUSE_DOWN, sliderDown);
}
private function sliderDown(e:MouseEvent) : void {
this.slider.addEventListener(MouseEvent.MOUSE_MOVE, sliderMove);
this.slider.addEventListener(MouseEvent.MOUSE_UP, sliderDone);
this.slider.addEventListener(MouseEvent.MOUSE_OUT, sliderDone);
}
private function sliderMove(e:MouseEvent) : void {
this.slider.addEventListener(MouseEvent.MOUSE_DOWN, sliderDown);
this.slider.removeEventListener(MouseEvent.MOUSE_MOVE, sliderMove);
this.slider.startDrag(false, new Rectangle(0, slider.y, 90, 0));
}
private function sliderDone(e:MouseEvent) : void {
this.temp_mouseCurX = Math.abs(this.slider.x + 10);
trace(this.temp_mouseCurX);
this.slider.stopDrag();
}
它使用了一个私有变量,我知道它不适合我正在尝试做的事情。
您应该尝试使用 e.currentTarget。而不是 this.slider.