Показать сообщение отдельно
Старый 29.06.2018, 03:23
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 3  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Уля, жесть. Пытаешься попасть пальцем в небо, перемешивая фрагменты недокода в рандомном порядке)) но так не получится)) Почитай книжечки. Пожалуйста.
И, божечки, неужели так сложно оформить код в сообщении в теги ??
Ладно, попробуем снова и по порядку.

Разберем твою задачу, озвученную в теме.

Дано:
Цитата:
У меня 3 текстовых поля t1, t2, t3. При клике на каждое из них загорается циферка. если на сцене нет цифер (все поля пустые) - тогда на поле, на котором щелкнули, загорается единичка. если единичка уже занята, на след. поле загорается двойка и т.д. Если щелкнуть по цифре, то она исчезает
Что мы имеем:
- Текстовые поля t1, t2 и t3.
- переменную X (та самая "циферка"), которая по умолчанию равна 0.
- при клике на одно из текстовых полей происходит следующее:
1. если поле пустое, то вписываем в него X+1.
2. если поле не пустое, то оно становится пустым. Также, если его значение было = X, то делаем X-1
Вроде как все, исходя из тобой написанного.

Ок. Создаем переменную, а которой будем хранить "циферку". Она у нас целое.
Код AS3:
var X:int = 0;
далее, слушаем клики по текстовым полям в одной функции
Код AS3:
t1.addEventListener(MouseEvent.CLICK, textFieldHandler);
t2.addEventListener(MouseEvent.CLICK, textFieldHandler);
t3.addEventListener(MouseEvent.CLICK, textFieldHandler);
после чего пишем непосредственно саму функцию слушателя

Код AS3:
function textFieldHandler(event:MouseEvent):void
        {
            //достанем из события event target - поле, на которое целкнули
            //и положим его в отдельную переменную, чтобы было удобней работать и читабельней
            var tf:TextField = event.target as TextField;
 
            //если текстовое поле, покоторому кликнули пустое, то
            if(tf.text == '')
            {
                //выражение ++ перед переменной сначала прибавляет 1 к X, а потом созвращает его значение
                //то есть, если X был = 0, то программа сначала прибавит к нему 1, после чего
                //вернет уже результат сложения. Таким образом, если Х был равен 0, то в текстфилд
                //по которому мы кликнули, запишется 1. И Х уже будет равен 1, так что в следующий раз,
                //когда мы кликнем по другому текстовому полю, произойдет все тоже самое, но уже с Х равняющимся 1, 
                //и во второе поле запишется уже 2.
                tf.text = ++X;
 
            } else //если поле не пустое, то есть "если кликнули по циферке"
            {
                //сотрим: если значение поля равно Х, то есть самое большое число из имеющихся, то авчитаем из Х 1.
                //кстати, выражение -- после переменно сначала возвращает её значение, а уже потом изменяет её на -1. 
                //так что, важно помнить разницу между ++X и X++
                if(tf.text == String(X)) X--;
                //ну и все, присваиваем этому полю пустую строку
                tf.text = '';
            }
        }
Итого, если убрать комменты, весь код будет выглядеть так
Код AS3:
import flash.text.TextField;
import flash.events.MouseEvent;
 
var X:int = 0;
 
t1.addEventListener(MouseEvent.CLICK, textFieldHandler);
t2.addEventListener(MouseEvent.CLICK, textFieldHandler);
t3.addEventListener(MouseEvent.CLICK, textFieldHandler);
 
function textFieldHandler(event:MouseEvent):void
        {
            var tf:TextField = event.target as TextField;
 
            if(tf.text == '')
            {
                tf.text = ++X;
 
            } else
            {
                if(tf.text == String(X)) X--;
                tf.text = '';
            }
        }
__________________
while(live()) { hope(); }


Последний раз редактировалось ZergMaster; 29.06.2018 в 10:39.