|
|
|||||
Регистрация: Mar 2012
Сообщений: 61
|
Menu navigation
Дорогие форумчане-программисты... подскажите мне, пожалуйста... как написать код программы, чтобы после нажатия выбранной кнопки цвет (розовый) текста в кнопке должен измениться на другой (белый) . После нажатия на другую кнопку из Меню - та станет белым, а предыдущая выбранная кнопка возвращается розовым.
import flash.events.Event; navigation.btn_MenuHome.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuAbout.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuTraining.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuTest.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuReviews.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuContact.addEventListener(MouseEvent.CLICK, butClick); function butClick(e: Event = null) { switch (e.target.name) { case "btn_MenuHome": outputText.text = "Home"; break; case "btn_MenuAbout": outputText.text = "About"; break; case "btn_MenuTraining": outputText.text = "Training"; break; case "btn_MenuTest": outputText.text = "Test"; break; case "btn_MenuReviews": outputText.text = "Reviews"; break; case "btn_MenuContact": outputText.text = "Contact"; break; } } Последний раз редактировалось mariamarfi; 29.04.2014 в 14:04. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
У меня не работают компоненты адоби, но вот приблизительно так можно сделать -
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { private static const PINC:uint = 0xFF6986; private static const WHITE:uint = 0xF8FAFF; private static const LILAC:uint = 0xBB63CC; private const BUTTON_WIDTH:int = 70; private const BUTTON_HEIGHT:int = 45; private var _currentButton:Sprite; private var _container:Sprite; public function Main() { _container = new Sprite(); super.addChild(_container); var button:Sprite; var label:TextField; var offsetX:int; for (var i:int = 0; i < 8; i++) { button = createButton(BUTTON_WIDTH, BUTTON_HEIGHT, LILAC); button.x = offsetX; offsetX += BUTTON_WIDTH + 5; label = createLabel(i.toString()); button.addChild(label); _container.addChild(button) } _container.addEventListener(MouseEvent.MOUSE_UP, container_mouseUpHandler); } private function container_mouseUpHandler(event:MouseEvent):void { var button:Sprite = event.target as Sprite; var label:TextField; if (button != _currentButton) { if (_currentButton != null) { label = _currentButton.getChildAt(0) as TextField; label.setTextFormat(defauilTextFormat()); } _currentButton = button; label = _currentButton.getChildAt(0) as TextField; label.setTextFormat(pincTextFormat()); } } private function createLabel(text:String):TextField { var label:TextField = new TextField(); label.defaultTextFormat = defauilTextFormat(); label.mouseEnabled = false; label.text = text; return label; } private function defauilTextFormat():TextFormat { var textFormat:TextFormat = new TextFormat(); textFormat.size = 40; textFormat.bold = true; textFormat.color = WHITE; return textFormat; } private function pincTextFormat():TextFormat { var textFormat:TextFormat = new TextFormat(); textFormat.size = 40; textFormat.bold = true; textFormat.color = PINC; return textFormat; } private function createButton(w:Number, h:Number, color:uint):Sprite { var button:Sprite = new Sprite(); button.graphics.beginFill(color); button.graphics.drawRect(0, 0, w, h); button.graphics.endFill(); return button; } } } Вы наверняка будете использовать встроенные компоненты, по этому нужно обратить внимание лишь на строки ниже. Смысл в том, чтобы все кнопки сложить в один контейнер и подписать его на клик. В обработчике клика вытаскивать кнопку, у неё лейбел и уже его свойству текст задавать цвет. И так же сделать поле текущая кнопка, чтобы отменять у предыдущей розовый цвет. private var _currentButton:Sprite; private var _container:Sprite; private function container_mouseUpHandler(event:MouseEvent):void { var button:Sprite = event.target as Sprite; var label:TextField; if (button != _currentButton) { if (_currentButton != null) { label = _currentButton.getChildAt(0) as TextField; label.setTextFormat(defauilTextFormat()); } _currentButton = button; label = _currentButton.getChildAt(0) as TextField; label.setTextFormat(pincTextFormat()); } } Цитата:
Последний раз редактировалось Akopalipsis; 26.04.2014 в 00:46. |
|
|||||
Да ладно, у него равномерно получилось опечататься в названии обоих методов изменения цвета.
Цитата:
Цитата:
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Mar 2012
Сообщений: 61
|
import flash.events.Event; import flash.display.SimpleButton; import flash.display.DisplayObjectContainer; import flash.text.TextFieldAutoSize; import flash.text.TextField; var _currentBtn:SimpleButton; // Текущая кнопка navigation.btn_MenuHome.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuAbout.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuTraining.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuTest.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuReviews.addEventListener(MouseEvent.CLICK, butClick); navigation.btn_MenuContact.addEventListener(MouseEvent.CLICK, butClick); function butClick(e: Event = null) { switch (e.target.name) { case "btn_MenuHome": outputText.text = "Home"; break; case "btn_MenuAbout": outputText.text = "About"; break; case "btn_MenuTraining": outputText.text = "Training"; break; case "btn_MenuTest": outputText.text = "Test"; break; case "btn_MenuReviews": outputText.text = "Reviews"; break; case "btn_MenuContact": outputText.text = "Contact"; break; } changeColor(e.target as SimpleButton); } //====Изменение цвета текущей кнопки=====// function changeColor(btn:SimpleButton):void { if(_currentBtn) { (_currentBtn.upState as TextField).textColor=0xFDBDF9; } _currentBtn = btn; //trace(btn.upState); (btn.upState as TextField).textColor=0xF8FAFF; } При компиляции выдаётся ошибка.... почему?: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at Fon_fla::MainTimeline/changeColor() at Fon_fla::MainTimeline/butClick() TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at Fon_fla::MainTimeline/changeColor() at Fon_fla::MainTimeline/butClick() TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at Fon_fla::MainTimeline/changeColor() at Fon_fla::MainTimeline/butClick() Последний раз редактировалось mariamarfi; 26.04.2014 в 14:02. Причина: Добавление файлов |
|
|||||
Попробуйте e.currentTarget
Добавлено через 9 минут У вас в кнопках статические текстовые поля. Тем временем вы обращаетесь к спрайту кнопки принимая его за TextField и пытаетесь у него вызвать textColor.
__________________
There is no thing in this world that is not simple. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Создаю кнопку и лейблу присваиваю значение. Затем btn.textField.defaultTextFormat задаю текст формат.
Компилирую, долю секунды кнопки на сцене нет, но есть надпись желаемого цвет в нулевых координатах. Затем появляется кнопка с моим лейблем но черного цвета. Почему? Опять глюк или в чем-то другом? |
|
|||||
Цитата:
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вот, сделал с текст форматом, но потом все переделывать ища проблему и на этом и оставил.
Меня не вдохнавляют стандартные компоненты. package { import fl.controls.Button; import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { public function Main() { var _group:Sprite = new Sprite(); _group.addEventListener(MouseEvent.MOUSE_UP, group_mouseUpHandler); super.addChild(_group); var btn:Button; var offsetX:Number = 0; for (var i:int = 0; i < 1; i++) { btn = new Button(); btn.x = offsetX; offsetX += btn.width + 5; btn.label = 'assd'; btn.textField.textColor = 0x52AD25; _group.addChild(btn); } } private static const PINK:uint = 0x52AD25; private static const WHITE:uint = 0xFFF9F9; private var _currentButton:Button; private function group_mouseUpHandler(event:MouseEvent):void { var btn:Button = event.target as Button; if (btn != _currentButton) { var textField:TextField; if (_currentButton != null) { textField = _currentButton.textField; textField.textColor = WHITE; } _currentButton = btn; _currentButton.textField.textColor = PINK; } } private function whiteTextFormat():TextFormat { var textFormat:TextFormat = new TextFormat(); textFormat.color = 0x52AD25; return textFormat; } } } |
Часовой пояс GMT +4, время: 15:09. |
|
« Предыдущая тема | Следующая тема » |
|
|