使多个对象可拖动

时间:2014-01-28 02:21:50

标签: actionscript-3 actionscript actionscript-2

我有大约50个符号,我想让它成为可拖动的。没什么好看的,只需点击它并将其拖到不同的位置。

我找到了as3代码,但是当我将其粘贴到我的文件中时,它会给我错误:

**Error** Scene=Scene 1, layer=Units, frame=1:Line 9: The class or interface 'MouseEvent'      could not be loaded.
 function mouseDownHandler(evt:MouseEvent):void {

该代码是:

// Register mouse event functions
fighter_uk.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
fighter_uk.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

fighter_uk.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
fighter_uk.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

// Define a mouse down handler (user is dragging)
function mouseDownHandler(evt:MouseEvent):void {
var object = evt.target;
// we should limit dragging to the area inside the canvas
object.startDrag();
}

function mouseUpHandler(evt:MouseEvent):void {
var obj = evt.target;
    obj.stopDrag();
}

我正在使用flash pro 8,所以我尝试找到as2代码但找不到它。

此外,是否有一种“简单”的方式来编码所有50个对象?

3 个答案:

答案 0 :(得分:0)

我认为您正在尝试使用AS2编译器编译AS3代码。尝试将编译设置更改为目标AS3。 此外,您可能需要在代码顶部包含类导入:

import flash.events.MouseEvent;

要拖动50个对象,将它们全部添加到同一容器精灵上,并将侦听器添加到容器精灵中:

var holder:Sprite = new Sprite();
for ( var i:int = 0, l:int = 50; i < l; i++ ) {
  var dragee:YOUR_CUSTOM_OBJECT = new YOUR_CUSTOM_OBJECT();
  holder.addChild(dragee);
}
addChild(holder);
holder.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
holder.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
holder.addEventListener(Event.MOUSE_LEAVE, mouseUpHandler);
var currentDragee:YOUR_CUSTOM_OBJECT = null;
function mouseDownHandler(evt:MouseEvent):void {
  currentDragee = evt.target as YOUR_CUSTOM_OBJECT;
  if ( currentDragee !== null ) {
    currentDragee.startDrag();
    holder.addChild(currentDragee); // bring current to front position
  }
}
function mouseUpHandler(evt:Event):void {
  if ( currentDragee !== null ) currentDragee.stopDrag();
  currentDragee = null;
}

YOUR_CUSTOM_OBJECT是您需要拖动的对象类。希望它有所帮助!

答案 1 :(得分:0)

This页似乎有你想要的答案(AS2拖放)。如果您已经看过它,那么您需要解释为什么它不能满足您的需求。

如果要在AS2中拖放多个实例,您仍然可以将代码添加到movieClip符号,从库中导出并使用attachMovie(所有50个)加载实例。如果它们都不同,则根据需要将代码附加到剪辑本身,或者附加到其他地方的某些功能,这些功能将捕获所有点击并决定点击的内容。这在AS2中非常可行。

请记住,您可以使用onClipEvent(加载)功能设置很多初始提升。

这是我在AS2中制作节点树的sample。它全部可拖动(鼠标拖动)和可缩放(使用鼠标滚轮)。您可以通过单击节点框中的小向下箭头来添加节点。每个节点都在监听鼠标。

您希望在大多数情况下查看此部分:

// Enable drag on button press
on (press) 
{
    startDrag(this);
}
// Stop the drag on release of mouse button
on (release) 
{

    stopDrag();
}

除此之外,我不确定你的设置看起来如何,所以我希望这有助于让球滚动。 (检查链接,那里有很多小宝石)。

答案 2 :(得分:0)

Flash Professional 8仅支持ActionScript 2&amp; 1 您可以关注此官方URL并了解如何在ActionScript 2中执行此操作,但我建议您使用ActionScript 3。