Цитата:
Сообщение от in4core
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно. )) ты просто красавец. На будущее тебя просвещу, - нормальные люди вешают либо 1 либо 2 события. 1 событие вешается, если кнопка создана программно, или графически , не задействуя функционал . То в одном событии описывается и функционал и анимация(поведение). А есть случай, когда будете разрабатывать игры или хотя бы что то похожее - голова поймет, что для массовых кнопок прописывается ОБЩИЙ функционал сразу, - а функционал запуска - прописывается уже после, - получается 2 события ! Учи мат часть.
|
какая разница как создана кнопка? =)
листенер на клик у кнопки - один! =)
листенер на лэйауте - это листенер на лэйауте, но не на кнопке.
и внутренний клик эвент в кнопке всего лишь диспетчит какое-либо событие, как правило такое же.
извне - слушатель на одно событие - один.
не надо пудрить людям мозги. этот форум будут читать и новички - а вы им мозги запудриваете.
Добавлено через 42 минуты
Вот вам пример стандартной кнопки. Создаётся такая кнопка в Flash CS ручками послойно из графических ресурсов. Отрисовывается hitArea для каждой, если кнопки разные. Соответственно, имена полей - так же проставляются вручную ( по дефолту - 4 лейбла на 4 кадрах, 1 - для hitArea, 1 - для текстового поля.
Вешаются листенеры на такую кнопку как и на обычный SimpleButton.

Код AS3:
package ru.domain.project.view.gui.buttons {
import flash.display.*;
import flash.events.*;
import flash.text.*;
/**
* ...
* @author Frost
*/
public class MyButton extends EventDispatcher {
private var hitArea:MovieClip;
private var layout:MovieClip;
private var _enabled:Boolean;
public function MyButton(mc:MovieClip) {
layout = mc;
if (layout.getChildByName('hit') == null) {
trace('MYBTN_ERROR: Cant find hit layer in MovieClip: ' + mc.name);
return;
}
hitArea = layout.getChildByName('hit') as MovieClip;
enabled = true;
}
private function turnOn():void {
hitArea.buttonMode = true;
hitArea.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
hitArea.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
hitArea.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
hitArea.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
hitArea.addEventListener(MouseEvent.CLICK, onClick);
layout.gotoAndStop('up');
}
private function turnOff():void {
hitArea.buttonMode = false;
hitArea.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
hitArea.removeEventListener(MouseEvent.ROLL_OVER, onRollOver);
hitArea.removeEventListener(MouseEvent.ROLL_OUT, onRollOut);
hitArea.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
hitArea.removeEventListener(MouseEvent.CLICK, onClick);
layout.gotoAndStop('disabled');
}
public function get enabled():Boolean {
return _enabled;
}
public function set enabled(val:Boolean):void {
_enabled = val;
(_enabled == true) ? turnOn() : turnOff();
}
public function text(txt:String):void {
var tf:TextField = layout.getChildByName('tf') as TextField;
formatTextField(tf, txt);
}
private function formatTextField(tf:TextField, e:String):void {
tf.text = e;
tf.selectable = false;
//some other format settings
}
private function onClick(e:MouseEvent):void {
dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
private function onRollOver(e:MouseEvent):void {
layout.gotoAndStop('over');
dispatchEvent(new MouseEvent(MouseEvent.ROLL_OVER));
}
private function onRollOut(e:MouseEvent):void {
layout.gotoAndStop('up');
dispatchEvent(new MouseEvent(MouseEvent.ROLL_OUT));
}
private function onMouseUp(e:MouseEvent):void {
layout.gotoAndStop('up');
}
private function onMouseDown(e:MouseEvent):void {
layout.gotoAndStop('down');
}
}
}