根据颜色 as3 更改对象的颜色
Changing color of objects based on the color as3
我制作了简单的拖放颜色按钮,如果用户拖动特定按钮,它会根据用户拖动的内容检测颜色并将其应用到用户将颜色放入的对象。但是,我不明白为什么每当我选择一个按钮并将其拖放到场景中的单个对象时,颜色会一直变为黑色,即使我已经定义了按钮的颜色,它也会变成黑色。
我该如何解决这个问题?
这是我正在使用的代码(我在 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:
非常感谢您的回答!
非常感谢
让我们看看这一行:
changeColor.color = e.currentTarget.text;
e.currentTarget
是一个圆。什么是 e.currentTarget.text
? Circle 没有 text
属性。它有一个 child TextField
。所以,如果你想从 TextField 中获取文本,你必须这样写:
e.currentTarget.getChildAt(1).text;
Circle 有两个children: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 是一个动态 class,这意味着您可以向其中添加任何 属性。在我们的例子中,我们添加了一个 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;
}
我制作了简单的拖放颜色按钮,如果用户拖动特定按钮,它会根据用户拖动的内容检测颜色并将其应用到用户将颜色放入的对象。但是,我不明白为什么每当我选择一个按钮并将其拖放到场景中的单个对象时,颜色会一直变为黑色,即使我已经定义了按钮的颜色,它也会变成黑色。
我该如何解决这个问题?
这是我正在使用的代码(我在 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:
非常感谢您的回答!
非常感谢
让我们看看这一行:
changeColor.color = e.currentTarget.text;
e.currentTarget
是一个圆。什么是 e.currentTarget.text
? Circle 没有 text
属性。它有一个 child TextField
。所以,如果你想从 TextField 中获取文本,你必须这样写:
e.currentTarget.getChildAt(1).text;
Circle 有两个children: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 是一个动态 class,这意味着您可以向其中添加任何 属性。在我们的例子中,我们添加了一个 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;
}