我有拖放功能和对象选择方面的问题。
我创建简单的flash编曲器(将表格图标添加到舞台 - 房间)。我有按钮,它创建了表格图标的新实例,我可以拖放到舞台上。
问题是我只能拖放最后添加的图标。如果我添加新的实例od图标我不能(拖放)之前创建的任何图标:/
我的代码在这里:主要类
import flash.events.MouseEvent;
import flash.events.Event;
import com.adobe.images.JPGEncoder;
import flash.geom.Point;
btn_middleTable.addEventListener(MouseEvent.CLICK, f_middleIco);
btn_bigTable.addEventListener(MouseEvent.CLICK, f_bigIco);
btnSave.addEventListener(MouseEvent.CLICK, f_save);
function f_middleIco(event:MouseEvent):void
{
var middle:MiddleIco = new MiddleIco();
middle.x = 20;
middle.y = 20;
stage.addChild(middle);
trace("created");
}
function f_bigIco(event:MouseEvent):void
{
var big:BigIco = new BigIco();
big.x = 20;
big.y = 20;
stage.addChild(big);
trace("created");
}
function f_save(event:MouseEvent)
{
var jpgEncoder:JPGEncoder;
jpgEncoder = new JPGEncoder(90);
var bitmapData:BitmapData = new BitmapData(stage.width, stage.height);
bitmapData.draw(stage, new Matrix());
var img = jpgEncoder.encode(bitmapData);
var file:FileReference = new FileReference();
file.save(img, "filename.png");
}
图标实例包:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Point;
public class BigIco extends MovieClip {
public var active:Boolean;
public function BigIco() {
// constructor code
this.addEventListener(Event.ENTER_FRAME, f_move);
this.addEventListener(MouseEvent.MOUSE_DOWN,downf);
this.addEventListener(MouseEvent.MOUSE_UP,upf);
}
public function f_move(e:Event)
{
if(active==true)
{
startDrag();
}
else if(active==false)
{
stopDrag();
}
}
public function downf(e:MouseEvent)
{
active = true;
}
public function upf(e:MouseEvent)
{
active = false;
}
}
}
如何能够选择实际上超过鼠标光标的每个图标(实例)?
答案 0 :(得分:0)
理论:startDrag
和stopDrag
并不是要重复调用 - 但是对于你添加的每个剪辑,它们将是每一帧一次,因为你使用{{1}听众。
我没有对此进行测试,但调用ENTER_FRAME
实际上可能会停止任何拖动 - 包括在其他剪辑上 - 因为您是only allowed to drag a single Sprite
(and hence MovieClip
) in the first place。
因此,如果该理论成立,stopDrag
会在startDrag()
的新图标上立即取消f_move()
{/ 1}}。
但无论如何都不需要stopDrag()
听众。这应该给出相同的结果(除了它实际上有效) - 只需在鼠标监听器中立即调用拖动方法:
ENTER_FRAME
除此之外,我无法在您的代码中发现任何实际问题。
编辑:“完美”版本,如果指针未超过图标也会检测鼠标:
public class BigIco extends MovieClip {
public var active:Boolean;
public function BigIco() {
// constructor code
this.addEventListener(MouseEvent.MOUSE_DOWN, downf);
this.addEventListener(MouseEvent.MOUSE_UP, upf);
}
public function downf(e:MouseEvent)
{
// Unless you're going to use 'active' for other stuff,
// you can remove this line:
active = true;
startDrag();
}
public function upf(e:MouseEvent)
{
// Same here:
active = false;
stopDrag();
}
}