根据颜色as3更改对象的颜色

时间:2015-02-16 02:36:59

标签: actionscript-3 flash drag-and-drop

我制作了简单的拖放颜色按钮,如果用户拖动特定按钮,它将根据用户拖动的内容检测颜色,并将其应用到用户将颜色放入的对象。但是,我无法弄清楚为什么每当我选择一个按钮并将其拖放到场景中的单个对象时颜色会一直变为黑色,即使我已经定义了按钮的颜色,它也会变黑。 / p>

我该如何解决这个问题?

这是我正在使用的代码(我在CS6上使用它):

var array_objects:Array = new Array(firstRectangle_mc, secondRectangle_mc, thirdRectangle_mc, fourthRectangle_mc);
var hit_object:Array = new Array();

var color_x:int;
var color_y:int;

addListeners(red_btn, black_btn, yellow_btn);

function addListeners(... objects):void
{
    var color:Array = new Array("0xFF0000", "0x000000", "0xFFFF00");

    for (var i:int = 0; i < objects.length; i++)
    {
        var input:TextField = new TextField();

        input.text = color[i];
        input.visible = false;

        objects[i].addChild(input);

        objects[i].addEventListener(MouseEvent.MOUSE_DOWN, onColorMouseDown);
        objects[i].addEventListener(MouseEvent.MOUSE_UP, onColorMouseUp);
    }
}

function onColorMouseDown(e:MouseEvent):void
{
    hit_object = [];

    color_x = e.currentTarget.x;
    color_y = e.currentTarget.y;

    e.currentTarget.startDrag();
}

function onColorMouseUp(e:MouseEvent):void
{
    e.currentTarget.stopDrag();

    for (var i:int = 0; i < array_objects.length; i++)
    {
        if (e.currentTarget.hitTestObject(array_objects[i]))
        {
            hit_object.push(array_objects[i]);
        }
    }

    e.currentTarget.x = color_x;
    e.currentTarget.y = color_y;

    var changeColor:ColorTransform = hit_object[hit_object.length - 1].transform.colorTransform;

    changeColor.color = e.currentTarget.text;

    hit_object[hit_object.length - 1].transform.colorTransform = changeColor;
}

以下是演示的链接:

Link

你的回答非常感谢!

非常感谢

1 个答案:

答案 0 :(得分:1)

让我们看看这一行:

changeColor.color = e.currentTarget.text;

e.currentTarget是一个圆圈。什么是e.currentTarget.text? Circle没有text属性。它有一个孩子TextField。所以,如果你想从TextField获取文本,你必须写:

e.currentTarget.getChildAt(1).text;

Circle有两个子项:Shape和TextField。所以getChildAt(1) = TextField


您可以在没有TextField的情况下执行此操作。参见:

for (var i:int = 0; i < objects.length; i++)
{
    objects[i].color = color[i];
    objects[i].addEventListener(MouseEvent.MOUSE_DOWN, onColorMouseDown);
    objects[i].addEventListener(MouseEvent.MOUSE_UP, onColorMouseUp);
}

圈出它是一个MovieClip。 MC它是一个动态类,这意味着你可以添加任何属性。在我们的示例中,我们添加了color属性。

下一步: changeColor.color = e.currentTarget.color; 理解?


在你的代码中我发现了一个错误:

var changeColor:ColorTransform = hit_object[hit_object.length - 1].transform.colorTransform;

如果您停止拖动圆圈并且圆圈未点击任何框,则会显示错误:

TypeError: Error #1010: A term is undefined and has no properties.

为避免这种情况,请添加条件:

if (hit_object.length)
{
    var changeColor:ColorTransform = hit_object[hit_object.length - 1].transform.colorTransform;

    changeColor.color = e.currentTarget.color;

    hit_object[hit_object.length - 1].transform.colorTransform = changeColor;
}