2014-01-30 4 views
0

У меня есть различные цветовые кнопки, которые меняют цвет мувиклипа при щелчке, но я хочу написать код, который говорит как if btnRed has been clicked, apply red ColorTransform. Это связано с тем, что у меня есть несколько кнопок, и я не хочу писать методы, которые почти идентичны только с разными значениями множителя RGB. Есть ли способ сделать это так, чтобы слушатель событий для каждой кнопки вызывает тот же метод, но в этом методе в основном говорит if redBtn is clicked, change color to red, if blueBtn is clicked, change color to blue и т.д.Как определить, была ли нажата конкретная кнопка?

ответ

0

Держите все кнопки в массиве, в CLICK Event determin который один был нажат с buttonArray.indexOf(event.target);
, затем получите соответствующее значение цвета от map, как Dictionary или Object.

Вы также можете сохранить свои кнопки в самом словаре и прокрутить его, чтобы найти свой цвет.

+0

Есть ли какие-либо рабочие примеры или фрагменты кода для этого, что может оказаться полезным? Все мои кнопки называются «redBtn», «blueBtn», «greenBtn» и т. Д. – user3238047

2

Как указано M4tchB0X3r, используйте Dictionary, чтобы сохранить поиск объекта кнопки для преобразования цвета. Вот рабочий код, предполагая, что ваши имена кнопок: btnRed, btnGreen и btnBlue, и что у вас есть какой-то именованный объект на сцене, называемый box1.

Они ключевые моменты здесь, что Dictionary может использовать ссылки на объекты в качестве ключей (а не только целые числа и строки как с простым Object типа), и что target свойства Event объекта содержит ссылку на вещи, которые поднимали событие - в этом случае кнопка. На самом деле, вероятно, безопаснее использовать currentTarget, потому что иногда target является родительским или дочерним экранным объектом из-за того, что события могут пузыриться вверх и вниз по дереву.

import flash.utils.Dictionary; 
import flash.geom.ColorTransform; 

var buttonToTransform:Dictionary = new Dictionary(); 
buttonToTransform[btnRed] = new ColorTransform(1.0, 0.2, 0.2); 
buttonToTransform[btnGreen] = new ColorTransform(0.2, 1.0, 0.2); 
buttonToTransform[btnBlue] = new ColorTransform(0.2, 0.2, 1.0); 

// Note: for..in iterates over the keys of an object 
// (vs. for each, which iterates over the values) 
for(var btn:* in buttonToTransform) { 
    btn.addEventListener(MouseEvent.CLICK, onTransform); 
} 

function onTransform(e:MouseEvent):void { 
    this.box1.transform.colorTransform = buttonToTransform[e.currentTarget]; 
} 
+0

избили меня;), просто написал в основном то же самое. – M4tchB0X3r

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