2015-02-16 4 views
0

Я сделал простые кнопки перетаскивания цветов, где, если пользователь перетаскивает определенные кнопки, он будет определять цвет на основе того, какой пользователь перетаскивает и применять его к объекту, где пользователь опустите цвет. Тем не менее, я не могу понять, почему цвет меняется на черный, когда я выбираю кнопку и перетаскиваю ее на один объект в сцене, он станет черным, даже если я уже определил цвет кнопок.Изменение цвета объектов на основе цвета 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

Ваш ответ высоко ценится!

Большое спасибо

+1

Вы пытаетесь назначить строковое значение для целого var. Это приведет к 0, поэтому ваш цвет будет всегда черным. Вы должны использовать: 'changeColor.color = parseInt (e.currentTarget.text, 16);' –

ответ

1

Давайте посмотрим на этой линии:

changeColor.color = e.currentTarget.text;

e.currentTarget представляет собой круг. Что такое e.currentTarget.text? Circle не имеет собственности text. Он имеет ребенка TextField. Итак, если вы хотите получить текст из TextField вы должны написать:

e.currentTarget.getChildAt(1).text;

круг двое детей: Форма и 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); 
} 

Круг это клип. 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; 
} 
+0

Большое вам спасибо. Это сработало – Yunnan

+0

Добро пожаловать. – subdan

Смежные вопросы